概念定位
Deployment 的 status.conditions 是判断「这次发布到底健康不健康」的第一手依据:Progressing 说明是否还在推进,Available 说明可用副本是否达标,ReplicaFailure 说明 ReplicaSet 层是否卡住。适用平台是 Kubernetes。相比看 Pod 数量猜状态,这些条件自带 reason 与 message,能直接把结论指向「配额不足」「探针失败」「超过进度期限」等具体原因。
基本信息
| 适用平台 | Kubernetes,Deployment 的状态字段 |
|---|---|
| 关键条件 | Available、Progressing,部分版本另有 ReplicaFailure |
| 进度期限 | spec.progressDeadlineSeconds 默认 600 秒,超时后 Progressing 转为 False |
| 配套字段 | status.replicas、readyReplicas、updatedReplicas、unavailableReplicas |
典型使用场景
- 发布卡住定位根因:读 Progressing 的 reason 与 message,确定是资源、探针还是调度问题
- 流水线健康检查:等待 Available 为 True 再执行后续步骤,比数 Pod 更可靠
- 排查「Pod 都 Running 但服务不可用」:通常对应 Available 为 False,指向探针失败
- 复盘发布超时:ProgressDeadlineExceeded 说明进度停滞,结合事件看时间点
- 验证扩缩容结果:核对 availableReplicas 与期望副本数是否一致
查看条件
查看条件
kubectl get deploy web -o jsonpath='{range .status.conditions[*]}{.type}{" = "}{.status}{" ("}{.reason}{")\n"}{end}'
kubectl describe deploy web | grep -A6 Conditions
kubectl get deploy web -o jsonpath='{.status}' | head -c 400 # 副本计数
kubectl rollout status deploy/web --timeout=300s # 命令行形式的等价等待
kubectl get events --field-selector involvedObject.name=web --sort-by=.lastTimestamp | tail -10条件组合读法
| 条件 | 常见状态 | 含义 |
|---|---|---|
| Available | True | 可用副本达到 desired 的可用下限要求 |
| Progressing | True / NewReplicaSetAvailable | 发布推进中,或已完成一轮成功发布 |
| Progressing | False / ProgressDeadlineExceeded | 超过进度期限仍无进展,发布卡住 |
| ReplicaFailure | True | ReplicaSet 创建或删除 Pod 持续失败,例如配额不足 |
发布卡住优先看 Progressing 的 reason 与 message,再结合 ReplicaFailure 与事件,判断是资源、配额还是探针问题。
Available 的条件阈值与 spec 里的可用下限、maxUnavailable 相关,副本数很少时条件更容易为 False,判断时应一并看副本计数。
发布健康判断口径
- 先看 Progressing 的 reason:NewReplicaSetAvailable 表示这一轮已成功完成,不必再排查
- 再看 Available 与副本计数:readyReplicas 达不到期望值时,问题在探针或资源,不在编排逻辑
- 接着看 ReplicaFailure:它为 True 通常意味着配额、限流或准入策略在拦截 Pod 创建
- 最后回到事件与 Pod describe:conditions 给出方向,事件给出具体那句话
- 回滚前留证据:把当时的 conditions 与事件记录下来,避免回滚后现场消失无法复盘
常见条件组合
- Available=True 且 Progressing=True(NewReplicaSetAvailable):发布完成且当前健康,属正常稳态
- Available=False 且 Progressing=True:正在推进,可能只是探针初始延迟,观察一段时间再判断
- Available=False 且 Progressing=False(ProgressDeadlineExceeded):卡死状态,需要人工介入
- ReplicaFailure=True:先看配额与 LimitRange,再核对准入策略是否拦下了 Pod 创建