29.01.2026

GitOps Nedir? Argo CD ile Deploy’u Kodla Yönetin

GitOps nedir, neden önemlidir? Argo CD ile Kubernetes deploy süreçlerini Git üzerinden izlenebilir ve geri alınabilir hale getirin.

GitOps Nedir? Argo CD ile Deploy’u Kodla Yönetin

Meta Description

GitOps nedir? Argo CD ile Kubernetes deploy süreçlerini Git üzerinden yönetin, drift’i yakalayın, rollback’i saniyelere indirin.

Giriş

GitOps, altyapı ve uygulama dağıtımlarını “gerçeğin kaynağı” olarak Git üzerinden yönetme yaklaşımıdır. Ekip büyüdükçe “hangi YAML prod’da?”, “kim neyi deploy etti?”, “neden ortamlar farklı?” soruları çoğalır ve dağıtımlar bir süre sonra kişiye bağlı hale gelir.

Bu yazıda GitOps nedir sorusunu pratik bir çerçevede ele alacağız. Argo CD üzerinden, Kubernetes’e deploy akışını izlenebilir, tekrarlanabilir ve kolay geri alınabilir (rollback) hale getirmek için adım adım bir yol haritası çıkaracağız.

Okumaya değer çünkü: GitOps, sadece “daha havalı deploy” değil; hataları azaltır, denetimi güçlendirir ve release hızını artırırken güvenliği de iyileştirir.


GitOps Nedir? (Kısa Tanım + Mantık)

GitOps, Kubernetes (ve genel olarak altyapı) konfigürasyonunun Git’te tutulduğu ve bir “controller”ın cluster’ı Git’teki istenen duruma otomatik olarak senkronladığı bir modeldir.

Bu modelde:

  • Git = Single Source of Truth (tek doğru kaynak)
  • Değişiklikler PR/MR ile yapılır
  • Cluster’da “elle müdahale” yerine controller uygular
  • Gerçek durum ile istenen durum farklıysa buna configuration drift denir ve sistem bunu yakalar

“Bunu neden yapmalıyım?” Çünkü üretimde olan biteni Git commit’lerine bağlayarak kim/ne zaman/niye sorularını cevaplarsınız ve aynı değişikliği her ortamda aynı şekilde uygularsınız.


GitOps vs Klasik CI/CD: Fark Nerede?

Birçok ekipte CI/CD şu şekilde ilerler: CI pipeline build/test yapar, sonra CD adımı cluster’a “push” eder.

GitOps’ta ise deploy mantığı “push” değil, pull tabanlıdır:

Başlık Klasik CD (Push) GitOps (Pull)
Deploy tetikleme Pipeline cluster’a yazar Cluster Git’ten çeker
Yetki modeli CI sistemine geniş yetki Cluster controller sınırlı yetki
Drift yönetimi Zayıf / manuel Güçlü / otomatik tespit
İzlenebilirlik Pipeline loglarına bağlı Git geçmişi + Argo CD history
Rollback Pipeline + manuel Git revert + sync

Gerçek hayattan örnek:

  • Bir geliştirici prod’da “acil” diye kubectl edit ile değişiklik yapar.
  • 2 gün sonra başka deploy gelince o değişiklik kaybolur.
  • GitOps’ta controller drift’i görür ve ya değişikliği geri alır ya da “OutOfSync” ile alarm üretir.

GitOps’un Temel Bileşenleri (Argo CD Odaklı)

GitOps yaklaşımında genelde şu parçalar bulunur:

1) Git Repo Yapısı

İki yaygın yaklaşım:

  • Mono-repo: app kodu + manifests aynı yerde
  • Config repo (ayrı repo): sadece deploy manifests (özellikle kurumsalda yaygın)

Önerilen basit yapı:

repo/
  apps/
    my-service/
      base/
      overlays/
        dev/
        prod/

2) Manifest Yönetimi (Kustomize/Helm)

  • Kustomize: aynı base’i farklı ortam overlay’leriyle yönetmek için ideal
  • Helm: paket yönetimi ve parametreli kurulumlar için güçlü

3) GitOps Controller (Argo CD)

Argo CD:

  • Git repo’yu izler
  • Cluster’a uygular
  • Drift’i gösterir
  • RBAC/SSO ile erişimi yönetir
  • Sync/rollback işlemlerini kolaylaştırır

Adım Adım: Argo CD ile GitOps Kurulumu (Örnek Akış)

Aşağıdaki adımlar, kavramı oturtmak için minimal bir kurulum akışıdır.

1) Argo CD’yi Kubernetes’e Kurun

Namespace ve kurulum:

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

Argo CD UI erişimi için (örnek: port-forward):

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

2) Örnek Uygulama Manifest’i Hazırlayın

Basit bir Deployment + Service örneği (repo’da apps/my-service/base/ altında dursun):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-service
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: nginx:1.25
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-service
  ports:
  - port: 80
    targetPort: 80

3) Argo CD Application Tanımlayın

Argo CD’nin izleyip uygulayacağı kaynağı tanımlayın:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-service
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/ORNEK-ORG/ORNEK-REPO.git
    targetRevision: main
    path: apps/my-service/base
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Uygulayın:

kubectl apply -f application.yaml

Neden automated + selfHeal?

  • selfHeal: drift oluşursa otomatik düzeltir
  • prune: Git’ten silinen kaynağı cluster’dan da temizler

4) Değişiklik Yapın: “Deploy” Nasıl Oluyor?

Artık deploy için:

  1. Git’te manifest’i değiştirin (ör. image tag)
  2. PR açın, onaylayın
  3. Merge sonrası Argo CD senkronlar

Örnek değişiklik:

  • nginx:1.25nginx:1.26

Bu kadar. CI tarafında “cluster’a apply” etmek zorunda değilsiniz.

5) Rollback (Geri Alma) Mantığı

GitOps’ta rollback:

  • ya Git revert
  • ya da eski commit’e dönüp Argo CD sync

Pratik yaklaşım:

  • Üretimde sorun çıktı
  • İlgili PR’ı revert edin
  • Argo CD otomatik senkronlayıp önceki duruma döner

6) Drift’i Görünür Kılın (En Büyük Kazanç)

Klasik senaryoda birisi cluster’da manuel değişiklik yapar. GitOps’ta Argo CD bunu:

  • UI’da OutOfSync olarak gösterir
  • selfHeal açıksa otomatik geri alır

Bu özellik özellikle:

  • çoklu ekiplerde
  • kritik prod ortamlarında
  • denetim (audit) ihtiyacı olan şirketlerde çok hızlı değer üretir.

Ortam Yönetimi: Dev/Stage/Prod İçin Önerilen Model

GitOps’ta en sık yapılan hata: tüm ortamları tek dosyada yönetmeye çalışmak.

Öneri: Kustomize Overlay

Örnek yapı:

apps/my-service/
  base/
    deployment.yaml
  overlays/
    dev/
      kustomization.yaml
    prod/
      kustomization.yaml

overlays/prod/kustomization.yaml örneği:

resources:
- ../../base

patches:
- target:
    kind: Deployment
    name: my-service
  patch: |-
    - op: replace
      path: /spec/replicas
      value: 4

Bunu neden yapmalıyım?

  • Prod daha fazla replica ister
  • Dev daha küçük kaynakla çalışır
  • Aynı base üzerinden ortam farklarını yönetirsiniz

Güvenlik ve Operasyon İpuçları (Sık Yapılan Hatalar)

Aşağıdaki noktalar GitOps’un “gerçek” faydasını belirler:

  • CI sistemine cluster admin vermeyin. GitOps’ta controller’ın yetkisi kontrollü olmalı.
  • Secret yönetimini düz düşünmeyin. Secrets’ı repo’ya plain yazmak yerine SOPS/External Secrets gibi çözümleri değerlendirin.
  • Branch stratejisi belirleyin. main prod mu? Yoksa env/prod gibi branch mi?
  • PR onay akışı koyun. Özellikle prod değişiklikleri için en az 1-2 reviewer.
  • Observability ekleyin. Sync hataları için alert (Slack/Email) kurgulayın.

Sık Sorulan Sorular (FAQ)

1) GitOps nedir, CI/CD’nin yerini mi alır?

Hayır. CI (build/test) yine gereklidir. GitOps genelde CD kısmını daha güvenli ve izlenebilir hale getirir.

2) Argo CD ile Flux arasında ne fark var?

İkisi de GitOps aracıdır. Argo CD, UI ve uygulama odaklı deneyimiyle çok popülerdir; Flux daha “Kubernetes-native” yaklaşımıyla tercih edilebilir.

3) GitOps yalnızca Kubernetes için mi?

En yaygın kullanım Kubernetes’tir; ancak prensip olarak altyapı konfigürasyonunu Git üzerinden yönetme yaklaşımı farklı ortamlara da uyarlanabilir.

4) Drift olursa ne yapmalıyım?

Önce drift’in kaynağını bulun (manuel müdahale mi, farklı pipeline mı). selfHeal açıksa Argo CD otomatik düzeltebilir; değilse uyarı üretip manuel aksiyon beklersiniz.

5) Prod’a yanlış manifest giderse nasıl hızlı geri dönerim?

En temiz yöntem ilgili değişikliği revert etmektir. Argo CD senkronlar ve ortamı önceki commit durumuna döndürür.


Sonuç

GitOps, deploy süreçlerini Git üzerinden yöneterek izlenebilirlik, güvenlik, standartlaşma ve hızlı rollback sağlar. Argo CD ile cluster’ınız Git’te tanımladığınız “istenen duruma” sürekli yaklaşır; drift’i yakalar ve operasyonel sürprizleri azaltır.

Bir sonraki adım: Mevcut bir servisiniz için küçük bir repo yapısı oluşturup Argo CD ile tek bir ortamda (dev) deneyin. Denediğiniz senaryoyu ve karşılaştığınız sorunları yorumlarda paylaşın; birlikte iyileştirelim.