Bulut-native altyapının hızla evrilen manzarasında, emir temelli yönetimden beyan temelli (declarative) yönetime geçiş sadece bir trend değil, bir zorunluluktur. Kümeler karmaşıklaştıkça ve dağıtım sıklığı arttıkça, manuel müdahaleler önemli bir darboğaz ve "yapılandırma kayması"nın kaynağı haline gelir. İşte burada GitOps, altın standart olarak ortaya çıkar. Beyan temelli altyapının dayanıklılığını Git'in işbirliği avantajlarıyla birleştirerek, kuruluşlar sağlam, denetlenebilir ve otomatik uygulama dağıtımı elde edebilir. Mevcut çeşitli araçlar arasında, Argo CD, Kubernetes'e sürekli dağıtım için fiili standart olarak yer edinmiştir.
Bu yazı, Argo CD'nin pratik uygulamasını ele almakta; canlı küme durumunuzun, Git'te tanımlanan istenen durumla her zaman eşleşmesini sağlayan bir GitOps iş akışı kurma sürecinde, orta düzeyden ileri düzey geliştiricilere rehberlik etmektedir.
Argo CD ile GitOps Paradigmasını Anlamak
GitOps, uygulama geliştirmede kullanılan DevOps en iyi uygulamalarını (sürüm kontrolü, işbirliği, uyumluluk ve CI/CD gibi) alır ve bunları altyapı otomasyonuna uygular. Argo CD, küreyi izleyen ve meydana gelen herhangi bir değişikliği dengeleyen (reconcile eden) sürekli dağıtım aracıdır. Geleneksel CI/CD hatlarının değişiklikleri kümeye "itmesi" (push) aksine, Argo CD "çekme" (pull) modeli üzerinde çalışır. Git deposundaki değişiklikleri sürekli olarak izler ve küreyi, o depoda saklanan manifest dosyalarıyla eşleşecek şekilde otomatik olarak senkronize eder.
Bu çekme tabanlı yaklaşım birkaç avantaj sunar:
- Güvenlik: Küme düğümlerinin kaynak kontrol sistemlerine dışarıdan yazma erişimine gerek yoktur.
- Denetlenebilirlik: Her değişiklik Git commit'leri aracılığıyla izlenir; kimin neyi ve ne zaman değiştirdiğine dair net bir geçmiş sağlar.
- Kurtarma: Felaket düzeyinde bir arıza durumunda, karmaşık bir CI/CD geçmişinde geri dönmek yerine, önceki bir Git commit'ine geri dönmek genellikle daha basittir.
Adım 1: Kümenize Argo CD'yi Yükleme
GitOps yolculuğunuzdaki ilk adım, Argo CD'yi yüklemektir. Bunu yapmanın en verimli yolu, Kubernetes için paket yöneticisi olan Helm'i kullanmaktır. Helm'in yüklü olduğundan ve hedef kümenizle etkileşime girmek üzere yapılandırıldığından emin olun. Argo CD için kaynakları izole ve yönetilebilir tutmak adına özel bir namespace oluşturacağız.
İlk olarak, namespace'i oluşturun:
kubectl create namespace argocd
Ardından, Argo CD manifest'lerini uygulayın. Bir üretim ortamında, güncellemeleri daha etkili bir şekilde yönetmek için genellikle Helm kullanırsınız; ancak ilk kurulum için YAML manifest'i doğrudan ve basittir:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Yükleme tamamlandıktan sonra, Argo CD sunucu podlarının çalıştığını doğrulayın:
kubectl get pods -n argocd
Adım 2: Argo CD Sunucusunu Erişime Açma
Argo CD ile etkileşim kurmak için web arayüzüne ve API'ye erişiminiz gerekir. Varsayılan olarak hizmet yalnızca küme içinde erişilebilirdir. Yerel geliştirme veya test için port yönlendirme (port-forwarding) en hızlı yöntemdir:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Ardından https://localhost:8080 adresine gidebilirsiniz. İlk yönetici şifresi küme sırrından (secret) alınabilir:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
Adım 3: Git Deponuzu Bağlama
Argo CD çalışır durumda olduğuna göre, bir sonraki kritik adım, onu gerçeklik kaynağınız olan Git deponuza bağlamaktır. Bu depo, uygulamanızın istenen durumunu tanımlayan Kubernetes manifest'lerini (YAML dosyaları) veya Helm chart'larını içermelidir.
Argo CD UI'da Ayarlar > Depolar bölümüne gidin. HTTPS ile Repo Bağla (veya güvenlik gereksinimlerinize bağlı olarak SSH) düğmesine tıklayın. Deponuzun HTTPS URL'sini sağlamanız gerekecektir. Depo kimlik doğrulaması gerektiriyorsa, kimlik bilgilerini içeren bir Secret oluşturmanız ve bağlantı sürecinde bunu ilişkilendirmeniz gerekir. Kamuya açık depolar için bu adım anında gerçekleşir.
Adım 4: Bir Uygulama Kaynağı Oluşturma
Depoyu bağlamak yeterli değildir; Argo CD'ye deponun hangi kısımlarını izlemesi ve senkronize etmesi gerektiğini bildirmelisiniz. Bu, bir Application özel kaynak tanımı (CRD) aracılığıyla yapılır. Bunu UI üzerinden oluşturabilirsiniz, ancak en iyi uygulama olarak bunu kod olarak tanımlamaktır.
Standart Kubernetes manifest'lerini içeren bir dizine işaret eden bir Application.yaml örneği aşağıdadır:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/your-repo.git
targetRevision: main
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
Bu yapılandırmanın temel bileşenleri şunlardır:
- source: Manifest'lerin Git'te nerede bulunduğunu tanımlar.
- destination: Dağıtımın yapılacağı küme ve namespace'i belirtir.
- syncPolicy: Bu, otomasyon motorudur.
automated.prunedeğerinitrueolarak ayarlamak, Git'ten silinen kaynakların kümeden de kaldırılmasını sağlar.selfHeal, küreye doğrudan yapılan manuel değişikliklerin, Git ile eşleşmesi için üzerine yazılmasını sağlar.
Bu manifest'i kümenize uygulayın:
kubectl apply -f application.yaml
Sonuç: Beyan Temelli Altyapının Gücü
Argo CD ile GitOps uygulamak, ekiplerin Kubernetes kümlerini yönetme şeklini dönüştürür. Altyapıyı Git'e bağlayarak ve senkronizasyonu otomatikleştirerek insan hatasını azaltır, güvenliği artırır ve dağıtım döngülerini hızlandırırsınız. İlk kurulum, güvenlik bağlamları ve ağ yapılandırması konusunda dikkatli olmayı gerektirse de, kararlı, denetlenebilir ve kendini iyileştiren bir altyapının uzun vadeli faydaları tartışmasızdır. Ölçeklendikçe, başarılı bir derleme gerçekleştiğinde deponuzdaki etiketleri veya dalları otomatik olarak güncellemek için Argo CD'yi CI/CD hatlarıyla entegre etmeyi düşünün; bu da tamamen otomatik, Git destekli yazılım teslimatının döngüsünü tamamlar.