Ana içeriğe geç

Flux ile Kubernetes Continuous Delivery Kurulumu (GitOps Rehberi)

Kubernetes tek başına CI/CD sunmaz.
Bu rehberde, GitOps yaklaşımı ile Kubernetes dağıtımlarını otomatik ve izlenebilir hale getireceksiniz.

Flux kullanarak Git deposunu tek doğruluk kaynağı yapacak ve tüm değişiklikleri kümeye otomatik uygulayacaksınız.


Bu Rehberde Ne Öğreneceksiniz?

  • GitOps yaklaşımının Kubernetes’te nasıl çalıştığını
  • Flux kurulumu ve GitHub ile entegrasyonu
  • Uygulamaların otomatik dağıtımını
  • Slack üzerinden anlık dağıtım bildirimleri almayı
  • (Opsiyonel) Helm chart otomasyonu

Ön Gereksinimler

Başlamadan önce aşağıdakiler hazır olmalıdır:

  • Kubernetes Kümesi: Kubectl yapılandırılmış (örn: Rabisu Kubernetes)
  • GitHub Hesabı: Personal Access Token oluşturulmuş
  • Slack Workspace: Webhook oluşturma yetkisi
  • Yerel Ortam: Git ve kubectl kurulu

1. Flux Kurulumu ve Bootstrap İşlemi

Flux, GitOps tabanlı Continuous Delivery aracıdır.
Önce yerel makinenize kurulur, sonra kümeye bağlanır.

Flux Kurulumu

curl https://fluxcd.io/install.sh -so flux-install.sh
chmod +x flux-install.sh
./flux-install.sh
  • Bu komut Flux CLI aracını sisteme kurar.

Otomatik tamamlama ekleyin:


echo ". <(flux completion bash)" >> ~/.bashrc
source ~/.bashrc

  • Ön kontrolleri çalıştırın:

flux check --pre
  • Bu komut Kubernetes sürüm uyumluluğunu kontrol eder.

2. Flux’u GitHub ile Kümenize Kurma (Bootstrap)

  • Flux, yapılandırmasını Git deposunda tutar.
  • Bu depo aynı zamanda dağıtımın tek kaynağıdır.

GitHub bilgilerinizi değişken olarak tanımlayın:


export GITHUB_USER=kullanici_adiniz
export GITHUB_TOKEN=github_tokeniniz

Bootstrap işlemini başlatın:


flux bootstrap github \
--owner=$GITHUB_USER \
--repository=flux-config \
--branch=main \
--path=./clusters/my-cluster \
--personal

  • Bu işlem:
  1. GitHub’da özel bir repo oluşturur

  2. Flux bileşenlerini kümeye kurar

  3. Git ile Kubernetes’i senkronize eder


3. Uygulama Dağıtımını Otomatize Etme

  1. Flux’un bir uygulamayı izlemesi için iki şeye ihtiyacı vardır:
  • GitRepository: Kaynağın nerede olduğu

  • Kustomization: Neyin deploy edileceği


Flux Konfigürasyon Deposunu Klonlama


git clone https://github.com/$GITHUB_USER/flux-config ~/flux-config
cd ~/flux-config

Kaynak Repo Tanımlama


flux create source git podinfo \
--url=https://github.com/$GITHUB_USER/podinfo \
--branch=master \
--interval=30s \
--export > ./clusters/my-cluster/podinfo-source.yaml
  • Bu dosya, Flux’a hangi Git reposunu izleyeceğini söyler.

Kustomization Oluşturma


flux create kustomization podinfo \
--source=podinfo \
--path="./kustomize" \
--prune=true \
--interval=5m \
--export > ./clusters/my-cluster/podinfo-kustomization.yaml

  • Bu yapı:
  1. Kubernetes manifestlerini otomatik uygular

  2. Manuel değişiklikleri geri alır

  3. Git dışı müdahaleleri engeller

  4. Dosyaları gönderin:



git add . && git commit -m "podinfo eklendi"
git push

4. Slack Bildirimlerini Ayarlama

-Flux, dağıtım olaylarını Slack’e gönderebilir.

Slack Webhook Secret Oluşturma


kubectl -n flux-system create secret generic slack-url \
--from-literal=address=SLACK_WEBHOOK_URL
  • Bu komut Slack webhook adresini güvenli şekilde saklar.

Alert Provider Tanımlama


flux create alert-provider slack \
--type slack \
--channel general \
--secret-ref slack-url \
--export > ./clusters/my-cluster/slack-alert-provider.yaml

Alert Tanımı Oluşturma


flux create alert slack-alert \
--event-severity info \
--event-source Kustomization/* \
--provider-ref slack \
--export > ./clusters/my-cluster/slack-alert.yaml

Değişiklikleri gönderin:


git add . && git commit -m "Slack bildirimleri eklendi"
git push
  • Artık her deploy Slack’e düşer 🔔

5. (Opsiyonel) Helm Chart Otomasyonu

  1. Flux, Helm chart’ları da izleyebilir.

Helm Repo Tanımlama


flux create source helm podinfo \
--url=https://stefanprodan.github.io/podinfo \
--interval=10m \
--export > ./clusters/my-cluster/podinfo-helm-repo.yaml

HelmRelease Oluşturma


flux create hr podinfo \
--source=HelmRepository/podinfo \
--chart=podinfo \
--target-namespace=podinfo-helm \
--export > ./clusters/my-cluster/podinfo-helm-chart.yaml
Namespace oluşturun ve push edin:


kubectl create namespace podinfo-helm

git add . && git commit -m "Helm chart eklendi" && git push


##Sıkça Sorulan Sorular (SSS)

1. Flux neden manuel değişiklikleri geri alıyor? GitOps mantığında Git tek doğruluk kaynağıdır.

2. Canlıda acil değişiklik yapabilir miyim? Evet, Kustomization suspend edilerek yapılabilir.

3. Flux CI yerine geçer mi? Hayır. Flux CD aracıdır, CI için Jenkins/GitHub Actions gerekir.

4. Slack yerine başka araç kullanabilir miyim? Evet. Teams, Discord ve webhook destekli tüm sistemler çalışır.


Sonuç

Flux ile Kubernetes dağıtımlarınızı tamamen Git tabanlı, izlenebilir ve geri alınabilir hale getirdiniz. Artık her commit otomatik deploy edilir ve tüm süreç kayıt altındadır.

Bu GitOps mimarisini Rabisu Bulut Kubernetes altyapısı üzerinde kurarak projelerinizi güvenle ölçekleyebilirsiniz 🚀