configmap简介
在生产环境中经常会遇到需要修改配置文件的情况,传统的修改方式不仅会影响到服务的正常运行,而且操作步骤也很繁琐。
为了解决这个问题,kubernetes项目从1.2版本引入了ConfigMap功能,用于将应用的配置信息与程序的分离。
ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap不可以跨命名空间使用
ConfigMap必须要在pod/deployment创建之前就得存在
ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1 MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷 或者使用独立的数据库或者文件服务。
ConfigMap创建
通过文件创建configmap
shell
1 | kubectl create configmap my-config --from-file=key1=test1.txt --from-file=key2=test2.txt |
通过文件夹创建configmap
shell
1 | kubectl create configmap dir-config --from-file=config/ |
通过键值对创建configmap
shell
1 | kubectl create configmap literal-config --from-literal=key1=hello --from-literal=key2=world |
通过yaml文件创建
- config.yaml
yaml
1 | #config.yaml |
ConfigMap使用
环境变量
yaml
1 | apiVersion: v1 |
命令行参数
yaml
1 | apiVersion: v1 |
挂载卷
yaml
1 | apiVersion: v1 |
关于环境变量生效顺序
假如一资源对象有env
, envFrom
其实现逻辑是会初始化一个 Map 存放环境变量,然后按照如下步骤进行处理:
- 按顺序遍历 envFrom 引用的 ConfigMap 和 Secret 的 Key/Value
- 按顺序遍历 env 中的设置的 Key/Value
- 由于 Pod 默认开启了 EnableServiceLinks,最后还需要将 Service 相关变量注入
优先级是,Service 变量 > Env > EnvFrom,后者操作的内容会覆盖前者, 其中 EnvFrom 的优先级是后面覆盖前面。
这里单独说下,注入到环境变量中的 Service 相关变量:
- 注入的范围。所在命名空间的所有 Service
- 注入的内容。同一命名空间下,所有的服务地址、端口、协议。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!