Kubernetes利用Volume挂载ConfigMap与Secret

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-volumelabels:app: nginx-v1name: nginx-v1
spec:replicas: 1selector:matchLabels:app: nginx-v1template:metadata:labels:app: nginx-v1spec:containers:- name: container-jzx3ihimagePullPolicy: IfNotPresentimage: 'nginx'ports:- name: tcp-80protocol: TCPcontainerPort: 80serviceAccount: defaultaffinity: {}initContainers: []volumes: []strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%

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

2.2 挂载ConfigMap

创建测试用的configmap。

apiVersion: v1
kind: ConfigMap
metadata:namespace: test-configmap-volumelabels: {}name: test-configmap-volume1
spec:template:metadata:labels: {}
data:a: aab: bbc: cc

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

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

kind: Deployment
apiVersion: apps/v1
metadata:name: nginx-v1namespace: test-configmap-volumelabels:app: nginx-v1annotations:deployment.kubernetes.io/revision: '2'
spec:replicas: 1selector:matchLabels:app: nginx-v1template:metadata:creationTimestamp: nulllabels:app: nginx-v1spec:volumes:- name: volume-pikzy0configMap:name: test-configmap-volume1defaultMode: 420containers:- name: container-jzx3ihimage: 'nginx'ports:- name: tcp-80containerPort: 80protocol: TCPresources: {}volumeMounts:- name: volume-pikzy0readOnly: truemountPath: /etc/sslterminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: AlwaysterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstserviceAccountName: defaultserviceAccount: defaultsecurityContext: {}affinity: {}schedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%revisionHistoryLimit: 10progressDeadlineSeconds: 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-pikzy0configMap:name: test-configmap-volume1items:- key: apath: haa- key: bpath: hbbdefaultMode: 420containers:- name: container-jzx3ihimage: 'nginx'ports:- name: tcp-80containerPort: 80protocol: TCPresources: {}volumeMounts:- name: volume-pikzy0readOnly: truemountPath: /etc/sslterminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: 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-pikzy0configMap:name: test-configmap-volume1defaultMode: 420containers:- name: container-jzx3ihimage: 'nginx'ports:- name: tcp-80containerPort: 80protocol: TCPresources: {}volumeMounts:- name: volume-pikzy0readOnly: truemountPath: /etc/ssl/openssl.cnfsubPath: aterminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: 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挂载在容器中,则不会覆盖掉原目录下的其他文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/790645.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

章10——面向对象编程(高级部分)——类名类方法

类变量/静态(static)变量/静态属性 特点: 由该类的全体对象实例共享,该变量只占同一块内存空间。 其标志是关键字static修饰。 在类加载的时候便生成了。类加载的时机如下图:public static int count = 0; 类变量可以由类名来访问。 System.out.println("共有" + …

Redis组件介绍(四)

今天继续学习后面的知识写在前面 今天继续学习后面的知识。 Redis 操作命令 操作 List 相关 APILPUSH说明: 将某个值加入到一个 key 列表的头部。当列表不存在时会创建。 语法: LPUSH key value [value ...] 返回值: 成功返回列表的元素个数,失败返回 0。LPUSHX说明: 与 LPUSH…

随笔9/1(一)

软件工程 计科22级12班作业要求 第一次作业要求作业目标 对学习课程进行了解并探索相应内容介绍自己 --> 我叫肖商,第一次与电脑结缘是20年疫情期间,学校教学转为网络教学时,第一次接触编程,虽然什么都不懂,但当时感觉编程很奇妙。 后来有了学习计算机的想法,大学志愿…

UNIAPP拨打电话

权限 <uses-permission android:name="android.permission.CALL_PHONE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/> 然后重新打基座包 代码uni.makePhoneCall({ phoneNumber: that.mobile });

7 个热门的 AI 视频生成工具介绍

AI 视频生成领域最近的发展简直是突飞猛进,让人目不暇接啊!就在前不久,OpenAI 推出的 Sora 震惊了整个科技圈。但是,惊喜不止于此,国产的 AI 视频工具“可灵”据说已经在某些方面超越了 Sora,这真是让人兴奋不已! AI 视频生成技术的发展速度之快,应用范围之广,真的让…

MVCC详解,深入浅出简单易懂

转载自 https://blog.csdn.net/lans_g/article/details/124232192一、什么是MVCC? mvcc,也就是多版本并发控制,是为了在读取数据时不加锁来提高读取效率和并发性的一种手段。 数据库并发有以下几种场景: 读-读:不存在任何问题。读-写:有线程安全问题,可能出现脏读、幻…

Mesh-gpt(点处理、保存脚本,Transformer)

小结: 1、配置了学长的环境,并编写点处理(旋转、镜像)和保存(由内存numpy数组到shp文件)脚本。 2、初步阅读mesh-gpt论文,思考Transformer网络架构(翻译模型和补全模型的训练区别)环境配置 pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-u…

Magnet Acquire 2.71 Windows - 适用于智能手机和计算机的数字取证采集工具

Magnet Acquire 2.71 Windows - 适用于智能手机和计算机的数字取证采集工具Magnet Acquire 2.71 Windows - 适用于智能手机和计算机的数字取证采集工具 Digital Forensic Software 请访问原文链接:https://sysin.org/blog/magnet-acquire/,查看最新版。原创作品,转载请保留出…

Transformer网络架构

只有理解了,才能在超越经验的情况下,生成出合理的内容编解码encoder-decoder结构什么是“码”?剥离形式的表示(各种语言的不同),剩下的语义关系(上下文语义)“码”的要求:1、数字化 2、语义关系的距离分词器和one-hot编码在2不足需要找到一个纬度高,但是又没那么高的…

Gluon 编译 JavaFx - android apk

Gluon 编译 JavaFx -> android apk 本文的内容属 在linux服务器上 搭建 Gluon 编译 android-apk 环境 这一篇文章直接跟着官网操作一次性成功 虚拟机版本centos8 Architecture: x86-64开始安装相关前置工具gcc version 6 or higher ld version 2.26 or highersudo yum updat…

vue axios

axios是基于promise的http库,可以用在浏览器和node.js中 特性:从浏览器中创建XMLHttpRequests、从node.js创建http请求、支持promiseApi、拦截请求和响应、取消请求、自动转换JSON数据、客户端支持防御xsrf axios就是一个库,也可以单独独立出来发送ajax。 安装: npm install…

正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动

正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动 作者在学习【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4时,发现移植tslib后,触摸事件触发不正常。 使用的硬件版本:正点原子 I.MX6U ALPHA V2.4版本底板,LCD:正点原子7寸1024*600,型号A…