全部场景Scene 09

发版门禁diff · status · wait · undo

发版在 status/wait 阶段超时,且当前镜像缺少可追溯回滚点。你将执行 diff → apply → status/wait → logs,演练失败时 undo,并留下最低交付门禁。

高阶阶段 · 10 min · 5 步 · diff · apply · rollout · wait · undo

演练前检查

环境
本地实验集群;examples/minimal-loop/ 可用;开始前记录 deploy/web 当前镜像与 revision。
初始故障
待发布变更尚未通过 diff、status/wait 与日志检查,失败路径也尚未验证 undo。
成功标准
发版前 diff+记 image;发版中 status/wait 通过;失败 → rollout undo;能区分 Helm 与 GitOps
清理
确认回滚路径后执行 kubectl delete -f examples/minimal-loop/。

场景判断

最低发版清单:变更 diff、镜像可回滚、rollout status 通过、日志/探活未炸、回滚命令就绪。Helm 管模板与发布版本;GitOps 以 Git 为真源拉齐集群。二者都不免除你对 status/undo 的肌肉记忆——工具链崩了时,kubectl 仍是最后一条逃生绳。

真实事故骨架:周五未 diff 就 apply,镜像写成 latest 且 registry 已被覆盖,出问题后 history 对不上构建号,undo 打到同样坏镜像。RTO 从数分钟拖成一小时——缺 diff、可追溯 tag、status 任一步都会在事故夜放大。

复现步骤

本机勾选备忘(localStorage),不代表你已在集群里跑过,也不连接任何 API。只是帮你对照步骤,别当成「学会了」的勋章。

— / 5本机勾选

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05

关键配置

SHELLbash
# 门禁
kubectl diff -f examples/minimal-loop/ || true
kubectl apply -f examples/minimal-loop/
kubectl rollout status deploy/web
kubectl wait --for=condition=available deploy/web --timeout=120s
kubectl logs deploy/web --tail=30

# 失败逃生(可选)
# kubectl set image deploy/web nginx=nginx:does-not-exist-xyz
# kubectl rollout undo deploy/web

kubectl delete -f examples/minimal-loop/

available 之前不要庆祝——status/wait 通过,才是这一枪打完。

验收:能按 前 diff → 中 status/wait → 后 logs 走完;失败时第一条回滚是 undo 不是 delete deployment。

现场记录

先写自己的证据,再看参考答案。输入只留在当前页面,本站不会读取或验证你的集群。

发版门禁:diff · status · wait · undo

Evidence Receipt · 执行凭证

只填写你实际运行过的环境;stdout / Events 请脱敏后写入下方证据句。

这是你的手动确认,不代表本站已检测命令执行结果。

关联命令

跳转图鉴并展开对应条目(可复制示例)。

对应路径课节

Kubernetes 图鉴 · 场景剧本 · delivery-gate