典型的使用场景:
填充环境变量的值设置容器内的命令行参数填充卷的配置文件
创建方式:
使用字面值创建使用文件创建使用目录创建编写configmap的yaml文件创建字面值创建:
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
使用文件创建:
kubectl create configmap my-config-2 --from-file=/etc/resolv.conf
使用目录创建:
kubectl create configmap my-config-3 --from-file=test
编写configmap的yaml文件
kubectl create -f cm-test.yaml
使用configmap设置环境变量
vim pod1.yaml kubectl create -f pod1.yaml vim pod2.yaml kubectl create -f pod2.yaml
使用conigmap设置命令行参数
vim pod2.yaml
通过数据卷(volume)使用configmap
vim pod3.yaml
查看
修改
kubectl edit cm cm-test-config等待几秒查看
数据已经修改成功并更新
configmap热更新后,并不会触发相关Pod的滚动更新,需要手动触发:
kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20200625"}}}}}'每次通过修改“version/config”来触发Pod滚动更新。 使用configmap挂载的env环境变量是不会更新的。
实验:
vim nginx.confkubectl create configmap nginxconf --from-file=nginx.conf
vim nginx.yaml
kubectl apply -f nginx.yaml
访问8000端口
修改端口(热更新)
kubectl edit cm nginxconf访问修改后的端口
访问不成功
kubectl exec my-nginx-5f6dc9664-cmlz8 -- cat /etc/nginx/conf.d/nginx.conf | grep listen
查看发现数据热更新已经生效
这时候访问8080不成功,手动触发Pod滚动更新, 这样才能再次加载nginx.conf配置文件
重新访问(注意,这里的ip需要重新查看,pod滚动更新后会重新分配)