如何在Kubernetes中更新ConfigMap?当前操作是否最优?
问题解答
当前操作是否正确?
你的操作是可行的,但并非最优方案。删除重建ConfigMap会产生短暂的“ConfigMap不存在”窗口,如果此时有Pod重启或新Pod创建,可能会出现挂载失败的情况(实际场景中影响通常有限),且操作不够优雅。
能否不删除直接更新ConfigMap?
完全可以,推荐用kubectl apply结合--dry-run的方式直接更新,无需删除重建:
kubectl create configmap k6-scripts-configmap -n k6 --from-file /test/scripts/k6/ --dry-run=client -o yaml | kubectl apply -f -
这个命令会先生成ConfigMap的YAML配置(不会实际创建),再通过kubectl apply更新现有资源——如果ConfigMap不存在则创建,存在则更新,全程不会出现资源缺失的情况。
也可以用kubectl replace实现更新,但需确保ConfigMap已存在:
kubectl create configmap k6-scripts-configmap -n k6 --from-file /test/scripts/k6/ --dry-run=client -o yaml | kubectl replace -f -
更新ConfigMap后是否需要重启Deployment?
需要,原因如下:
- Kubernetes对ConfigMap卷的同步存在延迟(默认约1分钟),无法保证实时更新到Pod内;
- 多数应用程序是在启动时加载配置文件的,即使Pod内的配置文件更新了,程序也不会自动读取新内容,必须重启Pod才能生效。
使用kubectl rollout restart deployment k6 -n k6是最优的重启方式,它会优雅地滚动重启Deployment下的所有Pod:先启动加载新ConfigMap的新Pod,待新Pod就绪后再终止旧Pod,确保服务不中断。
内容的提问来源于stack exchange,提问作者Starbucks Admin
相关产品推荐
相关产品推荐

