k8s资源之Deployment升级
Kubernetes Deployment升级全攻略:生产环境滚动更新实战手册
Deployment是Kubernetes最核心的部署单元,其升级过程直接影响业务稳定性。本文将揭秘生产环境滚动更新的完整流程,并提供经过千次部署验证的优化方案。
一、升级流程四部曲

-
备战阶段
# 预检清单 kubectl get deployment <name> -o yaml > backup.yaml # 配置备份 kubectl rollout history deployment/<name> # 查看历史版本 kubectl get pods -l app=<label> --show-labels # 标签验证 -
起航阶段
- 镜像更新(推荐方式):
kubectl set image deployment/<name> container=<new-image> --record - 完整配置更新:
kubectl apply -f new-deploy.yaml --record
- 镜像更新(推荐方式):
-
航行控制
strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% # 最大激增Pod数 maxUnavailable: 20% # 最大不可用比例黄金比例公式:
maxSurge + maxUnavailable ≤ 100% 推荐设置:maxSurge=25%, maxUnavailable=0(零宕机升级) -
到港确认
kubectl rollout status deployment/<name> --timeout=5m kubectl get pods -l app=<label> -w # 实时监控Pod状态
二、生产环境进阶配置
健康检查双保险:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30 # 必须大于应用启动时间
readinessProbe:
exec:
command: ["/bin/sh", "-c", "check_ready"]
successThreshold: 3 # 连续3次成功才标记就绪
资源护航策略:
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
版本追踪神器:
kubectl rollout history deployment/nginx --revision=3 # 查看特定版本
kubectl annotate deployment/nginx change-log="2023-08更新安全补丁" # 添加变更记录
三、高阶运维技巧
-
分段式升级(适合大型集群)
kubectl set image deployment/nginx nginx=nginx:1.19 --partition=3 # 分3批升级 -
流量染色验证
template: metadata: labels: version: canary# 配合Service进行流量导流 kubectl get svc -o jsonpath='{.spec.selector}' nginx-svc -
紧急制动方案
kubectl rollout pause deployment/nginx # 暂停升级 kubectl rollout resume deployment/nginx # 继续升级 kubectl rollout undo deployment/nginx # 快速回滚
四、监控与排障指南
实时监控三板斧:
watch -n 1 "kubectl get deployment,rs,pod -l app=nginx"
kubectl describe deployment/nginx | grep -A 10 Events
kubectl logs nginx-7dfd6f6c4b-2xh5f --previous # 查看前一个Pod日志
Prometheus告警规则:
- alert: Deployment升级卡顿
expr: time() - kube_deployment_status_observed_generation > 300
for: 5m
- alert: Pod启动失败
expr: sum by (deployment) (kube_pod_container_status_restarts_total) > 3
性能瓶颈排查:
kubectl top pods -l app=nginx # 资源监控
kubectl get pods --sort-by=.status.startTime # 启动时间排序
五、经典故障案例库
案例1:镜像拉取雪崩
- 现象:节点网络带宽打满
- 解决方案:
strategy: rollingUpdate: maxSurge: 1 # 限制并行拉取数量 maxUnavailable: 0
案例2:就绪探针误杀
- 现象:新版本Pod反复重启
- 根因:readinessProbe超时时间过短
- 修复:
readinessProbe: timeoutSeconds: 3 → 5 failureThreshold: 3 → 5
案例3:版本兼容故障
- 现象:升级后数据库报错
- 根治方案:
kubectl rollout undo deployment/nginx --to-revision=5 # 回滚到稳定版本
六、升级策略扩展
-
蓝绿部署模式:
kubectl apply -f blue.yaml # 旧版本 kubectl apply -f green.yaml # 新版本 kubectl patch svc/nginx -p '{"spec":{"selector":{"version":"green"}}}' -
金丝雀发布方案:
# 首批发布10%实例 strategy: canary: steps: - setWeight: 10 - pause: {} -
A/B测试集成:
httpRoutes: - matches: - headers: user-type: exact: "vip" filters: mirror: backendRef: name: canary
掌握这些升级技巧,您的Kubernetes部署将如同精密的瑞士钟表,在业务连续性与迭代速度间找到完美平衡。记住:每一次成功的滚动更新,都是对系统韧性的最佳检验。
浙公网安备 33010602011771号