DevOps and Infrastructure

ArgoCD ile GitOps Uygulaması: Otomatik Kubernetes Dağıtımları ve Kayma Tespiti

Modern altyapı yönetimi, manuel komut satırı işlemlerinden bildirimsel, kod tabanlı iş akışlarına büyük ölçüde değişti. Bu değişimin kalbinde, altyapı ve uygulama dağıtımı için Git'i tek doğruluk kaynağı olarak kullanan GitOps paradigmaları yer alır. Bu yaklaşımı yaygınlaştıran araçlar arasında, ArgoCD, Kubernetes için sürekli teslimatta endüstri standardı olarak öne çıkar.

Bu kapsamlı kılavuzda, Kubernetes dağıtımlarınızı otomatikleştirmek için ArgoCD'nin nasıl uygulanacağını keşfedeceğiz. Temel kavramları ele alacak, pratik uygulama adımlarını gösterecek ve ArgoCD'nin yerel kayma (drift) tespit yeteneklerinin, küme durumunuzun her zaman Git deposunuzla eşleşmesini nasıl sağladığını tartışacağız.

GitOps Paradigmasını Anlamak

Geleneksel CI/CD boru hatları genellikle "push" modeline dayanır; burada bir build sunucusu Docker imajlarını doğrudan bir kayıt defterine iter ve ardından dağıtımları komut dosyaları aracılığıyla tetikler. Etkili olsa da, bu yaklaşım yapılandırma kaymasına yol açabilir; bu durumda kümenin gerçek durumu, sürüm kontrolünde saklanan istenen durumdan sapar.

GitOps bu modeli tersine çevirir. "Pull" mekanizmasıyla çalışır. ArgoCD ajanı Kubernetes kümesinin içinde çalışır ve Git deposunu sürekli olarak izler. Bir geliştirici depoya bir değişiklik yaptığında (örneğin bir imaj etiketini günceller), ArgoCD değişikliği algılar ve kümeyi istenen duruma eşlemek için senkronize eder. Bu şunları sağlar:

  • Git deposu nihai doğruluk kaynağıdır.
  • Tüm değişiklikler Git commit geçmişine denetlenebilir.
  • Kümeye doğrudan yapılan manuel değişiklikler tespit edilir ve otomatik olarak düzeltilebilir.

ArgoCD Kurulumu

ArgoCD ile başlamak basittir. Resmi Helm şablonunu veya sağlanan manifest dosyasını kullanarak kurabilirsiniz. Geliştirme ortamında hızlı bir başlangıç için manifest dosyasını doğrudan uygulayabilirsiniz:

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

Kurulum tamamlandıktan sonra ArgoCD sunucusuna erişmeniz gerekir. Varsayılan olarak bir web arayüzü sunar. Yerel olarak erişmek için port-forwarding yapabilirsiniz:

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

Ardından https://localhost:8080 adresinden arayüze erişebilirsiniz. Başlangıç şifresi şu komut kullanılarak alınabilir:

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

Uygulamaları Tanımlama ve Dağıtımları Otomatikleştirme

ArgoCD'nin temel bileşeni Application kaynağıdır. Bu özel kaynak tanımı (CRD), ArgoCD'ye uygulama kodunuzun nerede olduğunu (Git), hedef durumun ne olduğunu ve hangi kümeye dağıtılacağını söyler.

Bir Nginx uygulaması dağıtmak için basit bir YAML manifest dosyası oluşturalım. Bu dosya, uygulama kodunuzun yanına Git deposunda saklanmalıdır.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/guestbook-app.git
    targetRevision: HEAD
    path: kubernetes/base
  destination:
    server: https://kubernetes.default.svc
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

Bu manifest dosyasındaki temel yapılandırmalar şunlardır:

  • Source (Kaynak): Git deponuzu ve Kubernetes manifest dosyalarını içeren belirli yolu gösterir.
  • Destination (Hedef): Hedef küme ve namespace'i belirtir.
  • Sync Policy (Senkronizasyon Politikası): Bu çok önemlidir. automated.prune: true ayarı, Git'te silinen kaynakların kümeden kaldırılmasını sağlar. selfHeal: true ayarı ise otomatik kayma tespiti ve düzeltmeyi etkinleştirir.

Bu Application.yml dosyasını Git repo'nıza ittiğinizde, ArgoCD yeni kaynağı otomatik olarak algılayacak, senkronize edecek ve uygulamayı Kubernetes kümenize dağıtacaktır.

Kayma Tespitinde Ustalaşmak

ArgoCD'nin en güçlü özelliklerinden biri yapılandırma kaymasını tespit etme yeteneğidir. Kayma, biri Kubernetes kümesinde manuel değişiklikler yaptığında (örneğin kubectl edit kullanarak) ortaya çıkar; bu da canlı durumu Git durumundan farklı hale getirir.

selfHeal: true etkinleştirildiğinde, ArgoCD bu manuel değişiklikleri Git deposuyla eşleşecek şekilde otomatik olarak geri alacaktır. Ancak, yalnızca kayma hakkında bilgilendirilmek için selfHeal: false kullanabilirsiniz. Arayüzde, kaymış uygulamalar sarı veya kırmızı bir durum göstergesiyle görünecektir.

Manuel geçişlerin bazen gerekli olduğu ortamlarda, senkronizasyon politikasında sync waves (senkronizasyon dalgaları) yapılandırabilir veya ignoreDifferences kullanabilirsiniz. Örneğin, replikaların manuel ölçeklendirilmesine izin verirken geri kalan yapılandırmayı zorlamak istiyorsanız, spec.replicas değişikliklerini yok sayabilirsiniz:

spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
    - IgnoreDifferences={"group":"apps","kind":"Deployment","jsonPointers":["/spec/replicas"]}

Üretim İçin En İyi Uygulamalar

  1. Değişmez Altyapı: Canlı kaynakları asla manuel olarak değiştirmeyin. Tüm değişiklikler için Git kullanın.
  2. Branch Koruması: ArgoCD'nin izlediği ana dalına ulaşmadan önce değişiklikleri gözden geçirmek için pull request'leri kullanın.
  3. Çoklu Küme Yönetimi: ArgoCD, birden fazla küme yönetmede mükemmeldir. Küme kayıtları için cluster-secret kullanarak bunları tek bir panelden yönetin.
  4. Gizli Bilgi Yönetimi: Hassas verileri Git'te düz metin olarak saklamaktan kaçının. ArgoCD'nin yerleşik şifreleme özelliğini kullanın veya eklentiler aracılığıyla HashiCorp Vault veya AWS Secrets Manager gibi harici gizli bilgi yöneticileriyle entegrasyon sağlayın.

Sonuç

ArgoCD ile GitOps uygulamak, Kubernetes uygulamalarınızı yönetme şeklinizi dönüştürür. Otomatik dağıtımları ve sağlam kayma tespitini kullanarak insan hatasını azaltır, güvenliği artırır ve altyapınızın durumu konusunda güven kazanırsınız. Daha karmaşık çoklu küme ve çoklu ortam kurulumlarına geçtikçe, ArgoCD hızdan ödün vermeden kontrolü sürdürmek için gereken ölçeklenebilirliği ve görünürlüğü sağlar.

Tek bir dağıtımı otomatikleştirerek küçük başlayın, senkronizasyon politikalarıyla deneyim yapın ve GitOps iş akışınızı kademeli olarak genişletin. Tamamen otomatikleştirilmiş altyapı yönetimine giden yol, harcanan çabaya değerdir.

Share: