首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Kubernetes利用Volume挂载ConfigMap与Secret

编程知识
2024年09月01日 18:29

1、概述

  在Kubernetes集群中,应用的配置管理是一个关键且复杂的任务。随着应用的扩展和微服务架构的普及,传统的配置文件管理方式已经难以满足动态、灵活的配置需求。幸运的是,Kubernetes提供了强大的配置管理能力,其中ConfigMap和Secret结合Volume挂载的方式是实现这一目标的重要手段。

1.1 ConfigMap

  ConfigMap是Kubernetes中的一个API对象,用于存储非敏感的配置信息,如应用的配置参数、环境变量等。它允许你将配置信息与应用的容器镜像解耦,从而更容易地管理和更新配置。

1.2 Secret

  与ConfigMap类似,Secret也是Kubernetes中的一个API对象,但它用于存储敏感信息,如数据库密码、OAuth令牌等。Secret通过Base64编码存储数据,但Kubernetes在将Secret挂载到Pod中时会自动进行解码,以确保数据的安全性。详细Secret资源讲解请参见《Kubernetes对象——Secret 》这篇博文。

2、利用Volume挂载ConfigMap与Secret

  Kubernetes允许你将ConfigMap和Secret作为Volume挂载到Pod中,这样容器就可以直接访问到这些配置信息或敏感数据了。这种方式的好处是,支持动态更新。ConfigMap和Secret更新后,容器中的数据也会更新。
  下面以nginx容器镜像为例演示,利用Volume挂载ConfigMap与Secret。

2.1 不挂载任何存储卷

(1)使用Nginx容器镜像的工作负载示例如下,没有挂载任何类型存储卷。
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test-configmap-volume
  labels:
    app: nginx-v1
  name: nginx-v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-v1
  template:
    metadata:
      labels:
        app: nginx-v1
    spec:
      containers:
        - name: container-jzx3ih
          imagePullPolicy: IfNotPresent
          image: 'nginx'
          ports:
            - name: tcp-80
              protocol: TCP
              containerPort: 80
      serviceAccount: default
      affinity: {}
      initContainers: []
      volumes: []
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%

(2)进入容器内部,可以看到使用nginx容器镜像启动nginx容器后,/etc/ssl目录下是存在数据文件的。

2.2 挂载ConfigMap

创建测试用的configmap。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: test-configmap-volume
  labels: {}
  name: test-configmap-volume1
spec:
  template:
    metadata:
      labels: {}
data:
  a: aa
  b: bb
  c: cc

2.2.1 将整个configmap资源对象挂载到容器内部

更新nginx-v1工作负载配置文件,将测试用的configmap资源对象挂载到nginx容器/etc/ssl目录下。

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-v1
  namespace: test-configmap-volume
  labels:
    app: nginx-v1
  annotations:
    deployment.kubernetes.io/revision: '2'
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-v1
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-v1
    spec:
      volumes:
        - name: volume-pikzy0
          configMap:
            name: test-configmap-volume1
            defaultMode: 420
      containers:
        - name: container-jzx3ih
          image: 'nginx'
          ports:
            - name: tcp-80
              containerPort: 80
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: volume-pikzy0
              readOnly: true
              mountPath: /etc/ssl
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: default
      serviceAccount: default
      securityContext: {}
      affinity: {}
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

 再次进入容器/etc/ssl目录下,结果如下。

当ConfigMap以volume的形式挂载到容器中的指定路径时,如果目标路径在容器中不存在,Kubernetes会在容器启动时自动创建这个路径。如果目标路径已经存在于容器中,ConfigMap默认会会覆盖原先目录下的内容(除非使用子路径),并且ConfigMap的每个key都会被创建为该目录下的一个新文件(文件名与key相同)。

2.2.2 将configmap资源对象指定key挂载到容器内部 

更新nginx-v1工作负载配置文件,将测试用的configmap资源对象指定key挂载到nginx容器/etc/ssl目录下。(将key a、b挂载到容器/etc/ssl路径下并且a的文件名改为haa,b的文件名改成hbb)

......
    spec:
      volumes:
        - name: volume-pikzy0
          configMap:
            name: test-configmap-volume1
            items:
              - key: a
                path: haa
              - key: b
                path: hbb
            defaultMode: 420
      containers:
        - name: container-jzx3ih
          image: 'nginx'
          ports:
            - name: tcp-80
              containerPort: 80
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: volume-pikzy0
              readOnly: true
              mountPath: /etc/ssl
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
    .......

结果如下:

当ConfigMap将指定key以volume的形式挂载到容器中的指定路径时,如果目标路径在容器中不存在,Kubernetes会在容器启动时自动创建这个路径。如果目标路径已经存在于容器中,ConfigMap默认会会覆盖原先目录下的内容(除非使用子路径),这些key都会被创建为该目录下的一个新文件(文件名与path相同)。

2.2.3 将configmap资源对象通过子路径挂载到容器内部

不管是将整个configmap资源对象挂载到容器内部,还是将configmap资源对象指定key挂载到容器内部,如果目标路径已经存在于容器中,ConfigMap默认会会覆盖原先目录下的内容。有时候我们就想覆盖原先目录下指定文件,这时候就需要使用子路径,使用subpath选定configMap的指定的key-value挂载在容器中,不会覆盖掉原目录下的其他文件。

更新nginx-v1工作负载配置文件,将测试用的configmap资源对象指定key a通过子路径覆盖容器/etc/ssl/openssl.cnf文件。

.......
    spec:
      volumes:
        - name: volume-pikzy0
          configMap:
            name: test-configmap-volume1
            defaultMode: 420
      containers:
        - name: container-jzx3ih
          image: 'nginx'
          ports:
            - name: tcp-80
              containerPort: 80
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: volume-pikzy0
              readOnly: true
              mountPath: /etc/ssl/openssl.cnf
              subPath: a
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      .......

结果如下:

通过使用subpath选定configMap的指定的key-value挂载在容器中,不会覆盖掉原目录下的其他文件。

2.3 挂载Secret

详细步骤参见《Kubernetes对象——Secret 》这篇博文,本文不再赘余,使用方式和挂载ConfigMap一致。

3、总结

  Kubernetes允许你将ConfigMap和Secret作为Volume挂载到Pod中,这样容器就可以直接访问到这些配置信息或敏感数据了。这种方式的好处是,支持动态更新。ConfigMap和Secret更新后,容器中的数据也会更新。

(1)将整个ConfigMap/Secret资源对象挂载到容器内部

  当ConfigMap/Secret以Volume的形式挂载到容器中的指定路径时,如果目标路径在容器中不存在,Kubernetes会在容器启动时自动创建这个路径。如果目标路径已经存在于容器中,ConfigMap默认会会覆盖原先目录下的内容,并且ConfigMap的每个key都会被创建为该目录下的一个新文件(文件名与key相同)。

(2)将ConfigMap/Secret资源对象指定key挂载到容器内部

  当ConfigMap/Secret将指定key以Volume的形式挂载到容器中的指定路径时,如果目标路径在容器中不存在,Kubernetes会在容器启动时自动创建这个路径。如果目标路径已经存在于容器中,ConfigMap默认会会覆盖原先目录下的内容,这些key都会被创建为该目录下的一个新文件(文件名与path相同)。

(3)将ConfigMap/Secret资源对象通过子路径挂载到容器内部

  如果挂载路径是一个已存在的目录,则目录下的内容不会被覆盖。直接将ConfigMap/Secret挂载在容器的路径,会覆盖掉容器路径下原有的文件,使用subpath选定ConfigMap/Secret的指定的key-value挂载在容器中,则不会覆盖掉原目录下的其他文件。

From:https://www.cnblogs.com/zhangmingcheng/p/18391460
本文地址: http://shuzixingkong.net/article/1635
0评论
提交 加载更多评论
其他文章 Gluon 编译 JavaFx -> android apk
Gluon 编译 JavaFx -> android apk 本文的内容属 在linux服务器上 搭建 Gluon 编译 android-apk 环境 这一篇文章直接跟着官网操作一次性成功 虚拟机版本 centos8 Architecture: x86-64 开始安装相关前置工具 gcc ve
Gluon 编译 JavaFx -> android apk
Go plan9 汇编:手写汇编
原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 在 Go plan9 汇编: 打通应用到底层的任督二脉 一文中介绍了从应用程序到汇编指令的转换。本文将结合汇编和 Go 程序实现手写基本的汇编指令,以加深对 Go plan9 汇编的了解。 1. 手写汇编 1.1 全局变量 首先写一个打印整型变
Go plan9 汇编:手写汇编 Go plan9 汇编:手写汇编 Go plan9 汇编:手写汇编
iptables 工作过程整理
转载注明出处: 1.概念和工作原理 iptables是Linux系统中用来配置防火墙的命令。iptables是工作在TCP/IP的二、三、四层,当主机收到一个数据包后,数据包先在内核空间处理,若发现目标地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目标不是自身,则会将包丢弃或进行转发。
iptables 工作过程整理 iptables 工作过程整理
Python自动复制Excel数据:将各行分别重复指定次数
本文介绍基于Python语言,读取Excel表格文件数据,并将其中符合我们特定要求的那一行加以复制指定的次数,而不符合要求的那一行则不复制;并将所得结果保存为新的Excel表格文件的方法~
Python自动复制Excel数据:将各行分别重复指定次数 Python自动复制Excel数据:将各行分别重复指定次数 Python自动复制Excel数据:将各行分别重复指定次数
大模型应用开发实战
在接触AI应用开发的这段时间,我以为会像以前学.net,学java,学vue一样。先整个hello world,再一步一步学搭功能,学搭框架直到搭一个系统出来。然而,理想总是很丰满,现实很骨感。在实践的过程中各种千奇百怪的问题:概念太多。huggingface、transformers、torch、
大模型应用开发实战 大模型应用开发实战 大模型应用开发实战
云存储抽象层-FluentStorage
FluentStorage 是一个.NET云存储抽象层,支持多种云服务提供商。它提供了一个统一的API来处理不同云服务提供商的Blob存储(如AWS S3, GCP, FTP, SFTP, Azure Blob/File/Event Hub/Data Lake)和消息传递(如AWS SQS, Azu
云存储抽象层-FluentStorage
Windows平台体验StableSwarmUI-0.6.4-Beta经验版
StableSwarmUI install 经验版,引导安装默认选择 comfyUI (local)立刻安装到本地 。 对于有经验的用户,此处可以选择跳过安装 ComfyUI 步骤,后期手动导入。
Windows平台体验StableSwarmUI-0.6.4-Beta经验版 Windows平台体验StableSwarmUI-0.6.4-Beta经验版 Windows平台体验StableSwarmUI-0.6.4-Beta经验版
【工具分享】红队重点资产指纹识别 -- P1finger -0.02(最新版本)
工具介绍: P1finger 红队行动下的重点资产指纹识别工具。P1finger 是一个重点资产指纹识别的工具,旨在通过HTTP请求特征来识别目标系统。其主要特点包括: 语言和实现: 语言:使用Go语言(Golang)实现。 目的:强调跨平台能力和易于集成。 指纹库和检测策略: 指纹库:通过人工过滤
【工具分享】红队重点资产指纹识别 -- P1finger -0.02(最新版本) 【工具分享】红队重点资产指纹识别 -- P1finger -0.02(最新版本) 【工具分享】红队重点资产指纹识别 -- P1finger -0.02(最新版本)