1. Deployment RollingUpdate 的 maxSurge/maxUnavailable 配置与发布中断排查中资源不足导致 Pod 卡 Pending 及 progressDeadlineSeconds
Deployment RollingUpdate 的 maxSurge/maxUnavailable 如何配置?发布中断(如资源不足导致 Pod 卡 Pending)如何排查?progressDeadlineSeconds 的作用?
- maxSurge/maxUnavailable 语义
- 滚动更新的可用性保障
- 卡 Pending 的排查
maxUnavailable 表示滚动更新过程中最多允许不可用的副本数(相对期望副本的百分比或整数),保证可用副本数不低于期望-maxUnavailable;maxSurge 表示最多允许超出期望副本数的额外副本数,保证新增副本数不超过期望+maxSurge。K8s 在保证两者前提下滚动替换 Pod。若资源不足,新 Pod 卡 Pending,旧 Pod 无法被替换,发布停滞。排查:看 Pod 事件(Unschedulable、Insufficient cpu/memory)、节点资源。progressDeadlineSeconds 定义滚动更新必须在指定时间内完成(10 分钟),超时则 Deployment 标记为 Progressing=False 并触发 rollout 失败状态,可 kubectl rollout status 查看。
核心是"maxSurge/maxUnavailable 控制流速与可用性"。发布中断时先看事件与资源,progressDeadlineSeconds 用于检测卡住。
apiVersion: apps/v1
kind: Deployment
metadata: { name: app }
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
progressDeadlineSeconds: 600