L17 — GitOps: tek uygulamayı ArgoCD ile Git'ten yönet#
Şimdiye kadar kubectl apply ile elle deploy ettin. GitOps bunu tersine çevirir: Git deposu tek gerçek kaynaktır, cluster ona uyar. Bu lab tek bir uygulamayı ArgoCD ile Git'ten yönetir, sonra elle bir drift yaratıp ArgoCD'nin bunu OutOfSync gösterip düzelttiğini gözlemler. Karmaşık desenler (App-of-Apps, ApplicationSet) yok — önce tek app sağlam çalışsın (bkz. NOT-YET.md).
Gerekenler#
- D1'deki kind cluster,
kubectl. - ArgoCD (kind'a kur):
kubectl create namespace argocd+ resmi install manifesti. - Uygulama manifestlerini koyacağın bir Git deposu (fork/kendi repo'n).
Görev#
- ArgoCD'yi kur ve giriş yap.
- Uygulama manifestlerini Git'e koy.
starter/app/içindeki Deployment+Service'i kendi Git depona koy (ör.apps/lab/yolu). - Application CR'ı yaz (SEN).
starter/application.yaml'daki TODO'ları doldur:repoURLsenin depon,pathmanifest yolu,destinationbu cluster,syncPolicyotomatik (self-heal açık). - Drift yarat. Cluster'da elle değişiklik yap (Git'i değiştirmeden): Auto-sync + self-heal açıksa ArgoCD replica'yı Git'teki değere geri çeker. Kapalıysa
argocd app syncile sen düzelt. Her iki yolu da dene. - Raporla.
report.txt'e:Synced/Healthyçıktısı, drift sonrasıOutOfSyncçıktısı, ve "Git tek gerçek kaynak" ilkesinin bir operasyonel sonucu — elle yapılan değişiklik niçin geri alınır?
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. -
application.yamlbirargoproj.ioApplication;source(repoURL+path),destinationvesyncPolicyiçeriyor. -
report.txtuygulamanınSynced/Healthyolduğunu gösteriyor. -
report.txtelle yaratılan drift'inOutOfSyncgösterildiğini ve düzeltildiğini içeriyor. -
report.txt"Git tek gerçek kaynak"ın bir operasyonel sonucunu anlatıyor.
İpucu (çözüm değil)#
syncPolicy.automated.selfHeal: true→ cluster Git'ten saparsa ArgoCD geri çeker.prune: true→ Git'ten silinen kaynak cluster'dan da silinir.- "OutOfSync" bir hata değil bir teşhis: cluster ile Git ayrıştı demek. Düzeltme ya Git'i güncelle (kalıcı) ya sync et (geçici, drift tekrar gelir).
- Elle
kubectl edityapmak GitOps'ta anti-pattern'dir — değişiklik Git'te yoksa bir sonraki sync'te kaybolur. Bu bilerek böyledir (K06'da yaşayacaksın).
Takılırsan solution/'a bak — ama önce kendin dene.