DevOps and Infrastructure

ArgoCD ile GitOps Uygulayarak Otomatik Kubernetes Uygulama Dağıtımı

DevOps'un değişen dünyasında, manuel dağıtımlardan tamamen otomatik ve beyan edilebilir altyapıya geçiş, ölçeklenebilir mühendislik ekipleri için standart haline gelmiştir. Bu dönüşümün kalbinde, beyan edilebilir altyapı ve uygulamalar için tek doğruluk kaynağı olarak Git'i kullanan bir operasyonel çerçeve olan GitOps yer alır. Bu paradigmayı kolaylaştıran birçok araç olsa da, ArgoCD Kubernetes ortamlarında sürekli teslimat için de facto standart olarak öne çıkmıştır. Bu yazıda, ArgoCD'yi uygulamanızın teslimat hattını etkili bir şekilde otomatikleştirmek için nasıl uygulayacağınızı keşfedeceğiz.

Temel Felsefeyi Anlamak

Uygulamaya geçmeden önce, GitOps'un temel ilkesini anlamak kritik öneme sahiptir: küme durumu, Git deposunda tanımlanan durumla eşleşmelidir. Değişiklikleri doğrudan kümeye iten geleneksel CI/CD hatlarının aksine, ArgoCD "çekme" (pull) modelinde çalışır. Kubernetes kümenizdeki canlı durumu sürekli olarak izler ve Git depolarınızda tanımlanan istenen durumla karşılaştırır. Bir kayma (drift) tespit edilirse—ister bir yönetici tarafından yapılan manuel bir değişiklik olsun, ister bir yapılandırma hatası—ArgoCD bunu otomatik olarak Git manifestosuyla eşleşecek şekilde düzeltir.

Bu yaklaşım, yapılandırma kaymasını ortadan kaldırır, sırları (secrets) gerekli olana kadar kümeden uzak tutarak güvenliği artırır ve tüm altyapı değişiklikleri için sağlam bir denetim izi sağlar.

Kurulum ve İlk Yapılandırma

Resmi Helm şablonları sayesinde ArgoCD'yi kurmak oldukça basittir. Bir üretim ortamı için, ArgoCD'yi ayrı bir namespace'e (ad alanı) yüklemeniz önerilir. Aşağıda en son kararlı sürümün kurulumunu gösteren komut yer almaktadır:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argocd/stable/manifests/install.yaml

Pod'lar çalıştıktan sonra, sunucu hizmetine port-forwarding yaparak ArgoCD UI'ya erişebilirsiniz:

kubectl port-forward svc/argocd-server -n argocd 8080:443

Giriş yaptıktan sonra (varsayılan kimlik bilgileri admin ve kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d komutuyla alınan otomatik oluşturulan şifredir), uygulamalarınızı tanımlamaya hazırsınız.

Uygulamaları ve Eşzamanlama Politikalarını Tanımlama

ArgoCD'nin temel birimi Application (Uygulama) kaynağıdır. Bu özel kaynak, ArgoCD'ye manifest dosyalarınızı nerede bulacağını, hangi Kubernetes kümesini hedefleyeceğini ve eşzamanlamayı nasıl yöneteceğini söyler. Tipik bir Application manifestosu, kaynak depo URL'sini, hedef revizyonu (dal veya etiket) ve hedef namespace'i içerir.

ArgoCD'nin en güçlü özelliklerinden biri eşzamanlama politikasıdır (sync policy). Git deposu güncellendiğinde uygulamanın otomatik olarak eşzamanlanmasını sağlayacak şekilde yapılandırabilirsiniz. Bu, gerçek Sürekli Teslimatı mümkün kılar. Aşağıda, otomatik eşzamanlama ve kendi kendini iyileştirme (self-healing) özelliği etkinleştirilmiş bir Application manifestosu örneği yer almaktadır:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/myorg/my-repo.git
    targetRevision: main
    path: k8s/base
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

Bu örnekte, prune: true, Git'te tanımlanan kaynakların depodan silinmesi durumunda kümeden kaldırılmasını sağlar; selfHeal: true ise ArgoCD'nin kümeye doğrudan yapılan manuel değişiklikleri geçersiz kılmasına olanak tanır.

Üretim Kullanımı İçin En İyi Uygulamalar

Temel kurulum basit olsa da, üretim düzeyinde GitOps dikkat gerektirir. İlk olarak, birden fazla ortam veya kiracı yönetiyorsanız her zaman uygulama kümelerini (application sets) kullanın. Uygulama Kümeleri, uygulamalar için bir şablon tanımlamanıza ve ortam adı veya bölge gibi parametrelere göre bunları dinamik olarak oluşturmanıza olanak tanır; bu da YAML tekrarını önemli ölçüde azaltır.

İkinci olarak, ArgoCD örneğinizi güvence altına alın. Kimlik doğrulama için OAuth2 veya SAML kullanın, UI'ya erişimi sınırlamak için ağ politikalarını kısıtlayın ve Git depo kimlik bilgilerinizi ArgoCD'nin gizli bilgi yönetimi özelliklerini kullanarak güvenli bir şekilde sakladığınızdan emin olun. Son olarak, ArgoCD'yi Slack veya E-posta hizmetleriyle entegre etmek için bildirimleri (notifications) kullanın. Bir dağıtım başarısız olduğunda veya bir eşzamanlama işlemi tamamlandığında anında uyarı almak, ekibinizin bilgilendirilmesini ve hızlı tepki vermesini sağlar.

Sonuç

ArgoCD ile GitOps uygulamak, Kubernetes yönetimini tepkisel ve hataya yatkın bir süreçten proaktif ve otomatik bir iş akışına dönüştürür. Altyapıyı kod olarak ele alarak ve ArgoCD'nin sürekli uzlaştırma (reconciliation) yeteneklerinden yararlanarak, ekipler daha hızlı yayın döngüleri, artan istikrar ve dağıtım hatlarına dair daha büyük bir güven elde edebilir. Bu yöntemi benimserken, başarı anahtarının sadece araçta değil, aynı zamanda her değişikliğin sürüm kontrolünde, gözden geçirilmesinde ve denetlenebilir olduğu bir kültür oluşturulmasında yattığını unutmayın.

Share: