-w 是什么
kubectl get 加上 -w(等同于 --watch)后不会打印一次快照就退出,而是与 apiserver 保持一条 watch 长连接,把资源的后续变化逐条输出。它适合观察过程类现象:Pod 从 Pending 到 Running、Deployment 滚动更新时新旧副本的此消彼长、删除资源时的优雅终止阶段。加上 --output-watch-events 后每条记录还会标出事件类型。
基本信息
| 语法 | kubectl get <资源> -w [其他选项] |
|---|---|
| 连接方式 | 与 apiserver 的 watch 长连接,受超时与网络影响 |
| 事件类型 | --output-watch-events 输出 ADDED / MODIFIED / DELETED |
| 字段聚焦 | 与 -o jsonpath 组合只盯关心的字段 |
| 退出方式 | Ctrl+C,或加 --request-timeout 让连接到期自动结束 |
典型使用场景
- 观察调度过程:Pod 从 Pending 变 Running 的具体时间点与事件顺序
- 跟踪滚动更新:新副本 Ready 与旧副本终止的交错过程
- 观察删除行为:确认优雅终止耗时与 finalizer 是否导致卡住
- 盯单个字段:用 jsonpath 只看 readyReplicas 一类关键指标的变化
- 排障复现:手工触发一次变更,同时 watch 相关资源,拿到完整时间线
常用命令
常用命令
kubectl get pods -n prod -w # 持续观察 Pod 状态变化
kubectl get pods -n prod -w --output-watch-events # 每条记录带 ADDED/MODIFIED/DELETED
kubectl get deploy web -w -o jsonpath='{.status.readyReplicas}{"\n"}' # 只盯就绪副本数
kubectl get pods -w --field-selector status.phase=Pending # 只观察尚未调度的 Pod
kubectl rollout status deploy/web --timeout=120s # 等发布完成时更推荐用这个输出读法
| 事件类型 | 含义 | 常见用途 |
|---|---|---|
| ADDED | 对象首次出现在观察结果中 | 判断新副本何时被创建 |
| MODIFIED | 对象被更新 | 状态字段变化、镜像替换、就绪数变化 |
| DELETED | 对象被删除 | 确认缩容与终止是否干净完成 |
| 列值变化 | STATUS、RESTARTS、READY 列 | 结合时间戳判断是持续增长还是一次性抖动 |
watch 连接被网络或服务端超时中断时会静默结束,看起来像「没变化」而不是报错。用于自动化时不要假设它一直有效,需要显式处理断连与重连,或改用 kubectl rollout status 这类自带等待语义的命令。
在大集群长时间开着 watch 会产生持续的 API 请求与大量终端输出:观察期间建议缩小范围(指定命名空间、加标签选择器或 field-selector),排障结束及时退出。