
- 第一,比如说一些可变的配置。因为我们不可能把一些可变的配置写到镜像里面,当这个配置需要变化的时候,可能需要我们重新编译一次镜像,这个肯定是不能接受的;
- 第二就是一些敏感信息的存储和使用。比如说应用需要使用一些密码,或者用一些 token;
- 第三就是我们容器要访问集群自身。比如我要访问 kube-apiserver,那么本身就有一个身份认证的问题;
- 第四就是容器在节点上运行之后,它的资源需求;
- 第五个就是容器在节点上,它们是共享内核的,那么它的一个安全管控怎么办?
- 最后一点我们说一下容器启动之前的一个前置条件检验。比如说,一个容器启动之前,我可能要确认一下 DNS 服务是不是好用?又或者确认一下网络是不是联通的?那么这些其实就是一些前置的校验。

ConfigMap
ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制大对象
介绍

注意点

创建
使用目录创建
--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容。
1 | |
使用文件创建
只要指定为一个文件就可以从单个文件中创建 ConfigMap。--from-file 这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的。
1 | |
使用字面值创建
使用文字值创建,利用 --from-literal 参数传递配置信息,该参数可以使用多次,格式如下。
1 | |
使用
设置
1 | |
1 | |
- 使用 ConfigMap 来替代环境变量
1 | |
- 用 ConfigMap 设置命令行参数
1 | |
- 通过数据卷插件使用 ConfigMap
在数据卷里面使用这个 ConfigMap,有不同的选项。最基本的就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容。
1 | |
更新
正常情况下,我们可以通过如下配置,在启动的 Pod 容器里面获取到 ConfigMap 中配置的信息。
1 | |
1 | |
修改 ConfigMap 配置,修改 log_level 的值为 DEBUG 等待大概 10 秒钟时间,再次查看环境变量的值。
1 | |
ConfigMap 更新后滚动更新 Pod,更新 ConfigMap 目前并不会触发相关 Pod 的滚动更新,可以通过修改 pod annotations 的方式强制触发滚动更新。这个例子里我们在 .spec.template.metadata.annotations 中添加 version/config,每次通过修改 version/config 来触发滚动更新。
1 | |
更新 ConfigMap 后
- 使用该
ConfigMap挂载的Env不会同步更新 - 使用该
ConfigMap挂载的Volume中的数据需要一段时间(实测大概10秒)才能同步更新
Secret
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。Secret 有三种类型,分别是:
- Service Account - 用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的特点目录中。
- Opaque
- base64 编码格式的 Secret,用来存储密码、密钥等,相当来说不安全。普通的 Secret 文件
- kubernetes.io/dockerconfigjson
- 用来存储私有 docker registry 的认证信息。
- bootstrap.token,是用于节点接入集群校验用的 Secret。


Service Account
Service Account 是用来访问 Kubernetes API 接口的,由 Kubernetes 自动创建和管理的,并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。
1 | |

Opaque
- 创建说明
Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式。
1 | |
- 使用方式 —— 将 Secret 挂载到 Volume 中
1 | |
- 使用方式 —— 将 Secret 导出到环境变量中
1 | |
dockerconfigjson
使用 Kuberctl 创建 docker registry 认证的 secret。
1 | |
在创建 Pod 的时候,通过 imagePullSecrets 来引用刚创建的 myregistrykey。
1 | |