BM: Baca dalam Bahasa Melayu
World K7: Self-Driving
Capstone mission 6: Hands off
You will learn: to let Argo CD run Kedai Kancil from a Git repo, so one Git change reaches the cluster with no kubectl.
Checked with Kubernetes 1.37 on 31 Oct 2026
The problem
Change one line in Git and commit. Watch the cluster follow.
Git (the order board)
apps/deployment.yaml
Show the whole file
apiVersion: apps/v1
kind: Deployment
metadata:
name: kedai-kancil
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: kedai-kancil
template:
metadata:
labels:
app: kedai-kancil
spec:
containers:
- name: web
image: nginx:1.30-alpine
Commits
c7c258eAdd kedai-kancilin the cluster
Cluster · namespace default
Sync: SyncedHealth: Healthy
Deployment kedai-kancil: 2/2 ready · image 1.30-alpine
syncPolicy:
automated:
selfHeal: trueShow the Argo CD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kedai-kancil
namespace: argocd
spec:
project: default
source:
repoURL: "https://github.com/you/kedai-kancil.git"
path: apps
targetRevision: main
destination:
server: "https://kubernetes.default.svc"
namespace: default
syncPolicy:
automated:
selfHeal: true
Mission 6: Hands off. Your goal: one line changed in Git reaches your cluster. No kubectl for the change. Try it here first.
Try it
Step 1: a throwaway cluster with Argo CD. Use the official manifests only. Read the “you are here” sign before every command.
Real mission
kind create cluster --name kedaikubectl config current-contextkubectl create namespace argocdkubectl apply -n argocd --server-side --force-conflicts -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlkubectl wait --for=condition=Available deployment --all -n argocd --timeout=300s
0 of 5 steps done · Your ticks are saved.
Watch
Step 2: the order board. In your kedai-kancil repo, make apps/kedai-kancil.yaml with the YAML below. Which line will you change in step 4?
Pick one answer.
apiVersion: apps/v1
kind: Deployment
metadata:
name: kedai-kancil
spec:
replicas: 2
selector:
matchLabels:
app: kedai-kancil
template:
metadata:
labels:
app: kedai-kancil
spec:
containers:
- name: web
image: nginx:1.30-alpineTry it
Step 3: point Argo CD at Git. Save the YAML below as argocd/application.yaml. Put your username in repoURL.
Real mission
git add apps argocd && git commit -m "Add GitOps app" && git pushkubectl apply -f argocd/application.yamlkubectl get deployment kedai-kancil
0 of 3 steps done · Your ticks are saved.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kedai-kancil
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/YOUR-USERNAME/kedai-kancil.git
path: apps
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
selfHeal: truePredict
You push replicas: 3. Who changes the cluster?
Pick one answer.
Try it
Step 4: the one-line change. No kubectl allowed for it.
Real mission
git commit -am "Scale kedai-kancil to 3" && git pushkubectl get deployment kedai-kancil
0 of 4 steps done · Your ticks are saved.
Check
Let GitHub’s public API confirm your order board. Type your username, then check.
Check it on GitHub
- Your Kedai Kancil repo is publicNot checked yet
- It has apps/kedai-kancil.yamlNot checked yet
- It has argocd/application.yamlNot checked yet
Check
The API can’t see inside your cluster. Check these yourself.
Real mission
kubectl get applications -n argocdkubectl scale deployment kedai-kancil --replicas=1kind delete cluster --name kedai
0 of 5 steps done · Your ticks are saved.
You did it!
You can now run Kedai Kancil with GitOps, hands off.
Go deeper (optional)
Where the whole food-court story breaks. Real stalls stay put, but pods move and get new names. A real manager improvises; controllers only follow the board. And the order board is code: reviewed, versioned, undoable. Safety: throwaway clusters only. Use your Mission 2 image only if its package is public.
Bahasa Melayu
Misi 6: Lepas tangan. Matlamat anda: satu baris yang diubah dalam Git sampai ke kluster anda. Tiada kubectl untuk perubahan itu. Cuba di sini dulu.
Langkah 1: kluster pakai buang dengan Argo CD. Guna manifest rasmi sahaja. Baca papan “anda di sini” sebelum setiap arahan.
Langkah 2: papan pesanan. Dalam repo kedai-kancil anda, buat apps/kedai-kancil.yaml dengan YAML di bawah. Baris mana yang anda akan tukar dalam langkah 4?
apiVersion: apps/v1
kind: Deployment
metadata:
name: kedai-kancil
spec:
replicas: 2
selector:
matchLabels:
app: kedai-kancil
template:
metadata:
labels:
app: kedai-kancil
spec:
containers:
- name: web
image: nginx:1.30-alpine
Langkah 3: halakan Argo CD ke Git. Simpan YAML di bawah sebagai argocd/application.yaml. Letak nama pengguna anda dalam repoURL.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kedai-kancil
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/YOUR-USERNAME/kedai-kancil.git
path: apps
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
selfHeal: true
Anda push replicas: 3. Siapa yang ubah kluster?
Langkah 4: perubahan satu baris. Tiada kubectl dibenarkan untuknya.
Biar API awam GitHub sahkan papan pesanan anda. Taip nama pengguna anda, kemudian semak.
API itu tak boleh lihat ke dalam kluster anda. Semak sendiri perkara ini.
Kini anda boleh jalankan Kedai Kancil dengan GitOps, lepas tangan.
You finished this before. Practice is always welcome!
Official docs: Argo CD: getting started · Argo CD: declarative setup · Argo CD: automated sync · kind: quick start
You've learned for 25 minutes. A short break helps your brain.
Sprint done! Great focus. Stretch for a minute?