GitHub地址: https://github.com/QingyaFan/container-cloud/issues/2
Kubernetes中提供configmap,用来管理应用的配置,configmap具备热更新的能力,但只有通过目录挂载的configmap才具备热更新能力,其余通过环境变量,通过subPath挂载的文件都不能动态更新。这篇文章里我们来看看configmap热更新的原理,以及为什么只有目录形式挂载才具备热更新能力。
configmap热更新原理
我们首先创建一个configmap(configmap-test.yaml)用于说明,其内容如下。我们初始化好这个configmapkubectl apply -f configmap-test.yaml
。
apiVersion: v1
kind: ConfigMap
metadata:
name: marvel-configmap
data:
marvel: |
{
name: "iron man",
skill: [
"fight", "fly"
]
}
configmap资源对象会存储在etcd中,我们看下存储的是什么东东,哦,原来就是明文存储的。
[root@bogon ~]# ETCDCTL_API=3 etcdctl get /registry/configmaps/default/marvel-configmap
/registry/configmaps/default/marvel-configmap
k8s
v1 ConfigMap�
�
marvel-configmapdefault"*$02d3b66f-da26-11e9-a8c5-0800275f21132����b�
0kubectl.kubernetes.io/last-applied-configuration�{"apiVersion":"v1","data":{"marval":"{\n name: \"iron man\",\n skill: [\n \"fight\", \"fly\"\n ]\n}\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"marvel-configmap","namespace":"default"}}
zD
marval:{
name: "iron man",
skill: [
"fight", "fly"
]
}
"
接下来使用一个redis的pod来挂载这个configmap:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
name: redis
spec:
strat