GitOps — Git Merkezli Operasyon, Süreçler ve En İyi Uygulamalar
GitOps, uygulama ve altyapı konfigürasyonlarının Git'te kaynak tek hakikati (single source of truth) olarak tutulduğu; değişikliklerin otomatik, izlenebilir ve denetlenebilir biçimde uygulanmasını sağlayan operasyon modelidir. Bu kılavuz GitOps felsefesini, faydalarını, pratik uygulamalarını ve üretime taşırken dikkat edilmesi gerekenleri özetler.
1. GitOps Nedir? Temel Tanım
GitOps temel olarak üç ilkeye dayanır: (1) Sistem durumunun (kubernetes manifestleri, Helm chart'lar, Terraform vs.) Git'te versiyonlanması, (2) Git'teki değişikliklerin otomatik olarak hedef ortama uygulanması (reconciliation), (3) Her uygulama/değişiklik için audit, rollback ve PR tabanlı inceleme süreci.
2. Neden GitOps?
- Audit ve izlenebilirlik: Her değişiklik Git commit'i ve PR geçmişiyle takip edilir.
- Otomasyon: Manuel kubectl uygulamaları yerine otomatik reconciliation ile tutarlılık sağlanır.
- Rollback kolaylığı: Git geçmişine dönerek eski duruma hızlı dönüş yapılabilir.
- Policy ve güvenlik: PR sürecinde otomatik kontrol (OPA/Gatekeeper, CI taramaları) uygulanır.
- Tekrarlanabilir altyapı: Ortamlar tek manifest setiyle yeniden inşa edilebilir.
3. Temel Bileşenler
- Git repo: Altyapı ve uygulama manifestleri, Helm chart'lar veya Kustomize konfigürasyonları.
- Git provider: GitHub, GitLab, Bitbucket — PR/branch politikaları burada yönetilir.
- Reconciliation agent: ArgoCD veya Flux — Git'i izler ve cluster ile senkronize eder.
- CI: Build, test, image push süreçlerini sağlar (GitHub Actions, GitLab CI, Jenkins).
- Policy engine: OPA/Gatekeeper ile manifest politikaları denetlenir.
- Observability: Reconciliation metrikleri, alerting ve audit log'lar.
4. GitOps Repo Stratejileri
- Monorepo: Tüm ortamlar ve uygulamalar tek repo içinde — yönetim kolaylığı sağlar ama erişim kontrolü karmaşıklaşabilir.
- Multi-repo: Her ekip veya uygulama için ayrı repo — sınırlandırılmış yetki ve bağımsız yaşam döngüsü.
- Environment per branch / per repo: Prod/staging/qa için ayrı branch veya ayrı repo; declarative manifestlerin net ayrımı önemlidir.
5. PR Tabanlı Akış (Örnek)
- Geliştirici bir değişiklik yapar (ör. yeni image tag veya config).
- PR açılır, CI testleri (lint, policy check, security scan) çalışır.
- Onay sonrası merge olur; reconciliation agent değişikliği algılar.
- Agent cluster'ı günceller; success/failure metrikleri kaydedilir ve alert tetiklenir gerekirse.
6. Araç Önerileri
- ArgoCD: Zengin UI, uygulama yönetimi, multi-cluster destek.
- Flux: Lightweight, GitOps primitives ve Helm/Kustomize entegrasyonu.
- Helm & Kustomize: Parametrizasyon ve sürüm yönetimi.
- Terraform: Cloud altyapısı için declarative state; GitOps ile birlikte kullanılabilir.
- OPA / Gatekeeper: Politikaların PR aşamasında ve runtime'da enforce edilmesi için.
- HashiCorp Vault: Secrets yönetimi ve dinamik credential dağıtımı.
7. Güvenlik ve Politika
- PR pipeline'ında SAST, SCA, IaC scanning çalıştırın (Trivy, Snyk, Checkov).
- OPA kurallarını manifestlere uygulatın (etiket zorunluluğu, resource limitleri, allowed namespaces).
- Secrets'ı Git'te saklamayın; Vault/SealedSecrets kullanın.
- Agent erişimini en az ayrıcalık prensibiyle kısıtlayın (Git token, RBAC).
8. Observability ve Operasyon
- ArgoCD/Flux reconciliation metriklerini Prometheus ile toplayın.
- Deploy başarısızlıkları, sync durumu ve drift için alert kurun.
- Audit log'larını merkezi logging sistemine gönderin (ELK, Loki).
- Rollback otomasyonları ve canary izleme panoları oluşturun.
9. Örnek GitOps Repo Yapısı
├─ apps/
│ ├─ webapp/
│ │ ├─ kustomization.yaml
│ │ └─ deployment.yaml
│ └─ api/
├─ infra/
│ ├─ cluster-logging/
│ └─ networking/
├─ envs/
│ ├─ staging/
│ └─ production/
└─ README.md
10. CI ve Image Promotion
CI pipeline'ı image build ve test sonrası image tag oluşturmalı ve registry'e push etmelidir. Promotion stratejileri:
- Image tag -> update manifest in staging -> PR for production
- Automated promotion: passing tests & policies ile staging'den prod'a otomatik merge
11. Karşılaşılan Zorluklar ve Çözümler
- Drift yönetimi: Cluster ile Git arasında fark oluştuğunda reconciliation sağlanmalı ve drift nedenleri incelenmelidir.
- Secret yönetimi: Secrets için dış yönetim ve dinamik credential kullanın.
- Large repo yönetimi: Monorepo kullanıyorsanız path-based sync veya multiple apps strategy uygulayın.
- On-call ve alert fatigue: Önemli olayları sınıflandırın; yanlış pozitifleri azaltın.
12. Örnek Komutlar
# ArgoCD uygulama listesi
kubectl -n argocd get applications
# Flux sync status
flux get kustomizations --all-namespaces
# PR sonrası prod'e merge edildiğinde ArgoCD otomatik sync yapar
13. Öğrenme Yol Haritası ve Projeler
- Önce Kubernetes temellerini iyi öğrenin.
- Basit bir uygulamayı GitOps ile deploy edin (ArgoCD veya Flux kullanarak).
- Policy enforcement (OPA) ve security scanning ekleyin.
- Multi-cluster ve promotion senaryolarını deneyin.
- Observability ve alerting ile production readiness'i test edin.