StatefulSet 滚动发布:按顺序升级有状态服务

解释 OrderedReady、partition 与健康检查的配合方式,让数据库和队列升级可观察、可暂停、可回退。

文章目录 · 4 节

StatefulSet 保留稳定身份和存储,但这不等于应用天然支持滚动升级。版本兼容、主从顺序、数据迁移和探针设计共同决定发布是否安全。

发布前确认

kubectl get sts app -n production -o yaml
kubectl get pod -n production -l app=app -o wide
kubectl get pvc -n production

确认镜像支持新旧版本共存,数据库格式可向后兼容,并核对 PDB、反亲和性和可用节点。OrderedReady 会在前一个 Pod Ready 后继续,但错误的 readiness probe 可能过早放行。

用 partition 分批

updateStrategy:
  type: RollingUpdate
  rollingUpdate:
    partition: 2

三副本时先只更新序号 2,观察复制延迟、错误率和数据一致性,再逐步将 partition 降为 1、0。每一步都应有明确观察窗口。

回退注意事项

  • 仅回退镜像不能撤销不可逆 schema 迁移
  • Pod 卡住时先读事件和日志,不连续强删
  • 主节点切换应遵循应用自身的选主规则
  • OnDelete 策略需由发布流程显式控制删除顺序

收尾清单

发布后验证每个成员的角色、复制状态、PVC 挂载和重启次数。保留旧版本兼容窗口,并把 partition 操作和业务验证纳入标准变更单。