副本数为1的Deployment是否可能出现两个Running状态的Pod?
关于Deployment副本数=1时是否会出现两个Running Pod的问题
首先明确:默认配置下,是存在两个Running状态Pod共存的场景的,核心原因在于Deployment的滚动更新策略参数设置。
默认滚动更新策略中,
maxSurge(更新过程中允许超出期望副本数的最大数量)默认值为25%,对于副本数=1的情况,会向上取整为1;maxUnavailable(更新过程中允许不可用的Pod最大数量)默认值为25%,向下取整为0。
这种配置下,更新Deployment(比如更换镜像、修改Pod规格)时,Kubernetes会先启动1个新Pod,等新Pod进入Running状态且就绪(Ready)后,才会终止旧Pod。这期间就会出现两个处于Running状态的Pod同时存在的情况——虽然持续时间通常很短,但确实会出现你担心的“违反副本数=1配置”的场景。如果要避免这种情况,可以修改Deployment的滚动更新策略,将
maxSurge设为0:strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate这样配置后,更新时会先终止旧Pod,再启动新Pod,全程最多只有1个Running状态的Pod。
至于你测试的Pod驱逐场景:当Pod被驱逐时,旧Pod会进入Terminating状态,同时Deployment启动新Pod,此时旧Pod已不再处于Running状态,所以不会出现两个Running Pod共存的情况,符合你的预期。
内容的提问来源于stack exchange,提问作者user2819943
相关产品推荐
相关产品推荐

