Modern yazılım geliştirme ekipleri operasyonlarını ölçeklendirdikçe, güvenilir, otomatik altyapı sağlama ihtiyacının önemi artmıştır. GitOps, altyapı ve uygulama dağıtımları için tek doğruluk kaynağı olarak Git'i kullanan bir yöntemdir ve karmaşık Kubernetes ortamlarını yönetmek için altın standart haline gelmiştir. Bu blog gönderisi, iki güçlü açık kaynak aracı olan Argo CD ve Flux kullanarak GitOps uygulamalarını nasıl uygulayacağımızı incelemektedir.
GitOps Temellerini Anlamak
GitOps, altyapı ve uygulama yapılandırmaları için doğruluk kaynağını Git olarak kullanan bir dizi uygulamadır. Temel prensip, tüm altyapı değişikliklerinin bildirimsel, sürüm kontrolü altında ve Git iş akışları aracılığıyla otomatik olmasıdır. Bu yaklaşım, ortamlar arasında tutarlılığı, denetlenebilirliği ve geri dönüş yeteneklerini sağlar.
GitOps uygularken, Git'te depolanan istenen durumun gerçek küme durumuyla sürekli karşılaştırıldığı ve herhangi bir uyuşmazlığın otomatik olarak çözüldüğü bir senkronizasyon döngüsü kurarız.
Argo CD'ye Giriş
Argo CD, Kubernetes için bildirimsel, GitOps sürekli dağıtım aracıdır. GitOps prensibini uygulayarak Git depolarını izleyerek küme durumunu istenen yapılandırmayla otomatik olarak senkronize eder.
# Örnek Argo CD Uygulama bildirimi
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/my-app.git
targetRevision: HEAD
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: my-app
syncPolicy:
automated:
prune: true
selfHeal: true
Argo CD ile, Kubernetes bildirimlerini içeren Git depoları olarak uygulamalar tanımlayabilir ve bu yapılandırmaları otomatik olarak dağıtır ve korur.
Flux: Alternatif Bir GitOps Yaklaşımı
Flux, Kubernetes için popüler bir başka GitOps aracıdır ve senkronizasyon konusunda farklı bir yaklaşım sunar. Argo CD'nin push tabanlı modelinden farklı olarak, Flux, kümenin Git'ten yapılandırma güncellemelerini aktif olarak talep ettiği bir çekme tabanlı yaklaşımı kullanır.
# Flux kaynak tanımı
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
name: my-app
namespace: flux-system
spec:
interval: 1m0s
url: https://github.com/myorg/my-app.git
ref:
branch: main
Flux, GitOps için daha dağıtık bir yaklaşım sunarak birden fazla küme ve ortamda yapılandırmaları daha kolay yönetmeyi sağlar.
GitOps Ortamınızı Kurma
Herhangi bir aracı uygulamadan önce, sorunları ayıran bir Git deposu yapısı kurmanız gerekir:
# Tipik GitOps deposu yapısı
├── apps/
│ ├── production/
│ │ └── my-app.yaml
│ └── staging/
│ └── my-app.yaml
├── infrastructure/
│ ├── base/
│ └── overlays/
└── kustomize/
Argo CD ve Flux, Kustomize, Helm chart'ları veya düz Kubernetes bildirimleriyle iyi çalışır. Anahtar, ortamların kolay yönetilebilmesini sağlayan tutarlı bir yapı sürdürmektir.
Pratik Uygulama Örneği
GitOps ilkelerini kullanarak bir mikro hizmet uygulaması dağıttığımız gerçek bir senaryoyu düşünelim:
# Üretim ortamı yapılandırması
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: myorg/my-app:1.2.3
ports:
- containerPort: 8080
Bu yapılandırmayı Git deposunuzda tutarak, hem Argo CD hem de Flux, üretim kümenizin bu yapılandırmayı koruyacağını ve herhangi bir sapmayı otomatik olarak algılayıp düzelttiğini garanti eder.
En İyi Uygulamalar ve Dikkat Edilmesi Gerekenler
GitOps'u başarılı bir şekilde uygulamak birkaç temel uygulamaya dikkat etmeyi gerektirir:
- Tüm altyapı değişiklikleri için pull request kullanarak ekip değerlendirmesini etkinleştirin
- Uygun dal stratejileri (özellik dalları, sürüm dalları) uygulayın
- Otomatik test ve doğrulama için Git hook'larını kullanın
- GitOps araçlarınız için uygun RBAC politikalarını yapılandırın
- GitOps işlemleri için izleme ve uyarı kurulumu yapın
Sonuç
Argo CD ve Flux ile GitOps, otomatik altyapı sağlama ve dağıtım yönetimi için sağlam bir temel sağlar. Her iki araç da benzersiz avantajlar sunar: Argo CD, görsel yönetim ve senkronizasyonda üstünlük sağlarken, Flux yapılandırma yönetimi konusunda daha merkezi olmayan bir yaklaşım sunar. Bu uygulamaları uygulayarak, geliştirme ekipleri daha güvenilir, daha hızlı dağıtım döngüleri ve Kubernetes ortamlarında daha iyi operasyonel tutarlılık elde edebilirler.
Altyapı karmaşıklığı arttıkça, GitOps dağıtım süreçleriniz üzerinde kontrolü korumak açısından giderek daha değerli hale gelir. Argo CD, Flux ya da her ikisini birlikte seçtiğinizde, anahtar, açık süreçler kurmak ve organizasyonunuzun GitOps iş akışında tutarlı uygulamaları sürdürmektir.