使用kubectl patch修改Deployment滚动更新策略为何不触发Pod重启
现象说明
执行如下patch命令修改nginx1 Deployment配置后,Deployment对应的滚动更新策略已成功更新,但其管理的所有Pod均未发生重启:
kk patch deployments.apps nginx1 --type json -p '[{"op": "replace", "path": "/spec/strategy/rollingUpdate/maxUnavailable","value":100%}]'
核心结论
你的推测完全正确。
- Deployment控制器判断是否需要触发存量Pod滚动重建的唯一判定依据是
.spec.template(Pod模板)字段的内容变化:只有修改Pod模板范畴内的属性(比如容器镜像、启动参数、环境变量、资源限制、卷挂载、端口配置等)时,控制器才会计算新的模板哈希值,按照配置的更新策略逐步替换存量旧Pod。 - 你本次修改的
.spec.strategy.rollingUpdate.maxUnavailable属于Deployment全局层面的更新策略配置,不属于Pod模板的组成部分。这类非模板字段的修改只会在后续触发Pod滚动更新时生效,不会对当前正在运行的存量Pod产生任何影响,自然不会触发Pod重启。
常见不会触发Pod重启的Deployment配置变更
修改以下字段时都只会即时更新Deployment配置,不会主动触发Pod重建:
- 副本数
.spec.replicas - 历史版本保留数
.spec.revisionHistoryLimit - 更新进度超时时长
.spec.progressDeadlineSeconds - 最小就绪等待时间
.spec.minReadySeconds - 暂停/恢复更新标识
.spec.paused
内容的提问来源于stack exchange,提问作者jackdlov
相关产品推荐
相关产品推荐

