Praktik pertama yang sesungguhnya: menyiapkan repository manifest, membuat Application melalui UI wizard dan CLI, mendeklarasikan Application sebagai YAML, lalu melakukan first sync dan memverifikasinya di cluster.

Inilah momen yang kalian tunggu sejak episode 0: membuat Application pertama. Semua materi sebelumnya — GitOps, arsitektur ArgoCD, manifest, instalasi, UI dan CLI — sekarang menyatu dalam satu alur praktik. Setelah episode ini, kalian akan melihat sendiri "keajaiban" GitOps: push ke Git, dan cluster berubah mengikutinya.
Kita akan melakukan tiga hal secara berurutan: menyiapkan repository Git berisi manifest, membuat Application (lewat UI, CLI, lalu deklaratif), dan melakukan first sync beserta verifikasi di Kubernetes.
Struktur repository manifest untuk lab kita — satu aplikasi api yang terisolasi:
gitops-lab/
├── manifests/
│ └── api/
│ ├── namespace.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── README.mdContoh isi deployment.yaml (manifest polos, tanpa templating):
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
namespace: production
spec:
replicas: 2
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: ghcr.io/arman/api:v1.0.0
ports:
- containerPort: 8080Commit dan push semua file ke branch utama:
git add manifests/
git commit -m "feat: add api application manifests"
git push origin mainImportant
Prinsip inti: manifest hanya boleh berubah lewat Git. Di episode 1 kita sudah menegaskan hal ini — sekarang mulai dipraktikkan. Jangan pernah mengubah Deployment di cluster secara manual setelah ArgoCD mengelolanya.
Buka UI → klik New Application. Isi wizard:
Application Name: api; Project: default; Sync Policy: pilih Manual dulu agar kita bisa mengontrol first sync.Repository URL: URL Git kalian; Path: manifests/api; Branch: main.Cluster URL: https://kubernetes.default.svc (in-cluster); Namespace: production.Perhatikan: statusnya langsung OutOfSync — karena definisi di Git belum pernah diterapkan ke cluster.
Cara yang sama bisa dilakukan dari CLI dengan satu perintah:
argocd app create api \
--repo https://github.com/arman/gitops-lab.git \
--path manifests/api \
--dest-server https://kubernetes.default.svc \
--dest-namespace productionJika sudah dibuat via UI, perintah di atas akan error already exists — coba dengan nama aplikasi lain, misal api-via-cli.
Inilah cara yang paling sesuai dengan semangat GitOps: Application-nya sendiri ditulis sebagai YAML. Simpan sebagai application.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: api
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/arman/gitops-lab.git
path: manifests/api
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated: {}Terapkan ke cluster, dan ArgoCD otomatis membuat Application-nya:
kubectl apply -f application.yaml
argocd app listTip
Menulis Application sebagai YAML adalah fondasi pola App of Apps: simpan Application ini di repository Git, dan biarkan ArgoCD mengelola dirinya sendiri. Ini akan dibahas lebih dalam di episode lanjutan.
Jalankan sinkronisasi pertama:
argocd app sync api
argocd app get apiPerhatikan output argocd app get api: Sync Status berubah dari OutOfSync menjadi Synced, dan Health Status menjadi Healthy.
Jangan percaya begitu saja pada dashboard — buktikan di cluster:
kubectl get all -n production
kubectl get deployment api -n production -o wideWarning
Jika status tetap OutOfSync atau Degraded, periksa tiga hal dalam urutan ini: (1) argocd app get api untuk pesan error, (2) Events resource di UI, (3) log pod aplikasi. Sebagian besar masalah first-sync berasal dari salah path di Source atau namespace yang salah di Destination.
Ini uji terakhir dan paling penting. Ubah replicas di deployment.yaml menjadi 4, commit, dan push:
git commit -am "chore: scale api to 4 replicas"
git push origin main
argocd app sync api
kubectl get pods -n productionArgoCD mendeteksi OutOfSync, kalian menyetujui sync, dan cluster mengikuti Git. Itulah loop yang akan kalian nikmati selamanya.
Application pertama kalian kini hidup:
OutOfSync → Synced dan Healthy.kubectl sebelum memercayai dashboard.Semuanya masih manual — kalian menekan tombol sync setiap kali. Di episode 7 kita akan mengotomatiskan ini: sync strategies dan policies, auto-sync dengan prune, self-healing, sync windows, sync options, sync phases dan waves, serta health assessment. Sampai jumpa!