You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes StatefulSet滚动更新:如何先启新Pod再终止旧Pod?

StatefulSet 实现先启新Pod再停旧Pod的滚动更新
  • 先澄清一个关键点:StatefulSet 默认的 RollingUpdate 更新策略,本身就是先启动新Pod并等它就绪后,再终止对应旧Pod的逻辑,但这个逻辑只在通过更新StatefulSet模板(比如镜像、配置)触发滚动更新时生效——手动删除单个Pod的场景不算,手动删Pod时StatefulSet会直接重建(先删旧再启新),这是它对Pod的故障自愈机制,和滚动更新不是一回事。

  • 要实现你要的“旧Pod保持运行,新Pod就绪后再终止”,必须通过更新StatefulSet的方式触发滚动更新,而非手动删Pod,具体配置和操作如下:

    1. 确保StatefulSet的updateStrategy配置为RollingUpdate(这是默认值,也可以显式声明):
      spec:
        updateStrategy:
          type: RollingUpdate
          rollingUpdate:
            partition: 0 # 默认值为0,代表所有Pod都会参与滚动更新;若设为N,则序号≥N的Pod会先被更新
      
    2. 触发更新时,直接修改StatefulSet的Pod模板内容,比如更新镜像:
      kubectl set image statefulset/<你的STS名称> <容器名>=<新镜像>:<新版本>
      
      这时StatefulSet会默认按照Pod序号从高到低的顺序,逐个创建新Pod,等新Pod进入Ready状态后,才会删除对应的旧Pod,完全符合你的需求。
  • 关于和Deployment的对比:StatefulSet的RollingUpdate和Deployment的滚动更新逻辑核心一致,都是先启新再停旧,但因为StatefulSet的Pod有固定的网络标识和存储卷绑定,更新时会严格按序号串行处理(默认);而Deployment可以通过maxSurge和maxUnavailable控制并行更新的Pod数量。如果你想让StatefulSet并行更新,可将podManagementPolicy设为Parallel,这样会同时启动多个新Pod,等它们全部就绪后再批量终止旧Pod,适合支持并行更新的应用。

内容的提问来源于stack exchange,提问作者Mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 03:42:09