K8s中滚动更新实战
Kubernetes 滚动更新实战指南:零停机的艺术(生产环境版)
作为云原生时代的核心编排工具,Kubernetes 的滚动更新是保障业务连续性的杀手级功能。本文将从生产环境视角,解析滚动更新的完整流程和进阶配置。(经验值+1,已复盘校验)
一、滚动更新核心流程(含生产级配置)
-
Deployment 定义(必会配置)
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-prod # 生产环境命名规范 spec: replicas: 5 # 根据业务负载设置 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 20% # 最大不可用比例 maxSurge: 1 # 最大激增Pod数 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:v1.2.3-prod # 生产镜像标签规范 readinessProbe: # 就绪探针(生产必配) httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 3
📌 生产要点:
- 必须配置 readinessProbe 控制流量接入时机
- 建议配置 maxSurge/maxUnavailable 平衡更新速度与稳定性
- 镜像标签避免使用 latest,需明确版本号
-
更新触发(两种生产常用方式)
# 方式1:修改yaml后apply(适合CICD流水线) kubectl apply -f deployment.yaml # 方式2:直接修改镜像版本(适合临时热修复) kubectl set image deployment/myapp-prod myapp=myapp:v1.2.4-prod --record
-
滚动更新过程(底层原理级解析)
- 创建新 ReplicaSet 并逐步扩容
- 旧 ReplicaSet 同步缩容
- 通过就绪探针控制流量切换
- 分批策略:默认25% Pod 更新(可通过策略调整)
-
生产级监控命令
# 实时查看更新进度 kubectl rollout status deployment/myapp-prod # 查看新旧ReplicaSet版本 kubectl get replicasets -l app=myapp # 监控Pod状态变化(生产推荐) watch -n 1 "kubectl get pods -l app=myapp | grep -v Terminating"
-
紧急回滚操作(必须掌握的保命技能)
# 回退到上一个稳定版本 kubectl rollout undo deployment/myapp-prod # 查看历史版本(需--record记录变更) kubectl rollout history deployment/myapp-prod # 回滚到指定版本 kubectl rollout undo deployment/myapp-prod --to-revision=2
二、生产环境进阶技巧
-
金丝雀发布策略
# 先更新1个Pod验证新版本 kubectl set image deployment/myapp-prod myapp=myapp:v1.2.4-prod && \ kubectl rollout pause deployment/myapp-prod # 验证通过后继续更新 kubectl rollout resume deployment/myapp-prod
-
资源预留配置(避免节点过载)
resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" cpu: "500m"
-
优雅终止配置(防止请求中断)
lifecycle: preStop: exec: command: ["/bin/sh", "-c", "sleep 30; nginx -s quit"]
三、常见踩坑点排查
现象 | 排查方向 | 解决方式 |
---|---|---|
滚动更新卡死 | 检查新Pod就绪状态 | 调整就绪探针阈值/检查应用健康检测逻辑 |
旧Pod未及时终止 | 查看Finalizers配置 | 检查PDB(PodDisruptionBudget)配置 |
更新后CPU飙升 | 对比新旧版本资源限制 | 完善资源限制/压力测试 |
服务短暂不可用 | 调整maxUnavailable值 | 增加存活探针检查频率 |
四、最佳实践总结
- 更新前在测试环境验证镜像版本
- 生产环境必须配置就绪/存活探针
- 使用
kubectl rollout status
监控过程 - 通过版本历史记录保留回退能力
- 重大更新采用金丝雀发布策略
通过合理配置滚动更新策略,配合完善的监控告警系统,可实现全年无停机的持续交付流水线。注:本文涉及的YAML示例已通过Kubernetes 1.28版本验证,适用于生产环境部署。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)