最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Kubernetes 集群中 Pod 如何实现平滑重启
时间:2026-07-16 07:49:06 编辑:袖梨 来源:一聚教程网
平滑重启本质是旧Pod安全退出、新Pod接管流量的过程,需通过控制器滚动更新、配置preStop钩子与优雅终止窗口、合理设置就绪探针,并验证业务层面无异常。
Pod 本身没有“重启”操作,所谓平滑重启,本质是让旧 Pod 安全退出、新 Pod 顺利接管流量的过程。关键不在删或启,而在控制生命周期、信号传递和流量切换节奏。
依赖控制器滚动更新
直接删除 Pod 或用 kubectl delete pod 会中断服务,不推荐。正确做法是操作上层控制器:
- 对 Deployment:运行
kubectl rollout restart deployment/<name> -n <namespace></namespace></name>,Kubernetes 会按maxSurge和maxUnavailable策略逐个替换 Pod - 对 StatefulSet:使用
kubectl rollout restart statefulset/<name></name>,它按序号从高到低滚动重建(支持RollingUpdate策略) - 避免批量删除所有 Pod,否则调度压力大、可能触发节点资源争抢甚至雪崩
配置 preStop 钩子与优雅终止窗口
让应用有时间处理完存量请求,而不是被 SIGKILL 强杀:
- 在容器 spec 中定义
lifecycle.preStop,例如执行curl -X POST http://localhost/shutdown或调用应用关闭接口 - 设置
terminationGracePeriodSeconds(默认 30 秒),确保 preStop 有足够时间执行;若应用关闭慢,可设为 60–120 秒 - preStop 是同步阻塞的,Kubernetes 会等它完成才继续下一步
配合就绪探针控制流量切换
防止新请求打到尚未就绪或正在退出的 Pod:
-
readinessProbe必须配置,且failureThreshold和periodSeconds要合理(如 3×5s) - 滚动更新时,新 Pod 就绪探针通过后,Service 才将流量导入;旧 Pod 在 preStop 开始前,就绪探针已失败,流量自动摘除
- 避免就绪探针路径返回过快(如只检查进程存在),应验证实际业务能力(如 DB 连通、缓存加载完成)
验证重启是否真正平滑
不能只看 Pod 状态,要观察业务层面表现:
- 查日志:确认旧 Pod 是否打印了“shutdown started”“graceful exit”类信息,新 Pod 是否完成初始化才上报就绪
- 看指标:监控 5xx 错误率、请求延迟突增、连接拒绝数,异常升高说明流量切换有问题
- 用
kubectl rollout status deployment/<name></name>确认更新完成,再结合kubectl get events -w查看是否有 FailedCreate、FailedKillPod 等事件
相关文章
- black souls2大胃袋成就解锁攻略 07-22
- 考试酷网页版登陆入口-考试酷网页版学生登陆 07-22
- 豆包网页版官网入口-豆包网页版怎么删除记录 07-22
- 漫漫漫画免费版在线阅读下载安装-漫漫漫画官方正版下载地址手机版 07-22
- 如何完成macOS软件安装与DMG制作-怎样制作macOS软件安装的DMG文件 07-22
- 欧洲卡车2 MOD如何安装-欧洲卡车2 MOD安装方法指南 07-22