生产环境必看:Kubernetes ConfigMap 不可变配置(immutable)最佳实践
在 K8s 中,ConfigMap 是存储非敏感配置的资源(比如服务端口、日志级别),而 immutable 是它的一个核心字段,用来控制 ConfigMap 是否能修改:
immutable: true:ConfigMap 变成「只读」,数据不可变,只能删了重建;
immutable: false(默认):ConfigMap 可以随时修改,比如用 kubectl edit 改内容。
(1)如果需要修改不可变的 ConfigMap,必须先删除旧的 ConfigMap,再创建新的(名称可以相同)。
eg:
kubectl get configmap myconfigmap -o yaml > cm.yaml(如何没有yaml文件,先导出yaml文件)
kubectl delete configmap myconfigmap
vim cm.yaml
kubectl apply/create -f cm.yaml
(2)如果需要修改可变的ConfigMap,使用kubectl edit configmap myconfigmap或kubectl apply -f configmap.yaml就可以更新已有的configmap资源。
(3)因为 K8s 挂载 ConfigMap 时,默认是「一次性挂载」——Pod 启动时把配置读进内存,之后 ConfigMap 变化,Pod 不会主动重新读取。configMap变化后,需要重启 Pod 或通过滚动更新让 Pod 重新挂载。
(4)建议对生产环境中稳定的配置使用 immutable: true,对频繁变更的配置保持默认的 immutable: false。
总结:
1.immutable: true 是 ConfigMap 的「安全锁」,防止误改,适合稳定配置;
2.修改不可变 ConfigMap 要「删旧建新」,修改可变的直接编辑就行;
3.配置更新后,必须重启 Pod 或滚动更新,否则不生效。”
更多推荐



所有评论(0)