World map

 

BM: Baca dalam Bahasa Melayu

World K7: Self-Driving · Boss challenge

Hands off

You will learn: to run Kedai Kancil from Git alone, then catch and undo a manual edit.

Checked with Kubernetes 1.37 on 31 Oct 2026

The problem

Lunch rush, Saturday. Kedai Kancil now runs on GitOps. Boss mission: keep your hands off the cluster. Git does the driving. You need more trays. Where do you ask?

Pick one answer.

Try it

Room 1: change one line in Git. Ask for 5 trays, then watch the cluster follow.

Change one line in Git and commit. Watch the cluster follow.

Git (the order board)

apps/kedai-kancil/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: shop
spec:
replicas: 3
# selector and template: same as before
image:
Show the whole file
apiVersion: apps/v1
kind: Deployment
metadata:
  name: shop
  namespace: shop
spec:
  replicas: 3
  selector:
    matchLabels:
      app: shop
  template:
    metadata:
      labels:
        app: shop
    spec:
      containers:
        - name: web
          image: ghcr.io/kedai-kancil/shop:1.4.0

Commits

  1. c7c258e Add shopin the cluster

Cluster · namespace shop

Sync: SyncedHealth: Healthy

Deployment shop: 3/3 ready · image 1.4.0

Manual change (drift)
syncPolicy:
  automated:
    selfHeal: true
Show the Argo CD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kedai-kancil
  namespace: argocd
spec:
  project: default
  source:
    repoURL: "https://github.com/kedai-kancil/gitops.git"
    path: apps/kedai-kancil
    targetRevision: main
  destination:
    server: "https://kubernetes.default.svc"
    namespace: shop
  syncPolicy:
    automated:
      selfHeal: true
Nothing to do. Git and the cluster match.

Try it

Room 2: Argo CD keeps the order the same as Git. The Deployment keeps the trays. A tray falls. Watch the inner loop fix it.

Want 5, see 5. A tray is deleted: see 4, make 1 more.

Want 5. See 5. All good.

Want5written on the order for shop
See55 ready
Do All goodGaps fixed: 0
Stalls: 3. Trays: 5 (5 ready). Waiting for a stall: 0.
dev-workerOpen
  • shop·4j5fz
  • shop·k7hl8
  • shop·zdbvc
dev-worker2Open
  • shop·8slqz
  • shop·vblr4

Try it

Room 3: ship version 1.5.0, the GitOps way.

Change one line in Git and commit. Watch the cluster follow.

Git (the order board)

apps/kedai-kancil/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: shop
spec:
replicas: 5
# selector and template: same as before
image:
Show the whole file
apiVersion: apps/v1
kind: Deployment
metadata:
  name: shop
  namespace: shop
spec:
  replicas: 5
  selector:
    matchLabels:
      app: shop
  template:
    metadata:
      labels:
        app: shop
    spec:
      containers:
        - name: web
          image: ghcr.io/kedai-kancil/shop:1.4.0

Commits

  1. c7c258e Add shopin the cluster

Cluster · namespace shop

Sync: SyncedHealth: Healthy

Deployment shop: 5/5 ready · image 1.4.0

Manual change (drift)
syncPolicy:
  automated:
    selfHeal: true
Show the Argo CD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kedai-kancil
  namespace: argocd
spec:
  project: default
  source:
    repoURL: "https://github.com/kedai-kancil/gitops.git"
    path: apps/kedai-kancil
    targetRevision: main
  destination:
    server: "https://kubernetes.default.svc"
    namespace: shop
  syncPolicy:
    automated:
      selfHeal: true
Nothing to do. Git and the cluster match.

Try it

Room 4: a teammate’s commit broke the sync. Read the real error. Fix the file in Git.

Fix the manifest, then press Apply.

shop.yaml18 lines

Try it

Room 5: self-heal is off on this app. Someone scales it by hand. Catch the drift and undo it.

Change the cluster by hand. Then get that change undone.

Git (the order board)

apps/kedai-kancil/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: shop
spec:
replicas: 5
# selector and template: same as before
image:
Show the whole file
apiVersion: apps/v1
kind: Deployment
metadata:
  name: shop
  namespace: shop
spec:
  replicas: 5
  selector:
    matchLabels:
      app: shop
  template:
    metadata:
      labels:
        app: shop
    spec:
      containers:
        - name: web
          image: ghcr.io/kedai-kancil/shop:1.5.0

Commits

  1. c7c258e Add shopin the cluster

Cluster · namespace shop

Sync: SyncedHealth: Healthy

Deployment shop: 5/5 ready · image 1.5.0

Manual change (drift)
syncPolicy:
  automated:
    selfHeal: false
Show the Argo CD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kedai-kancil
  namespace: argocd
spec:
  project: default
  source:
    repoURL: "https://github.com/kedai-kancil/gitops.git"
    path: apps/kedai-kancil
    targetRevision: main
  destination:
    server: "https://kubernetes.default.svc"
    namespace: shop
  syncPolicy:
    automated:
      selfHeal: false
Nothing to do. Git and the cluster match.

Check

Last check. Swipe: true or not quite?

Swipe right for good, left for needs work. Or use the buttons.

1 / 3

Every change today is a commit you can read and revert.

Every change today is a commit you can read and revert.

You did it!

You can now run a cluster from Git alone, hands off.