ArgoCD
GitOps
Kubernetes
DevOps
Continuous Delivery
ArgoCD ile GitOps: 2026'da Kubernetes Deployment'ı Nasıl Yapılır?
18 Şubat 2026
Alesta Web Teknik Ekibi
~12 dakika okuma
Modern yazılım dünyasında bir şeyin çok net hale geldiğini görüyoruz: elle yapılan deployment'lar artık kabul görmüyor. Her environment için farklı komutlar çalıştırmak, "acaba staging ile prod aynı mı?" diye terlemek, gece yarısı rollback paniklerine girmek — bunlar artık DevOps ekiplerinin kabul etmediği senaryolar. 2026 itibarıyla bu sorunların çözümü GitOps ve onun en popüler aracı olan ArgoCD üzerinden konuşuluyor.
Alesta Web olarak müşteri projelerinde ArgoCD'yi aktif olarak kullanıyoruz ve bu rehberde sıfırdan production-ready bir GitOps pipeline'ı nasıl kurarsınız, ApplicationSet ile multi-cluster yönetimi nasıl yaparsınız, sık yapılan hataları nasıl önlersiniz — bunların hepsini ele alacağız.
Bu rehberde ne öğreneceksiniz? ArgoCD kurulumu, GitOps temel prensipleri, App of Apps pattern, ApplicationSet ile çoklu ortam yönetimi, Helm/Kustomize entegrasyonu, secrets yönetimi, sync wave stratejileri ve production best practices.
GitOps Nedir ve Neden Önemlidir?
GitOps, 2017'de Weaveworks tarafından tanımlanmış bir operasyon modelidir. Özü şu: Git reponuz, cluster'ınızın tek gerçek kaynağıdır (single source of truth). İstediğiniz her şey YAML ya da JSON olarak Git'e yazılır; bir araç sürekli olarak cluster'ın bu tanımla uyumlu kalmasını sağlar. Bu araç ArgoCD'dir.
Geleneksel CI/CD'de Jenkins ya da GitHub Actions, cluster'a doğrudan kubectl apply komutu gönderir. Push-based denen bu modelde pipeline, cluster'a erişim yetkisine sahip olmak zorundadır. GitOps'ta ise tam tersi: cluster, repo'yu kendisi izler ve değişiklikleri kendisi çeker (pull-based). Bu fark küçük gibi görünse de güvenlik açısından devrimseldir.
| Özellik |
Geleneksel CI/CD |
GitOps (ArgoCD) |
| Deployment tetikleyicisi |
Pipeline push eder |
Cluster pull eder |
| Cluster erişimi |
CI sisteminde kubeconfig |
Sadece ArgoCD'de |
| Drift tespiti |
Manuel ya da yok |
Otomatik, sürekli |
| Rollback |
Pipeline yeniden tetiklenir |
Git revert = anında rollback |
| Audit log |
CI sisteminde dağınık |
Git history = tam kayıt |
| Multi-cluster |
Karmaşık, elle yönetim |
ApplicationSet ile otomatik |
ArgoCD Nedir? Neden Bu Kadar Popüler?
ArgoCD, CNCF (Cloud Native Computing Foundation) bünyesinde graduated statüsünde bir proje. GitHub'da 18.000'i aşkın yıldıza sahip ve 2026 itibarıyla en sık kullanılan GitOps aracı konumunda. Rakibi FluxCD'nin tersine, ArgoCD güçlü bir web arayüzüyle geliyor — bu da özellikle ekip içi iletişim ve görselleştirme açısından büyük avantaj sağlıyor.
Alesta Web'in müşteri projelerinde ArgoCD'yi tercih etmesinin birkaç temel sebebi var: Canlı sync durumu takibi, Helm ve Kustomize desteğinin ootb (out of the box) gelmesi, SSO entegrasyonu, RBAC granülerliği ve özellikle ApplicationSet ile onlarca uygulamayı tek template'ten yönetebilmek.
2026 İstatistiği: CNCF anketine göre kuruluşların %84'ü Kubernetes kullanıyor ya da değerlendiriyor. Bu kuruluşların giderek artan bölümü ArgoCD'yi standart CD aracı olarak benimsemiş durumda.
ArgoCD Kurulumu (Production-Ready)
Hızlı bir test için standalone kurulum yeterlidir, ama production için HA (High Availability) kurulum şarttır. Aşağıda her iki senaryo da gösterilmiştir.
1. Namespace ve Temel Kurulum
kubectl create namespace argocd
kubectl apply -n argocd -f \
https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f \
https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
kubectl get pods -n argocd
kubectl get svc -n argocd
2. ArgoCD CLI Kurulumu
curl -sSL -o argocd-linux-amd64 \
https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
argocd version
3. İlk Giriş ve Şifre Değiştirme
argocd admin initial-password -n argocd
kubectl port-forward svc/argocd-server -n argocd 8080:443
argocd login localhost:8080
argocd account update-password
Güvenlik Uyarısı: Production'da ArgoCD UI'ı doğrudan internete açmayın. Bir Ingress + TLS sertifikası ya da VPN arkasında tutun. SSO (Dex, Okta, GitHub OAuth) entegrasyonunu mutlaka yapılandırın.
İlk Uygulamanızı Deploy Etmek
ArgoCD'de bir uygulamayı tanımlamak için Application adında bir Kubernetes custom resource kullanırsınız. Bu resource, "hangi Git repo'sundaki hangi path'i, hangi cluster'daki hangi namespace'e deploy et" sorusunu yanıtlar.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
labels:
app.kubernetes.io/name: my-app
team: backend
spec:
project: default
source:
repoURL: https://github.com/myorg/my-app-config
targetRevision: main
path: kubernetes/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
kubectl apply -f app.yaml
argocd app get my-app
argocd app sync my-app
argocd app wait my-app
App of Apps Pattern: GitOps'u Ölçeklendirmek
Birden fazla uygulamanız olduğunda her biri için ayrı ayrı Application manifest'i oluşturmak yerine "App of Apps" pattern kullanılır. Bu yaklaşımda bir "root" Application, diğer tüm Application'ları yönetir. Böylece ArgoCD'nin kendi konfigürasyonu da Git'te saklanmış olur.
Alesta Web projelerinde bu pattern'i standart olarak kullanıyoruz: bir apps/ dizini altında her servis için ayrı bir Application yaml, bir de bunları yöneten root Application. Yeni bir servis eklemek istediğinizde tek yapmanız gereken apps/ dizinine yeni bir yaml eklemek ve commit atmak.
gitops-repo/
├── apps/
│ ├── root-app.yaml
│ ├── frontend.yaml
│ ├── backend-api.yaml
│ ├── worker.yaml
│ └── monitoring.yaml
├── kubernetes/
│ ├── frontend/
│ ├── backend-api/
│ ├── worker/
│ └── monitoring/
└── helm-charts/
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/gitops-repo
targetRevision: HEAD
path: apps
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
ApplicationSet ile Multi-Cluster ve Multi-Environment Yönetimi
ApplicationSet, ArgoCD'nin en güçlü özelliklerinden biridir. Tek bir template tanımından dinamik olarak onlarca Application üretebilirsiniz. 2026'da birden fazla ortam (dev, staging, prod) ya da birden fazla cluster yöneten ekiplerin olmazsa olmazı haline geldi.
Alesta Web'de müşteri projelerinde genellikle üç environment bulunur. ApplicationSet sayesinde bu üç ortamı tek bir YAML dosyasıyla yönetiyoruz. Yeni bir environment eklemek istediğinizde sadece generators listesine bir satır eklemeniz yeterli.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: my-app-environments
namespace: argocd
spec:
generators:
- list:
elements:
- env: dev
cluster: dev-cluster
values_file: values-dev.yaml
- env: staging
cluster: staging-cluster
values_file: values-staging.yaml
- env: production
cluster: prod-cluster
values_file: values-prod.yaml
template:
metadata:
name: 'my-app-{{env}}'
labels:
env: '{{env}}'
spec:
project: '{{env}}'
source:
repoURL: https://github.com/myorg/my-app-config
targetRevision: main
path: helm/my-app
helm:
valueFiles:
- '{{values_file}}'
destination:
server: '{{cluster}}'
namespace: my-app
syncPolicy:
automated:
prune: true
selfHeal: '{{env}} == production ? false : true'
İpucu: Production ortamında selfHeal: false ve automated.prune: false ayarlarını değerlendirin. Manual onay gerektiren bir PR workflow'u ile production'a güvenli deployment yapabilirsiniz.
Helm ve Kustomize Entegrasyonu
ArgoCD, Helm chart'larını ve Kustomize overlay'lerini doğrudan destekler. Çoğu ekibin ayrı bir Helm templating adımı çalıştırmasına gerek yoktur — ArgoCD sync sırasında bunu otomatik olarak halleder.
Helm ile Uygulama Tanımı
spec:
source:
repoURL: https://github.com/myorg/my-app-config
targetRevision: main
path: helm/my-app
helm:
releaseName: my-app
valueFiles:
- values.yaml
- values-production.yaml
values: |
image:
tag: "1.5.2"
replicaCount: 3
resources:
requests:
memory: "256Mi"
cpu: "100m"
Kustomize ile Uygulama Tanımı
spec:
source:
repoURL: https://github.com/myorg/my-app-config
targetRevision: main
path: kubernetes/overlays/production
kustomize:
namePrefix: prod-
commonLabels:
env: production
Sync Waves ile Sıralı Deployment
Birden fazla kaynağın belirli bir sırayla uygulanması gerektiğinde — örneğin önce namespace ve configmap, sonra deployment, en son ingress — sync wave annotation'ı kullanılır. Bu özellik özellikle veritabanı migration'larını API deployment'ından önce çalıştırmanız gerektiğinde hayat kurtarır.
Alesta Web'in bir müşteri projesinde migration job'ları, API pod'larından önce çalışması gerekiyordu. Sync wave bunu YAML düzeyinde garanti altına aldı, başka bir CI/CD mantığına gerek kalmadı.
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
annotations:
argocd.argoproj.io/sync-wave: "-1"
---
apiVersion: batch/v1
kind: Job
metadata:
name: db-migration
annotations:
argocd.argoproj.io/sync-wave: "0"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
annotations:
argocd.argoproj.io/sync-wave: "1"
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
annotations:
argocd.argoproj.io/sync-wave: "2"
Secrets Yönetimi: En Kritik Konu
GitOps'ta en sık sorulan soru şudur: "Secret'larımı Git'e koyamam, ama her şeyin Git'te olması gerekiyor — ne yapayım?" 2026'da bu sorunun iki yaygın cevabı var: Sealed Secrets ve External Secrets Operator.
Sealed Secrets Yaklaşımı
Bitnami'nin Sealed Secrets aracı, secret'larınızı cluster'a özgü bir public key ile şifrelemenizi sağlar. Şifreli versiyonu (SealedSecret) Git'e commitleyebilirsiniz — cluster dışında kimse çözemez.
helm repo add sealed-secrets \
https://bitnami-labs.github.io/sealed-secrets
helm install sealed-secrets -n kube-system \
--set-string fullnameOverride=sealed-secrets-controller \
sealed-secrets/sealed-secrets
kubectl create secret generic my-secret \
--from-literal=DB_PASSWORD=supersecret \
--dry-run=client -o yaml | \
kubeseal --format yaml > my-sealed-secret.yaml
git add my-sealed-secret.yaml
git commit -m "Add sealed database credentials"
External Secrets Operator Yaklaşımı
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-credentials
spec:
refreshInterval: 1h
secretStoreRef:
kind: ClusterSecretStore
name: aws-secrets-manager
target:
name: db-credentials
creationPolicy: Owner
data:
- secretKey: DB_PASSWORD
remoteRef:
key: production/myapp/db
property: password
Öneri: HashiCorp Vault entegrasyonu için ESO (External Secrets Operator) mükemmel çalışıyor. Vault zaten altyapınızda varsa ESO'yu tercih edin; yoksa Sealed Secrets daha az karmaşıklık getirir.
ArgoCD RBAC ile Takım Yönetimi
Büyük organizasyonlarda farklı takımların farklı uygulamalara erişimi olması gerekir. ArgoCD'nin Projects ve RBAC sistemi bunu zarif biçimde çözer.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: role:readonly
policy.csv: |
p, role:backend-team, applications, sync, backend-project/*, allow
p, role:backend-team, applications, get, backend-project/*, allow
p, role:backend-team, applications, update, backend-project/*, allow
p, role:frontend-team, applications, get, frontend-project/*, allow
p, role:frontend-team, applications, sync, frontend-project/*, allow
g, platform-team, role:admin
g, myorg:backend, role:backend-team
g, myorg:frontend, role:frontend-team
g, myorg:platform, role:admin
Monitoring ve Alerting: Prometheus + Grafana Entegrasyonu
ArgoCD, Prometheus metriklerini varsayılan olarak /metrics endpoint'inden expose eder. Bunları scrape eden bir Prometheus stack ve Grafana ile ArgoCD'nin tüm sync durumlarını, uygulama sağlığını ve hata oranlarını izleyebilirsiniz.
Alesta Web olarak müşterilere önerdiğimiz alerting kuralları şunlar: sync başarısız olduğunda, uygulama "Degraded" durumuna geçtiğinde veya 30 dakikadan uzun süredir "Progressing" durumundaysa otomatik alarm gönder. Bu üç kural, deployment sorunlarının %90'ını erkenden yakalar.
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: argocd-alerts
namespace: monitoring
spec:
groups:
- name: argocd
rules:
- alert: ArgoCDAppNotSynced
expr: argocd_app_info{sync_status!="Synced"} == 1
for: 10m
labels:
severity: warning
annotations:
summary: "ArgoCD app {{ $labels.name }} is not synced"
- alert: ArgoCDAppUnhealthy
expr: argocd_app_info{health_status!="Healthy"} == 1
for: 5m
labels:
severity: critical
annotations:
summary: "ArgoCD app {{ $labels.name }} is unhealthy"
ArgoCD vs FluxCD: 2026'da Hangisini Seçmeli?
Bu soruyu Alesta Web'e en sık soran müşterilerimiz oluyor. Kısa cevap: çoğu ekip için ArgoCD daha iyi bir başlangıç noktası. Uzun cevap ise bağlama göre değişir.
ArgoCD'yi tercih edin: Ekibinizde Kubernetes konusunda farklı yetkinlik seviyeleri varsa, görsel bir dashboard ekip koordinasyonunu kolaylaştıracaksa, hızlı onboarding önemliyse. FluxCD'yi tercih edin: Saf Kubernetes-native yaklaşım istiyorsanız, her şeyin CRD olmasını tercih ediyorsanız, UI gereksiz görünüyorsa ve GitOps purism arıyorsanız.
| Kriter |
ArgoCD |
FluxCD |
| Web UI |
Kapsamlı, güçlü |
Yok (üçüncü parti) |
| GitHub Stars |
~18.000+ |
~6.500+ |
| Öğrenme eğrisi |
Orta |
Dik |
| Multi-cluster |
ApplicationSet ile güçlü |
Native Flux controller |
| Helm desteği |
Native |
Native (HelmRelease CRD) |
| CNCF statüsü |
Graduated |
Graduated |
Production Best Practices: Alesta Web Checklist
Alesta Web ekibi olarak production'a geçmeden önce mutlaka kontrol ettiğimiz maddeleri paylaşıyoruz. Bu listeyi alestaweb.com üzerinden de paylaştığımız proje şablonlarına ekliyoruz.
1 HA Kurulum: ArgoCD'yi en az 2 replica ile çalıştırın. Single point of failure kabul edilemez.
2 SSO Entegrasyonu: Dex, GitHub OAuth ya da Okta ile SSO zorunlu. Başlangıç şifresi kullanımı production'da yasaklı.
3 RBAC: En az yetki prensibi (least privilege). Her takım sadece kendi Project'ine erişebilmeli.
4 Secrets Yönetimi: Düz secret'ları Git'e kesinlikle eklemeyin. Sealed Secrets ya da ESO kullanın.
5 Production selfHeal: Production'da selfHeal dikkatli değerlendirin. Bazı durumlarda manuel onay daha güvenlidir.
6 Image policy: latest tag kullanmayın. Her zaman spesifik bir image tag (veya digest) kullanın.
7 Notification: ArgoCD Notifications ile Slack/Teams/PagerDuty entegrasyonu yapın.
8 Backup: ArgoCD konfigürasyonunu (Application CR'ları dahil) Git'te tutun ve velero ile yedekleyin.
Gerçek Dünya Örneği: Alesta Web Müşteri Vakası
Bir e-ticaret müşterimizin altyapısını ArgoCD ile yönetmeye başlamadan önce şu sorunlar vardı: Deployment'lar el ile yapılıyor, hangi version'ın nerede çalıştığı bilinmiyordu, staging ve prod ortamları arasında konfigürasyon farklılıkları oluşuyordu, ve rollback ortalama 45 dakika alıyordu.
Alesta Web'in ArgoCD kurulumundan 3 ay sonra: Deployment süresi 45 dakikadan 3 dakikaya düştü, rollback artık bir Git revert ve 90 saniyelik sync işlemi, tüm ortamlar aynı Helm chart'tan türetiliyor, prod ile staging arası konfigürasyon sapması sıfır, ve takım deployment yapmaktan korkmaktan çıkıp özgürce feature ship edebilir hale geldi.
Sonuç: GitOps sadece bir araç değil, bir kültür değişimi. Altyapınızı kod gibi yönetmek, denetlenebilir, tekrarlanabilir ve güvenilir deployment'ların temelidir.
Sık Yapılan Hatalar ve Çözümleri
Hata 1 — latest tag kullanımı: image: myapp:latest kullandığınızda ArgoCD sync değişikliği fark edemez. Her deployment için benzersiz bir tag kullanın (git SHA, semver).
Hata 2 — Secret'ları plain text commit etmek: Bu büyük bir güvenlik açığıdır. Kubeseal ya da ESO kullanmadan secret kesinlikle Git'e gitmemeli.
Hata 3 — Tek repo'ya her şeyi koymak: App kodu ve GitOps config'i ayrı repolar olmalı. App repo'su build tetikler, config repo'su deploy tetikler. Bu ayrım audit ve güvenlik için kritiktir.
Hata 4 — RBAC ihmal etmek: Herkesin admin yetkisi olduğu ArgoCD kurulumları güvenlik felaketidir. En az bir admin ve read-only roller tanımlayın, takımlara proje bazlı erişim verin.
Sonuç: GitOps 2026'da Artık Opsiyonel Değil
2026 itibarıyla ArgoCD ve GitOps metodolojisi, Kubernetes üzerinde çalışan ekipler için fiili standart haline gelmiş durumda. CNCF verilerine göre Kubernetes kullanan kuruluşların giderek artan bir oranı GitOps prensiplerini benimsemiş. Bu eğilim önümüzdeki yıllarda da ivme kazanarak devam edecek.
Alesta Web olarak müşterilerimize şunu söylüyoruz: ArgoCD'yi kurmak bir günlük iş, ama getirdiği güven, hız ve denetlenebilirlik kümülatif olarak kariyerinizdeki en iyi yatırımlardan biri olacak. Declarative deployment, drift detection, tek tuşla rollback — bunlar artık lüks değil, temel gereksinim.
Eğer ArgoCD kurulumu, GitOps pipeline tasarımı ya da multi-cluster yönetimi konusunda yardıma ihtiyacınız varsa Alesta Web ekibi her zaman burada. alestaweb.com üzerinden bizimle iletişime geçin.