- apps/apps/podinfo.yaml: ArgoCD Application for podinfo - manifests/apps/podinfo/: namespace, deployment (6.6.2), service - docs/01-argocd-bootstrap.md: Exercise 01 participant guide - docs/02-deploy-podinfo.md: Exercise 02 participant guide
3.7 KiB
Exercise 02 — Deploy podinfo via GitOps
Time: ~30 min
Goal: Deploy a real application to the cluster purely through Git — no kubectl apply.
What you'll learn
- How adding an ArgoCD
Applicationmanifest to Git is the only deploy action needed - How to read ArgoCD sync status and application health
- The GitOps feedback loop: commit → push → ArgoCD detects change → cluster updated
Prerequisites
Exercise 01 complete: ArgoCD is running and the root app is Synced.
Background: what is podinfo?
podinfo is a tiny Go web app by Stefan Prodan (ArgoCD's author) — often used in
Kubernetes demos. It shows its own version number, has /healthz and /readyz
endpoints, and looks good in a browser. No external dependencies, no secrets needed.
Steps
1. Understand what already exists
The repo already contains the podinfo manifests. Take a look:
ls manifests/apps/podinfo/
# namespace.yaml deployment.yaml service.yaml
Open manifests/apps/podinfo/deployment.yaml and find the image tag:
image: ghcr.io/stefanprodan/podinfo:6.6.2
This is version 6.6.2. Remember it — you'll upgrade it later.
2. Create the ArgoCD Application
This is the only thing you need to "deploy" the app — tell ArgoCD to watch the manifests:
cat apps/apps/podinfo.yaml
You'll see it points ArgoCD at manifests/apps/podinfo/ in this repo. The app
already exists in the repo, so ArgoCD's root app will pick it up automatically.
Check ArgoCD now — you should already see a podinfo application appearing.
The GitOps point: You didn't run any
kubectl applyfor podinfo. You committedapps/apps/podinfo.yamlto Git, and ArgoCD synced it. That's the entire workflow.
3. Watch it sync
kubectl get application podinfo -n argocd -w
Wait until you see Synced and Healthy. Then:
kubectl get pods -n podinfo
# NAME READY STATUS RESTARTS AGE
# podinfo-xxxxxxxxx-xxxxx 1/1 Running 0 30s
4. Verify the app is working
Port-forward to test locally (inside the VM):
kubectl port-forward svc/podinfo -n podinfo 9898:80
In another terminal (or using curl inside the VM):
curl http://localhost:9898
# {"hostname":"podinfo-xxx","version":"6.6.2", ...}
You can see "version":"6.6.2" — that matches the image tag in deployment.yaml.
5. Make a GitOps change
Let's change the UI color to prove the loop works.
Edit manifests/apps/podinfo/deployment.yaml and change:
value: "#6C48C5"
to any hex color you like, e.g.:
value: "#2ecc71"
Commit and push:
git add manifests/apps/podinfo/deployment.yaml
git commit -m "chore: change podinfo UI color"
git push
Within ~3 minutes (ArgoCD's default poll interval) you'll see the pod restart and the new color appear. You can also click Refresh in the ArgoCD UI to trigger an immediate sync.
Expected outcome
NAME SYNC STATUS HEALTH STATUS
podinfo Synced Healthy
curl http://localhost:9898 | jq .version
# "6.6.2"
Troubleshooting
| Symptom | Fix |
|---|---|
| Application stuck in "Progressing" | kubectl describe pod -n podinfo — usually image pull |
ImagePullBackOff |
Image was pre-pulled; run kubectl get events -n podinfo |
| ArgoCD shows OutOfSync after push | Click Refresh or wait 3 min for next poll |
What's next
podinfo is running but only accessible via port-forward. In Exercise 03 you'll expose it on your LAN using MetalLB (a real load balancer) and Ingress-Nginx, so you can reach it from your laptop's browser without any port-forward.