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

Kubernetes StatefulSet从零部署时如何同时启动全部副本?升级保留RollingUpdate

解决方案:分阶段调整StatefulSet更新策略

针对你的需求——初始部署时快速启动所有11个副本,后续升级保持滚动更新的安全性——有两种可行的方案,取决于你的Kubernetes集群版本:

方案1:临时切换至OnDelete策略完成初始部署(兼容所有支持StatefulSet的K8s版本)

这是最通用的方法,不需要依赖新特性:

  • 第一步:在初始创建StatefulSet时,将更新策略设置为OnDelete:
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: your-statefulset
    spec:
      replicas: 11
      updateStrategy:
        type: OnDelete  # 关键:临时使用该策略
      # 其他模板字段(容器、存储等)...
    
    当你应用这个配置时,Kubernetes会一次性创建所有11个Pod,不会等待单个Pod就绪后再创建下一个,总耗时会直接缩短到单个Pod的启动时间(约5分钟)。
  • 第二步:等所有Pod都成功进入Running状态后,将更新策略改回RollingUpdate:
    updateStrategy:
      type: RollingUpdate
      rollingUpdate:
        partition: 0  # 保持默认即可,或根据需求调整
    
    应用这个修改后,后续的镜像升级、配置变更都会按照滚动更新逻辑执行,每次只更新一个Pod,确保故障发生时不会影响整个集群的可用性。

方案2:利用K8s 1.25+的maxUnavailable特性(更简洁)

如果你的集群版本在1.25及以上(该特性为beta版,默认启用),可以直接通过配置滚动更新参数实现:

  • 在StatefulSet的滚动更新策略中设置maxUnavailable: 100%(或直接设为11,等于副本数):
    updateStrategy:
      type: RollingUpdate
      rollingUpdate:
        maxUnavailable: 100%
    
    初始部署时,这个配置会让控制器一次性创建所有11个Pod。
  • 当需要进行后续升级时,将maxUnavailable改回保守值(比如默认的1):
    rollingUpdate:
      maxUnavailable: 1
    
    这样升级时就会回到逐个更新的滚动策略,保证应用的高可用。

重要注意事项

  • 请确认你的有状态应用不依赖严格的启动顺序:StatefulSet默认的有序创建是为了满足数据库主从、分布式缓存这类需要按顺序初始化的应用。如果你的应用不需要这种顺序,上述方案才适用。
  • 方案1中,切换回RollingUpdate前一定要确保所有Pod都处于健康状态,避免后续更新出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:38:12