FluxCD ve PipeCD: GitOps cephesinden karşılaştırma
Selamlar, bu yazımda son zamanlarda epey soru gelen bir konuya girmek istiyorum: GitOps tarafında FluxCD mi tutalım, PipeCD mi denesek? İkisi de açık kaynak, ikisi de CNCF çatısı altında, ama yaklaşımları aslında bir hayli farklı. Lafı uzatmadan başlayayım.
İşin özü şu: Flux, baştan sona Kubernetes'e adanmış bir araç. Pull-based model üzerine kurulmuş, cluster'ın içinde controller'lar olarak yaşıyor ve git'i tek doğru kaynak kabul edip oradan çekiyor. PipeCD ise CNCF Sandbox seviyesinde bir proje ve sadece Kubernetes değil; Terraform, Cloud Run, Lambda, ECS gibi farklı hedeflere de tek bir GitOps arayüzünden deploy etmeyi vaat ediyor. İkisi de iyi, ama farklı dertlere derman.
FluxCD mimarisi nasıl çalışıyor?
Flux'ı kabaca 'cluster içinde sürekli git'e bakan bir robot ordusu' diye düşünebilirsiniz. GitRepository ve Kustomization gibi CRD'ler tanımlıyorsunuz, controller'lar belirlenen aralıklarla repo'yu çekiyor ve cluster'ı istenen duruma getiriyor.
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: orders-api
namespace: flux-system
spec:
interval: 5m
path: ./apps/orders-api
prune: true
sourceRef:
kind: GitRepository
name: fleet-repo
prune: true benim açımdan kritik bir ayar; repo'dan silinen şeyin cluster'dan da gitmesi GitOps'un ruhuna en uygun davranış. Olmazsa olmaz.
PipeCD nasıl bir hayvan?
PipeCD bir kontrol düzlemi (control plane) ve her cluster'a düşen piped agent'larından oluşuyor. Uygulama tanımı, repo içine bıraktığınız bir .pipe.yaml dosyasında yaşıyor ve pipeline aşamalarını burada açıkça yazıyorsunuz.
apiVersion: pipecd.dev/v1beta1
kind: KubernetesApp
spec:
name: orders-api
labels:
env: production
team: backend
input:
manifests:
- kubernetes/
kubectlVersion: '1.29'
pipeline:
stages:
- name: K8S_PRIMARY_ROLLOUT
- name: WAIT_APPROVAL
- name: K8S_TRAFFIC_ROUTING
Burada gözünüze çarpan şey muhtemelen WAIT_APPROVAL aşaması olacak. Aynen öyle, manuel onay adımı pipeline'ın doğal bir parçası; Flux'ta bunu kurmak için ek tool'lara veya custom Job'lara dönmeniz gerekir.
Progressive delivery: Flagger mi, dahili mi?
Flux tarafında canary, blue/green gibi senaryolar için tek seçenek var: Flagger. Ayrı kurulan, ayrı yönetilen bir Kubernetes operator'ü. İyi çalışıyor, ama bir parça daha var demek.
PipeCD'de aynı senaryo dahili stage'lerle çözülüyor:
pipeline:
stages:
- name: K8S_CANARY_ROLLOUT
with:
replicas: 10%
- name: WAIT
with:
duration: 10m
- name: K8S_TRAFFIC_ROUTING
with:
primary: 80
canary: 20
- name: WAIT_APPROVAL
- name: K8S_PRIMARY_ROLLOUT
- name: K8S_CANARY_CLEAN
Bence tek başına bu fark, küçük ekipler için PipeCD'yi cazip kılıyor. Bir başka deyişle: Flagger'ı kurmak, izlemek, sürmek istemiyorsanız iş zaten bitiyor.
Çoklu platform: işin asıl ayrım çizgisi
PipeCD'nin gerçek farkı burada beliriyor. Bir Terraform iş yükü için bile aynı arayüzü kullanabiliyorsunuz:
apiVersion: pipecd.dev/v1beta1
kind: TerraformApp
spec:
name: vpc-infra
input:
workingDir: terraform/vpc
pipeline:
stages:
- name: TERRAFORM_PLAN
- name: WAIT_APPROVAL
- name: TERRAFORM_APPLY
Flux ile aynı işi yapmak istersek Atlantis ya da Terraform Cloud gibi başka bir araca dönmemiz gerek. Yani iki tool, iki kültür, iki ekip alışkanlığı.
Sık karşılaşılan tuzaklar
- Flagger'ı görmezden gelmek: Flux seçtiyseniz progressive delivery için Flagger'ı baştan planlayın; sonradan eklemek migration acısı yaratıyor.
- PipeCD olgunluğunu abartmak: Sandbox seviyesinde bir proje. Flux Graduated. Production'da kritik iş yükü taşıyorsanız bu farkı görmezden gelmeyin.
- Secret yönetimi: Flux SOPS ile çok rahat anlaşıyor; PipeCD tarafında bu konu daha sınırlı, kurulumdan önce bakmakta fayda var.
- Pull vs push'u karıştırmak: PipeCD'nin kontrol düzlemi var diye 'push' sanmayın; agent'lar yine repo'yu çeker, sadece orkestasyon merkezi farklı.
Kapanış
Şahsi kanaatim şu: Sadece Kubernetes ile yaşıyorsanız ve SOPS, OCI artifact'leri, native RBAC entegrasyonu sizin için kıymetliyse Flux hâlâ en olgun seçenek. Ama Terraform, serverless ve K8s'i aynı GitOps şemsiyesi altında toplamak istiyorsanız, üstüne Flagger'sız canary'yi de cazip buluyorsanız, PipeCD'ye ciddi bir bakış borçlusunuz. Umarım faydalı olur, bir sonraki yazıda görüşmek üzere.
