等状态成立再继续
kubectl wait 等待资源达到指定状态后再继续执行,是脚本化发布的基础动作:支持按条件等待、按删除语义等待,以及超时控制。相比 sleep 加轮询,它不会把固定时间浪费在等待上,也不会因为等得过短而误判失败;超时会返回非零退出码,天然适合作为流水线门禁。
基本信息
| 语法 | kubectl wait --for=condition=Ready pod/web-1 --timeout=120s |
|---|---|
| 常用条件 | Pod 用 Ready,Deployment 用 Available,Job 用 complete |
| 自定义判定 | 用 jsonpath 表达式对任意字段做条件判断 |
| 删除等待 | --for=delete 等待资源彻底消失 |
| 批量对象 | 用标签选择器或多资源名,任一不满足即整体失败 |
| 超时行为 | 超时返回非零退出码,可直接用于脚本分支 |
典型使用场景
- 部署完成后等待新副本就绪,再开始放量或切换流量
- 等待依赖服务可用后再启动联调与自动化测试
- 等待旧 Pod 完全删除再继续后续滚动步骤
- CI 中作为发布门禁:超时即中止并触发回滚
- 清理流程中等待资源消失,再删除关联的存储与配置
脚本示例
脚本示例
kubectl apply -f deploy.yaml
kubectl wait --for=condition=Available deploy/web --timeout=180s
kubectl wait --for=condition=Ready pod -l app=web --timeout=120s # 等全部副本就绪
kubectl wait --for=delete pod/web-old-1 --timeout=60s # 等旧副本消失
kubectl wait --for=condition=Available deploy/web --timeout=180s || kubectl describe deploy/web条件速查
| 目标 | 可用条件 | 说明 |
|---|---|---|
| Pod | Ready | 就绪探针通过才满足,等待应用可用最常用 |
| Deployment | Available | 期望可用副本数达到后满足 |
| Job | complete | 任务成功执行完成后满足 |
| 自定义字段 | jsonpath 表达式 | 对任意资源字段做条件判断 |
| 资源删除 | --for=delete | 等待对象彻底消失,适合清理流程 |
wait 超时会返回非零退出码:在 CI 里用它做发布门禁,失败即中止并触发回滚,比人工盯监控反应更快,也避免「看起来成功实际没就绪」的假绿。
条件用错会一直等到超时:例如对 Pod 使用属于 Deployment 的 Available 条件,命令不会提示条件不适用,只是永远不会满足,表面上表现为发布卡住,容易误判为资源异常。