Kubernetes'te GitOps ile Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD): Modern Yaklaşım - BirCloud Blog
Bulut Bilişim

Kubernetes’te GitOps ile Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD): Modern Yaklaşım

📖 8 dakika okuma süresi

Giriş

Günümüzde yazılım geliştirme süreçleri, hız ve güvenilirliği ön planda tutmaktadır. Bu nedenle, Sürekli Entegrasyon (CI) ve Sürekli Dağıtım (CD) uygulamaları, modern yazılım geliştirme döngüsünün vazgeçilmez bir parçası haline gelmiştir. Kubernetes, container orkestrasyon platformu olarak, bu süreçleri daha da optimize etme potansiyeli sunmaktadır. Ancak, Kubernetes’in karmaşıklığı, CI/CD süreçlerinin yönetimini zorlaştırabilir. İşte tam bu noktada GitOps devreye girer. GitOps, altyapı ve uygulama konfigürasyonlarını kod olarak yönetmeyi ve Git’i tek doğruluk kaynağı olarak kullanmayı esas alan bir yaklaşımdır. Bu yazımızda, Kubernetes’te GitOps prensiplerini kullanarak CI/CD süreçlerinizi nasıl iyileştirebileceğinizi detaylı bir şekilde inceleyeceğiz. BirCloud olarak, bulut bilişim çözümlerimizle bu süreçte sizlere nasıl destek olabileceğimizi de ele alacağız.

GitOps Nedir?

GitOps, temelde altyapı ve uygulama konfigürasyonlarını Git depolarında saklama ve bu depolardaki değişiklikleri otomatik olarak Kubernetes kümelerine uygulama prensibine dayanır. Bu yaklaşım, altyapıyı kod olarak (Infrastructure as Code – IaC) yönetmeyi ve Git’i tüm değişikliklerin kaynağı olarak kullanmayı içerir. GitOps’un temel prensipleri şunlardır:

  • Bildirimsel Konfigürasyon: Kubernetes kaynakları (Deployment, Service, vb.) YAML veya JSON dosyaları gibi bildirimsel formatlarda tanımlanır.
  • Git Tabanlı İş Akışı: Tüm değişiklikler Git üzerinden yapılır. Pull Request (PR) mekanizması kullanılarak değişiklikler incelenir ve onaylanır.
  • Otomatik Senkronizasyon: Git deposundaki konfigürasyonlar ile Kubernetes kümesindeki gerçek durum sürekli olarak senkronize edilir.
  • Gözlemlenebilirlik ve Denetim: Tüm değişiklikler Git geçmişinde tutulduğu için, kimin ne zaman hangi değişikliği yaptığı kolayca izlenebilir.

GitOps, Kubernetes’in karmaşıklığını azaltarak, daha güvenilir, tutarlı ve denetlenebilir bir CI/CD süreci oluşturmanıza yardımcı olur.

GitOps’un Avantajları

GitOps yaklaşımının sağladığı başlıca avantajlar şunlardır:

  • Artan Güvenilirlik: Tüm değişiklikler Git üzerinden yapıldığı ve otomatik olarak senkronize edildiği için, insan hatası riski azalır.
  • Daha Hızlı Geri Alma (Rollback): Hatalı bir değişiklik durumunda, Git geçmişine geri dönerek hızlıca önceki sürüme dönebilirsiniz.
  • Gelişmiş Denetim ve İzlenebilirlik: Tüm değişiklikler Git üzerinde kaydedildiği için, kimin ne zaman hangi değişikliği yaptığı kolayca izlenebilir. Bu, uyumluluk gereksinimlerini karşılamak için önemlidir.
  • Daha İyi İşbirliği: Git tabanlı iş akışı, geliştirme ve operasyon ekipleri arasındaki işbirliğini artırır. Pull Request mekanizması sayesinde, değişiklikler incelenir ve onaylanır.
  • Otomasyon: Altyapı ve uygulama dağıtımı süreçleri otomatikleştirildiği için, manuel müdahale ihtiyacı azalır.
  • Daha Az Kesinti: GitOps prensipleri, değişikliklerin kontrollü bir şekilde uygulanmasını sağlayarak, kesinti sürelerini minimize eder.

Kubernetes’te GitOps Kullanım Senaryoları

GitOps, Kubernetes ortamında çeşitli kullanım senaryolarında uygulanabilir:

  • Uygulama Dağıtımı: Yeni bir uygulama sürümünü Kubernetes kümesine dağıtmak veya mevcut bir uygulamayı güncellemek.
  • Altyapı Yönetimi: Kubernetes kümesinin altyapısını (örneğin, namespace’ler, resource quota’lar) yönetmek.
  • Konfigürasyon Yönetimi: Uygulama ve altyapı konfigürasyonlarını yönetmek (örneğin, ConfigMap’ler, Secret’lar).
  • Ortam Yönetimi: Geliştirme, test ve üretim gibi farklı ortamları yönetmek.
  • Güvenlik Politikaları: Ağ politikaları ve güvenlik konfigürasyonlarını yönetmek. Cloud Native Uygulamalar için Cilium Service Mesh ve eBPF ile Sıfır Güven (Zero Trust) Yaklaşımı yazımızda bu konuya değinmiştik.

GitOps Araçları

GitOps prensiplerini uygulamak için çeşitli araçlar mevcuttur. En popüler araçlardan bazıları şunlardır:

  • Argo CD: Kubernetes için özel olarak tasarlanmış, açık kaynak kodlu bir GitOps aracıdır. Git depolarındaki konfigürasyonları otomatik olarak Kubernetes kümelerine uygular ve sürekli senkronizasyonu sağlar. GitOps ve Argo CD ile Güvenli ve Ölçeklenebilir Sürekli Dağıtım başlıklı yazımızda ArgoCD’yi detaylıca inceledik.
  • Flux: CNCF (Cloud Native Computing Foundation) tarafından desteklenen, açık kaynak kodlu bir GitOps aracıdır. Argo CD gibi, Git depolarındaki konfigürasyonları Kubernetes kümelerine uygular.
  • Jenkins X: Kubernetes üzerinde CI/CD süreçlerini otomatikleştirmek için tasarlanmış, açık kaynak kodlu bir platformdur. GitOps prensiplerini destekler.

Kubernetes’te GitOps ile CI/CD Kurulumu: Adım Adım Rehber

Aşağıda, Kubernetes’te GitOps kullanarak basit bir CI/CD kurulumunun adımlarını bulabilirsiniz. Bu örnekte, Argo CD kullanacağız.

Adım 1: Argo CD Kurulumu

Argo CD’yi Kubernetes kümenize kurmak için aşağıdaki adımları izleyin:


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

Argo CD’ye erişmek için bir Ingress veya LoadBalancer oluşturabilirsiniz. Alternatif olarak, port forwarding kullanabilirsiniz:


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

Argo CD’nin varsayılan şifresini almak için aşağıdaki komutu kullanın:


kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 --decode

Adım 2: Git Deposu Oluşturma

Uygulama konfigürasyonlarınızı saklayacağınız bir Git deposu oluşturun. Bu depo, Kubernetes kaynak tanımlarını (YAML dosyaları) içermelidir. Örneğin, bir `deployment.yaml` ve bir `service.yaml` dosyası oluşturabilirsiniz.

deployment.yaml:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: nginx:latest
        ports:
        - containerPort: 80

service.yaml:


apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

Adım 3: Argo CD Uygulaması Oluşturma

Argo CD arayüzünde, yeni bir uygulama oluşturun. Uygulama oluştururken aşağıdaki bilgileri girin:

  • Application Name: Uygulamanızın adı (örneğin, my-app).
  • Project: Varsayılan proje (default).
  • Sync Policy: Otomatik senkronizasyon (Automatic).
  • Repository URL: Git deponuzun URL’si.
  • Revision: Git dalı (örneğin, main).
  • Path: Kubernetes kaynak tanımlarınızın bulunduğu dizin.
  • Destination Namespace: Uygulamanızın dağıtılacağı namespace (örneğin, default).
  • Destination Server: Kubernetes kümenizin adresi (https://kubernetes.default.svc).

Adım 4: CI/CD Pipeline Entegrasyonu

CI/CD pipeline’ınızı (örneğin, Jenkins, GitLab CI, GitHub Actions) Git deposuna yapılan değişiklikleri otomatik olarak tetikleyecek şekilde yapılandırın. Pipeline, uygulama kodunu derleyip container imajı oluşturduktan sonra, `deployment.yaml` dosyasındaki imaj etiketini güncellemeli ve Git’e push etmelidir.

Örnek GitHub Actions workflow:


name: CI/CD

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Build and push Docker image
      run: |
        docker build -t my-app:latest .
        docker tag my-app:latest your-dockerhub-username/my-app:latest
        docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}
        docker push your-dockerhub-username/my-app:latest

    - name: Update deployment.yaml
      run: |
        sed -i 's/image: nginx:latest/image: your-dockerhub-username/my-app:latest/g' deployment.yaml
        git config --global user.email "[email protected]"
        git config --global user.name "Your Name"
        git add deployment.yaml
        git commit -m "Update image tag"
        git push origin main

Bu adımları tamamladıktan sonra, Git deposuna yapılan her değişiklik otomatik olarak Kubernetes kümenize uygulanacaktır.

BirCloud Perspektifi

BirCloud olarak, müşterilerimize Kubernetes ve GitOps konularında uçtan uca çözümler sunmaktayız. Deneyimli ekibimiz, altyapınızın tasarımı, kurulumu, yapılandırılması ve yönetimi konularında size destek olabilir. Terraform Cloud ile Uçtan Uca Güvenli ve Ölçeklenebilir Altyapı Yönetimi gibi çözümlerimizle, altyapınızı güvenli ve ölçeklenebilir bir şekilde yönetmenize yardımcı oluyoruz. Ayrıca, sürekli izleme ve güvenlik çözümlerimizle, Kubernetes ortamınızın güvenliğini ve performansını sürekli olarak takip ediyoruz. Modern Savunmanın Temeli: İşletmenizi BirSIEM ile Nasıl Güçlendirirsiniz? başlıklı yazımızda güvenlik çözümlerimizin önemini vurgulamıştık.

Sonuç

Kubernetes’te GitOps ile CI/CD, modern yazılım geliştirme süreçlerini daha güvenilir, hızlı ve ölçeklenebilir hale getirmenin etkili bir yoludur. GitOps prensiplerini benimseyerek, altyapı ve uygulama konfigürasyonlarınızı kod olarak yönetebilir, Git’i tek doğruluk kaynağı olarak kullanabilir ve otomatik senkronizasyon sayesinde sürekli dağıtım sağlayabilirsiniz. BirCloud olarak, bu süreçte size destek olmaktan mutluluk duyarız.

❓ Sık Sorulan Sorular

GitOps nedir?

GitOps, altyapı ve uygulama konfigürasyonlarını kod olarak yönetmeyi ve Git'i tek doğruluk kaynağı olarak kullanmayı esas alan bir yaklaşımdır.

Kubernetes'te GitOps kullanmanın avantajları nelerdir?

Artan güvenilirlik, daha hızlı geri alma, gelişmiş denetim ve izlenebilirlik, daha iyi işbirliği, otomasyon ve daha az kesinti gibi avantajlar sağlar.

Argo CD nedir?

Kubernetes için özel olarak tasarlanmış, açık kaynak kodlu bir GitOps aracıdır. Git depolarındaki konfigürasyonları otomatik olarak Kubernetes kümelerine uygular ve sürekli senkronizasyonu sağlar.

GitOps için hangi araçlar kullanılabilir?

Argo CD, Flux ve Jenkins X gibi araçlar GitOps prensiplerini uygulamak için kullanılabilir.

BirCloud GitOps konusunda nasıl destek olabilir?

BirCloud, müşterilerine Kubernetes ve GitOps konularında uçtan uca çözümler sunmaktadır. Altyapınızın tasarımı, kurulumu, yapılandırılması ve yönetimi konularında size destek olabiliriz.