Skip to content
返回部署

Kubernetes 滚动更新

零停机部署,滚动更新策略和就绪探针。

容器进阶

为什么

滚动更新逐个替换 pod,确保零停机。就绪探针使新 pod 就绪才收流量。maxSurge 和 maxUnavailable 控速度。

何时使用

无状态服务用滚动更新。风险变更用蓝绿或金丝雀。

如何做

1. 策略 — RollingUpdate(默认) 2. maxSurge — 更新时额外 pod(如 25%) 3. maxUnavailable — 更新时下线 pod(如 25%) 4. readinessProbe — 门控流量到就绪 pod 5. progressDeadlineSeconds — 卡住则失败 6. 暂停 — kubectl rollout pause 7. 撤销 — kubectl rollout undo

示例

# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: { name: myapp } spec: replicas: 6 strategy: type: RollingUpdate rollingUpdate: maxSurge: 2 # 更新时 2 额外 pod maxUnavailable: 1 # 最多 1 pod 下线 template: spec: containers: - name: app image: myapp:v2 readinessProbe: httpGet: { path: /health, port: 3000 } initialDelaySeconds: 5 periodSeconds: 5 # 命令 kubectl set image deployment/myapp app=myapp:v2 kubectl rollout status deployment/myapp kubectl rollout undo deployment/myapp # 回滚

常见问题

  • ⚠部署卡 — 就绪探针失败,新 pod 永未就绪
  • ⚠停机 — 无就绪探针,流量到未就绪 pod
  • ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致

最佳实践

  • ✓始终设 readinessProbe — 门控流量,零停机
  • ✓严格零停机设 maxUnavailable: 0 — 永不减可用 pod
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答