- 第一,比如说一些可变的配置。因为我们不可能把一些可变的配置写到镜像里面,当这个配置需要变化的时候,可能需要我们重新编译一次镜像,这个肯定是不能接受的;
- 第二就是一些敏感信息的存储和使用。比如说应用需要使用一些密码,或者用一些 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 |
|