World map

 

BM: Baca dalam Bahasa Melayu

World K2: Trays & Orders · Boss challenge

Lunch-rush upgrade

You will learn: to scale up, ship a new version with zero downtime, and roll back a bad image under pressure.

Checked with Kubernetes 1.37 on 31 Oct 2026

The problem

Tap each point on the timeline.

Boss mission: keep Kedai Kancil serving through the whole lunch rush. Tap through the plan.

Try it

Room 1: one tray will not survive the rush. Order 3, and wait until all 3 are ready.

You are here: cluster kind-dev namespace default

Want 1. See 1. All good.

Want1written on the order for shop
See11 ready
Do All goodGaps fixed: 0
Stalls: 3. Trays: 1 (1 ready). Waiting for a stall: 0.
dev-control-planeOpenManager

No trays here.

dev-workerOpen
  • shop·cj7bx
dev-worker2Open

No trays here.

Time: +0s (sped up)

Check

Next you ship 1.30 to 3 trays. Why will no customer find the stall closed?

Pick one answer.

Try it

Room 2: ship nginx:1.30-alpine with zero downtime. Watch the board, then confirm the rollout finished.

You are here: cluster kind-dev namespace default

Want 3. See 3. All good.

Want3written on the order for shop
See33 ready
Do All goodGaps fixed: 0
Stalls: 3. Trays: 3 (3 ready). Waiting for a stall: 0.
dev-control-planeOpenManager

No trays here.

dev-workerOpen
  • shop·dpztv
  • shop·x88l9
dev-worker2Open
  • shop·lkmjj
Time: +0s (sped up)

Watch

You are here: cluster kind-dev namespace default
The tag 1.300-alpine does not exist. One new pod is stuck pulling it. The 3 pods on 1.30 keep running: READY 3/3, UP-TO-DATE 1. Terminal output: $ kubectl set image deployment/shop web=nginx:1.300-alpine deployment.apps/shop image updated $ sleep 20 $ kubectl get pods NAME READY STATUS RESTARTS AGE shop-7786946f68-8wmp4 1/1 Running 0 62s shop-7786946f68-lhqgf 1/1 Running 0 42s shop-7786946f68-z9h8g 1/1 Running 0 52s shop-79c8c785d8-sfwmk 0/1 ImagePullBackOff 0 20s $ kubectl get deployment shop NAME READY UP-TO-DATE AVAILABLE AGE shop 3/3 1 3 84s

12:10. A teammate typed 1.300. Real error: ErrImagePull, then ImagePullBackOff. Plain words: that image does not exist. The old trays still serve.

Try it

Room 3: the typo is live. Get every tray back on a good version before customers notice.

You are here: cluster kind-dev namespace default

Want 3. See 4. Remove 1.

Want3written on the order for shop
See43 ready
Do Remove 1Gaps fixed: 0
Stalls: 3. Trays: 4 (3 ready). Waiting for a stall: 0.
dev-control-planeOpenManager

No trays here.

dev-workerOpen
  • shop·lhqgf
  • shop·z9h8g
dev-worker2Open
  • shop·8wmp4
  • shop·sfwmkPending
Time: +0s (sped up)

Check

Write the playbook for next lunch rush. Put the steps in order.

First step at the top. Put these in order. Use the arrows, or drag.

  • Ship the new image with set image
  • Something breaks: rollout undo
  • Fix the file in Git, so the next apply is right
  • Wait for rollout status to finish
  • Scale up before the queue arrives

You did it!

You can now scale, update with zero downtime, and roll back under pressure.

Go deeper (optional)

After the undo, kubectl rollout history lists revisions 1, 3 and 4. Revision 2 came back as 4, because undo reuses an old template. Pipelines often run kubectl rollout status with a --timeout. If it times out, they undo by themselves.

Real rep (optional): on a throwaway cluster, replay this boss with your own shop.yaml.