当前位置: 首页 > news >正文

k8s statefulset pod重启顺序

在 Kubernetes 中,StatefulSet 的 Pod 重启顺序由以下规则和机制决定:

1. StatefulSet 的核心设计原则

StatefulSet 旨在管理有状态应用,其核心特性包括:

  • 稳定的唯一标识:Pod 名称格式为 <statefulset-name>-<ordinal-index>(如 web-0web-1)。

  • 有序部署和扩展:默认按索引顺序创建/删除 Pod(web-0 → web-1 → web-2)。

  • 持久化存储:每个 Pod 绑定独立的 PersistentVolume(PV)。

2. Pod 重启场景与顺序规则

(1) 容器崩溃重启(原地重启)

  • 场景:Pod 内的容器因异常退出触发 restartPolicy(如 Always)。

  • 行为

    • 原地重启:Pod 名称和网络标识不变。

    • 无顺序控制:Kubernetes 会立即尝试重启该 Pod,不依赖其他 Pod 的状态。

    • 与 StatefulSet 控制器无关:由 kubelet 直接管理,不涉及 StatefulSet 的协调逻辑。

(2) Pod 被驱逐或节点故障(重新调度)

  • 场景:节点宕机或手动驱逐 Pod(kubectl drain)。

  • 行为

    • 按索引顺序重建:StatefulSet 控制器会按索引顺序重新调度 Pod。

    • 示例:若 web-1 和 web-2 同时被驱逐,优先重建 web-0,然后是 web-1,最后 web-2

    • 依赖健康状态:前一个 Pod 进入 Running 状态后,才会处理下一个。

(3) 滚动更新触发的重启

  • 场景:更新 StatefulSet 的镜像或配置(kubectl rollout restart)。

  • 行为

    • 逆序终止:从最高索引 Pod 开始终止(如 web-2 → web-1 → web-0)。

    • 顺序创建:新 Pod 仍按索引顺序启动(web-0 → web-1 → web-2)。

    • 配置控制:可通过 spec.updateStrategy.rollingUpdate.partition 分阶段更新。

3. 影响重启顺序的关键配置

(1) podManagementPolicy

  • OrderedReady(默认)

    • 严格按索引顺序操作 Pod。

    • 适用于需要强顺序保证的场景(如主从架构)。

  • Parallel

    • 并行创建/删除 Pod,无顺序约束。

    • 适用于无状态或可并行初始化的应用。

(2) spec.updateStrategy

  • RollingUpdate

    • 逆序更新 Pod(从高索引到低索引)。

    • 控制滚动更新的节奏。

  • OnDelete

    • 需手动删除 Pod 以触发更新,顺序由删除操作决定。

4. 示例验证

场景:StatefulSet web 有 3 个副本(web-0web-1web-2),配置为默认的 OrderedReady

1)同时删除所有 Pod

kubectl delete pods web-0 web-1 web-2
  • 重建顺序web-0 → web-1 → web-2

  • 日志观察

    kubectl get pods -w -l app=web
    # 输出示例:
    # web-0  0/1  Pending
    # web-0  0/1  ContainerCreating
    # web-0  1/1  Running
    # web-1  0/1  Pending
    # ...

2)滚动更新

kubectl rollout restart statefulset/web
  • 终止顺序web-2 → web-1 → web-0

  • 创建顺序web-0 → web-1 → web-2

5. 最佳实践

  • 关键服务依赖:若应用强依赖启动顺序(如数据库主从同步),使用 OrderedReady 并配置 ReadinessProbe

  • 加速恢复:在允许并行操作的场景,使用 podManagementPolicy: Parallel 加快故障恢复。

  • 监控与告警:结合 Prometheus 监控 Pod 重启次数,避免频繁异常重启。

总结

StatefulSet 的 Pod 重启顺序由 podManagementPolicy 和操作类型共同决定:

  • 默认策略(OrderedReady:按索引顺序重建 Pod,适合有状态服务。

  • 主动删除或滚动更新:可能涉及逆序操作,需结合业务逻辑验证兼容性。

http://www.dtcms.com/a/108103.html

相关文章:

  • Qt 读写锁QReadWriteLock
  • 前端计算机网络常问问题大全
  • 如何在服务器端配置SSH以允许密码认证
  • html5炫酷图片悬停效果实现详解
  • 【零基础入门unity游戏开发——2D篇】使用SpriteAtlas(精灵图集)打包图集,减少DrawCall提高性能
  • 第四章、Isaacsim在GUI中构建机器人(1): 添加简单对象
  • SQL复杂查询与性能优化:医药行业ERP系统实战指南
  • Linux 基础入门操作 第九章 进程间通信之有名管道
  • el-select+el-tree、el-select+vl-tree实现下拉树形选择
  • Linux中进程与计划任务
  • SpringMvc获取请求数据
  • HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板
  • 配置 UOS/deepin 系统远程桌面,实现多台电脑协同办公
  • PHP 8.x:现代Web开发的性能与效率革命
  • 解码 __getitem__ 和 __len__ - 自定义序列的钥匙
  • Prompt攻击是什么
  • Go和Golang语言简介
  • 快速排序与归并排序
  • 【硬件视界10】网络硬件入门:音频设备详解:声卡与音响系统
  • 【区块链 + 可信存证】国链区块链可信存证系统| FISCO BCOS 应用案例
  • 使用Qemu模拟32位ARM系统
  • OpenCV图像形态学:原理、操作与应用详解
  • 前端实现单点登录(SSO)的方案
  • Pycharm(十二)列表练习题
  • mac环境中Nginx安装使用 反向代理
  • 通俗解释 TCP 的三次握手、四次挥手
  • 《深度探索:数据库树形数据遍历与节点更新的游标之道》
  • 在PyTorch中使用GPU加速:从基础操作到模型部署
  • React-01React创建第一个项目(npm install -g create-react-app)
  • 【扣子agent入门】搭建计算热量工作流