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.