Modern bulut-native altyapı manzarasında, geleneksel CI/CD süreçleri evriliyor. İşte GitOps: Declarative altyapı ve uygulamalar için tek doğruluk kaynağı olarak Git'i kullanan bir paradigmadır. Git'i otomatik araçlarla birleştirerek ekipler tutarlı, denetlenebilir ve güvenli dağıtımlar elde edebilir. Kubernetes ortamları için bu devrimin kalbinde, Git depolarınız ile küme durumunuz arasında otomatik senkronizasyon sağlayan güçlü bir sürekli teslimat aracı olan ArgoCD yer alır.
Bu yazıda, ArgoCD'nin nasıl kurulacağı, uygulama tanımlarının nasıl yapılandırılacağı ve sağlam bir GitOps iş akışını korumak için yerleşik senkronizasyon özelliklerinin nasıl kullanılacağı incelenmektedir.
GitOps Çekirdek Döngüsünü Anlamak
Konfigürasyona dalmadan önce mekanizmayı anlamak çok önemlidir. Bir GitOps iş akışında, geliştirici değişiklikleri bir Git deposuna (istenen durum) iter. Kubernetes kümesi içinde çalışan ArgoCD bu depoyu izler. Eğer kümedeki canlı durum ile Git'teki istenen durum arasında bir sapma (drift) tespit ederse, bunları otomatik olarak senkronize eder. Bu çekme tabanlı model, itme tabanlı süreçlere kıyasla önemli avantajlar sunar; örneğin daha iyi güvenlik (küme kimlik bilgilerinin harici CI sunucularına açılmasına gerek yoktur) ve küme sağlığına anında görünürlük.
ArgoCD'yi Yükleme
İlk adım, ArgoCD'yi Kubernetes kümenize yüklemektir. En kolay yol, resmi CLI aracını kullanmak veya manifest'i doğrudan uygulamaktır. ArgoCD'nin çalışmasını istediğiniz ad alanını hedef aldığınızdan emin olun; genellikle bu argocd ad alanıdır.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argocd/stable/manifests/install.yaml
Yüklemeden sonra pod'ların çalıştığını doğrulayabilirsiniz:
kubectl get pods -n argocd
ArgoCD API sunucusu ve arayüzü hazır olduğunda, başlangıç yönetici şifresini alın:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
Uygulamaları Application CRD'leri ile Tanımlama
ArgoCD arayüzü, uygulamaları web arayüzü üzerinden oluşturmanıza izin verse de, bunları Git üzerinden programatik olarak yönetmek GitOps'un gerçek gücüdür. ArgoCD'nin neyi yönetmesi gerektiğini tanımlamak için Application Özel Kaynak Tanımı'nı (CRD) kullanırız.
Git deponuzda ortam yapınızı yansıtan bir dizin yapısı oluşturun. Örneğin, web-app.yml adında bir dosya oluşturun:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
Bu manifest'in ana bölümlerini inceleyelim:
- source: Kubernetes manifest'lerinizi içeren Git deposuna işaret eder.
targetRevision: HEAD, her zaman en son commit'i çekeceğini garanti eder. - destination: Uygulamanın dağıtılacağı yeri belirtir (küme URL'si ve ad alanı).
- syncPolicy: Otomasyon için kritiktir.
automated.prune: true, Git'ten silinen kaynakların kümeden de kaldırılmasını sağlar.selfHeal: true, ArgoCD'ye küme üzerinde doğrudan yapılan herhangi bir manuel değişikliği, Git'te tanımlanan duruma geri döndürmesini söyler.
Pratik Örnek: Sapmayı (Drift) Yönetme
Kubernetes yönetimideki en yaygın senaryolardan biri "sapma"dır. Bir geliştiricinin hata ayıklama için bir pod'a SSH ile bağlanıp bir ortam değişkenini manuel olarak değiştirdiğini hayal edin. Standart bir dağıtımda, bu değişiklik kalıcı olur ve ortamlar arasında yapılandırma tutarsızlıklarına yol açar.
Önceki örnekte selfHeal politikası etkinleştirildiğinde, ArgoCD küme durumunu Git ile sürekli olarak uzlaştırır. Saniyeler içinde ArgoCD manuel değişikliği tespit eder, arayüzde bunu "OutOfSync" (Senkronize Değil) olarak işaretler ve pod tanımını Git tanımına uyması için otomatik olarak geri alır. Bu, üretim ortamınızın kod depolarınızın saf bir yansıması olarak kalmasını sağlar.
Üretim İçin En İyi Uygulamalar
Temel iş akışının kurulması basit olsa da, üretim ortamları ek titizlik gerektirir:
- Ad Alanı İzolasyonu: ArgoCD'yi yüklerken, iş yüklerinizin bulunduğu ad alanını kullanmayın. ArgoCD ve uygulamalarınız için ayrılmış ad alanları kullanın.
- RBAC Yapılandırması: Katı Rol Tabanlı Erişim Kontrolü (RBAC) politikaları tanımlayın. ArgoCD uygulamalarını kimlerin değiştirebileceğini ve kimlerin yalnızca durumu görüntüleyebileceğini kısıtlayın.
- Gizli Bilgi Yönetimi: Hassas gizli bilgileri (secrets) Git'e yüklemekten kaçının. Gizli bilgileri çalışma zamanında enjekte etmek için ArgoCD'nin Gizli Bilgi Senkronizasyonu özelliğini kullanın veya HashiCorp Vault ve AWS Secrets Manager gibi harici gizli bilgi yöneticileriyle entegrasyon sağlayın.
- İnceleme Süreçleri:
Applicationmanifest'lerindeki değişiklikleri kod değişiklikleri olarak ele alın. Git deposuna güncellemeleri birleştirmeden önce Pull Request'leri ve kod incelemelerini zorunlu kılın.
Sonuç
ArgoCD ile GitOps uygulamak, ekiplerin Kubernetes uygulamalarını dağıtma ve yönetme şeklini dönüştürür. Emri komutlardan (imperative) bildirimsel (declarative) Git tabanlı iş akışlarına geçerek denetlenebilirlik, güvenlik ve güvenilirlik kazanırsınız. Küme durumunuzu sürüm kontrol sisteminizle otomatik olarak senkronize etme yeteneği, insan hatasını azaltır ve teslimat döngülerini hızlandırır. Bu uygulamaları benimsedikçe, GitOps'un sadece bir araç değişikliği olmadığını; altyapıyı kod olarak ele alma yönünde kültürel bir dönüşüm olduğunu unutmayın. Küçük başlayın, senkronizasyon politikalarınızı otomatikleştirin ve Kubernetes altyapınızın tam potansiyelini açığa çıkarmak için GitOps olgunluğunuzu kademeli olarak genişletin.