ConfigMap概述
ConfigMap API资源提供了将配置注入容器的机制,ConfigMap可用于存储细粒度信息如单个属性,或粗粒度信息如整个配置文件或JSON对象。
ConfigMap API资源存储键/值对配置数据,这些数据可以在pods里使用。ConfigMap跟Secrets类似,但是ConfigMap可以更方便的处理不包含敏感信息的字符串。
ConfigMap有以下几种使用方式:
- 填充环境变量的值
- 设置容器内的命令行参数
- 填充卷的配置文件
命令行
$ configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]
1. 创建configmap
创建ConfigMap的方式有4种:
- 直接在命令行中指定configmap参数创建,即
--from-literal
- 指定文件创建,即将一个配置文件创建为一个ConfigMap
--from-file=<文件>
- 指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,
--from-file=<目录>
- 先写好标准的configmap的yaml文件,然后kubectl create -f 创建
1.1 从文件创建
$ kubectl create configmap cumulx-test --from-file=xxxx
当 --from-file指向一文件,key的名称是文件名称,value的值是这个文件的内容
1.2 从目录创建
$ kubectl create configmap cumulx-test --from-file=xxxx
当 --from-file指向一个目录,每个目录中的文件直接用于填充ConfigMap中的key,key的名称是文件名称,value的值是这个文件的内容
指定data中的key
$ kubectl create configmap test-data-key --from-file=test-aaa=aaa.txt
1.3 通过字面值创建
通过kubectl create configmap
创建ConfigMap使用字面值。--from-literal选项使用一个key=value语法
$ kubectl create configmap test-literal --from-literal=key1=value1
1.4 编写yaml文件
2. 使用ConfigMap
使用ConfigMap有三种方式:
- 第一种是通过环境变量的方式,直接传递给pod
- 使用configmap中指定的key
- 使用configmap中所有的key
- 第二种是通过在pod的命令行下运行的方式(启动命令中)
- 第三种是作为volume的方式挂载到pod内
2.1 ConfigMap在环境变量中
创建一个Pod,并将一个已经创建好的ConfigMap作为环境变量,注入到Pod中
使用valueFrom
、configMapKeyRef
、name
、key
指定要用的key:
登陆容器查看:
通过envFrom
、configMapRef
、name
使得configmap中的所有key/value对都自动变成环境变量:
2.2 设置命令行参数用ConfigMap
configmap的热更新
更新 ConfigMap 后:
- 使用该 ConfigMap 挂载的 Env 不会同步更新
- 使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新
当ConfigMap以数据卷的形式挂载进Pod时,更新ConfigMap(或删掉重建ConfigMap),Pod内挂载的配置信息会热更新,但使用环境变量方式加载到pod,则不会自动更新(ENV 是在容器启动的时候注入的,启动之后 kubernetes 就不会再改变环境变量的值)。且同一个 namespace 中的 pod 的环境变量是不断累加的