为何OpenShift中同配置Deployment Config的两个Pod创建时间不同?
OpenShift DeploymentConfig Rolling更新后Pod创建时间不一致的解决方案
问题场景
我在OpenShift中使用Deployment Configs运行Pod,副本数设为2,滚动策略配置如下:
strategy: type: Rolling
更新完成后,事件日志显示:
Generated from deploymentconfig-controller
Scaled replication controller "deployment-12" from 2 to 1
Generated from deploymentconfig-controller
Scaled replication controller "deployment-12" from 1 to 2
预期两个包含更新内容的新Pod创建时间一致,但实际二者创建时间存在差异。
解决方案
调整Rolling策略参数
默认Rolling策略会逐步替换Pod(先缩容旧RC,再扩容新RC),导致新Pod创建有先后。通过配置rollingParams里的maxSurge和maxUnavailable,可以实现一次性创建所有新Pod:
strategy: type: Rolling rollingParams: maxSurge: 100% maxUnavailable: 0%
maxSurge: 100%:允许更新时额外创建最多等同于当前副本数的新Pod,即直接创建2个新PodmaxUnavailable: 0%:更新期间保证原有Pod全部可用,直到新Pod就绪后再销毁旧Pod
验证效果
应用配置后,更新DeploymentConfig时,事件日志会先出现新RC被扩容到2的记录,之后旧RC被缩容到0,两个新Pod的创建时间会基本一致。
注意事项
- 确保集群有足够资源(CPU、内存、存储)临时支撑双倍Pod数量(原2个+新2个),直到更新完成
- 如果应用不允许新旧版本同时运行,可调整参数组合,但这类组合无法避免Pod创建时间差,因此若必须要求创建时间一致,优先采用
maxSurge:100% + maxUnavailable:0%的配置
内容的提问来源于stack exchange,提问作者Priyanka Sharma
相关产品推荐
相关产品推荐

