İçeriğe geç
6 dk okuma DevOps

ArgoCD Kurulumu: Kubernetes GitOps Sürekli Dağıtım

ArgoCD: Kubernetes GitOps Sürekli Dağıtım

Modern Kubernetes ortamlarında uygulama dağıtımı, geleneksel yöntemlerle yönetilmesi giderek zorlaşan bir süreç haline gelmiştir. ArgoCD, bu zorluğu çözmek için tasarlanmış açık kaynaklı bir GitOps sürekli dağıtım aracıdır. ArgoCD, Kubernetes cluster'ınızı Git deponuzdaki manifest dosyalarıyla senkronize tutarak, declarative infrastructure yaklaşımını hayata geçirir ve deployment süreçlerini otomatikleştirir.

GitOps metodolojisinin temelinde, tüm altyapı ve uygulama konfigürasyonlarının Git deposunda tutulması yatar. Bu yaklaşım, değişikliklerin izlenebilirliğini, geri alınabilirliğini ve işbirliğini önemli ölçüde artırır. ArgoCD, bu Git deposundaki değişiklikleri sürekli izler ve cluster'daki gerçek durumu istenen durumla eşleştirir. Herhangi bir sapma tespit edildiğinde, otomatik olarak veya manuel onayla cluster'ı istenen duruma geri getirir.

Bu makalede ArgoCD'nin temel kavramlarını, kurulum sürecini, yapılandırma detaylarını ve production ortamları için en iyi uygulamaları detaylı olarak inceleyeceğiz.

ArgoCD'nin Temel Özellikleri

ArgoCD, Kubernetes için tasarlanmış bir GitOps CI/CD aracı olarak birçok güçlü özellik sunar. Bu özellikler, enterprise ortamlarında güvenilir ve ölçeklenebilir deployment pipeline'ları oluşturmayı mümkün kılar.

İlk olarak, ArgoCD'nin declarative deployment yaklaşımını anlamak önemlidir. ArgoCD, Kubernetes Application custom resource tanımlarını kullanarak, hangi uygulamaların hangi cluster'a dağıtılacağını ve hangi parametrelerin kullanılacağını belirtirsiniz. Bu tanımlar, tıpkı Kubernetes manifestleri gibi, bir Git deposunda saklanır ve versiyonlanır. ArgoCD bu manifestleri okuyarak, cluster'daki uygulamaları otomatik olarak oluşturur, günceller veya siler.

ArgoCD'nin bir diğer güçlü özelliği, multi-tenancy desteğidir. Tek bir ArgoCD instance'ı birden fazla ekip ve proje yönetebilir. Her ekip, kendi uygulamalarını izole bir şekilde yönetebilirken, cluster yöneticileri merkezi politikalar uygulayabilir.

Application ve AppProject Kavramları

ArgoCD'nin iki temel yapı taşı Application ve AppProject'tir. Application, bir Kubernetes manifest kümesini ve bu manifestlerin nereye dağıtılacağını tanımlar. Her Application, kaynak Git deposu, hedef cluster, namespace ve sync politikalarını belirtir. AppProject ise birden fazla Application'ı gruplayarak, kaynak kısıtlamaları, hedef cluster'lar ve izinler tanımlamanıza olanak tanır.

ArgoCD Kurulumu

ArgoCD'yi Kubernetes cluster'ınıza kurmak için birden fazla yöntem mevcuttur. En yaygın ve önerilen yöntem, manifest dosyaları kullanarak direkt kurulum yapmaktır.

Standart Kurulum

ArgoCD'yi standart manifest dosyalarıyla kurmak için aşağıdaki adımları izleyin. İlk olarak argocd namespace oluşturun:

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

Bu komut, ArgoCD'nin tüm bileşenlerini argocd namespace'inde oluşturur. Tüm pod'ların Running durumuna geçmesini bekleyin:

kubectl get pods -n argocd

Ardından ArgoCD server'a erişim için port forwarding ayarlayın:

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

Tarayıcınızda https://localhost:8080 adresine giderek ArgoCD arayüzüne erişebilirsiniz. İlk giriş için admin parolasını alın:

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

LoadBalancer ile Erişim

Production ortamlarında port forwarding yerine LoadBalancer servisi kullanmak daha uygundur:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

Yüksek Erişilebilirlik Kurulumu

Production ortamları için HA kurulumu önerilir:

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

ArgoCD Uygulama Oluşturma

ArgoCD'de uygulama oluşturmanın birden fazla yöntemi vardır: CLI, arayüz veya declarative yöntem.

CLI ile Uygulama Oluşturma

ArgoCD CLI aracını kullanarak hızlıca bir uygulama oluşturabilirsiniz. İlk olarak ArgoCD CLI'yi kurun:

brew install argocd
# veya
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

Ardından ArgoCD server'a giriş yapın:

argocd login localhost:8080 --username admin --password $PASSWORD

Örnek bir uygulama oluşturun:

argocd app create guestbook \
  --repo https://github.com/argoproj/argocd-example-apps.git \
  --path guestbook \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

Declarative Yöntem

Production ortamlarında declarative yöntem daha tercih edilir:

kubectl apply -f - 

ApplicationSet ile Toplu Dağıtım

Birden fazla environment veya tenant'a aynı uygulamayı dağıtmak için ApplicationSet kullanışlıdır:

kubectl apply -f - 

Sync Policy ve Drift Detection

ArgoCD'nin en güçlü özelliklerinden biri, cluster'daki mevcut durum ile Git deposundaki istenen durum arasındaki farkları tespit edebilmesidir.

Otomatik Sync

Otomatik sync, Git deposundaki değişiklikler tespit edildiğinde ArgoCD'nin otomatik olarak cluster'ı güncellemesini sağlar:

syncPolicy:
  automated:
    prune: true      # Git'de silinen kaynakları cluster'dan sil
    selfHeal: true   # Manuel değişiklikleri Git'deki haline geri getir
EOF

Manuel Sync

Production ortamlarında manuel onay gerekebilir:

syncPolicy:
  automated: null
  retry:
    limit: 5
    backoff:
      duration: 5s
      factor: 2
      maxDuration: 3m

En İyi Uygulamalar

Production ortamlarında ArgoCD kullanırken dikkat edilmesi gereken önemli best practice'ler vardır.

Config ve Source Code Ayrımı

Kubernetes manifestlerini uygulama kaynak kodundan ayrı bir Git deposunda tutmak önerilir. Bu yaklaşım, konfigürasyon değişikliklerinin CI pipeline'ını tetiklemesine gerek kalmaz.

Repository Yapılandırması

Git repository yapısı için base ve overlay klasör yapısı önerilir:

gitops-repo/
├── base/
│   ├── deployment.yaml
│   └── service.yaml
└── overlays/
    ├── staging/
    │   └── kustomization.yaml
    └── production/
        └── kustomization.yaml

Secrets Yönetimi

Git'de secrets saklamak güvenlik riski oluşturur. External secrets operator, Sealed Secrets veya ArgoCD'nin encrypted secrets desteği kullanılabilir.

RBAC Yapılandırması

ArgoCD'nin yerleşik RBAC özelliği, kullanıcı ve ekip izinlerini yönetmenizi sağlar:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.csv: |
    g, dev-team, role:developer
    g, ops-team, role:admin
    p, role:developer, applications, get, myapp/*, allow
    p, role:admin, *, *, *, allow

Resource Kısıtlamaları

AppProject kaynakları, hangi kaynakların deploy edilebileceğini kısıtlamak için kullanılır:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: restricted-project
  namespace: argocd
spec:
  sourceRepos:
  - https://github.com/myorg/*
  destinations:
  - server: https://kubernetes.default.svc
    namespace: restricted-ns
  clusterResourceWhitelist:
  - group: ""
    kind: Namespace
EOF

Sonuç

ArgoCD, Kubernetes ortamlarında GitOps metodolojisini hayata geçiren olgun ve güçlü bir araçtır. Declarative deployment yaklaşımı, otomatik sync, drift detection ve multi-tenancy desteği, ArgoCD'yi enterprise Kubernetes deployment'ları için ideal bir seçim haline getirir.

Doğru yapılandırma ve en iyi uygulamalarla, ArgoCD cluster'ınızın CI/CD pipeline'larını önemli ölçüde iyileştirebilir, deployment güvenilirliğini artırabilir ve GitOps disiplinini koruyabilirsiniz.