Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Argo CD'yi Production'da İşletmek ve 2.x'ten 3.6'ya Değişenler: SSO, RBAC, Notifications, Metrikler ve Upgrade
Argo CD'yi production'da işletmek, kendi ayarlarını da Git'te tutmak, insanları SSO ve en az yetkili RBAC rolleriyle, CI'ı süreli token ile içeri almak, admin hesabını kapatmak, bildirim ve argocd_app_info alarmı kurmak ve son üç minor sürümde kalmak demek. Hesapları, RBAC'ı ve bildirimleri Git'ten uyguluyor, 3.0'ın update, delete ve logs değişikliklerini, metrikleri ve 3.6'ya kadar yükseltme notlarını gerçek çıktılarla görüyor ve seriyi kapatıyoruz.
Argo Rollouts ile Progressive Delivery: Prometheus Metrikleriyle Otomatik Canary Analizi
Argo Rollouts, Deployment'ın yerine geçen bir Rollout ile yeni sürümü adım adım açar ve Prometheus'tan okuduğu metriklere göre ilerler ya da kendiliğinden geri döner. Bookstore API'sini Rollout'a çeviriyor, prod'da %25 ve %50 adımlı bir canary kuruyor, iyi bir sürümün geçişini ve %30 hata dönen bir sürümün 92 saniyede abort edilmesini, ardından Git'i revert ile gerçeğe uydurmayı gerçek çıktılarla görüyoruz.
GitOps'ta Secret Yönetimi: Sealed Secrets, SOPS ve Secret'ı Git'e Hiç Koymamak
Secret'ı Git'e koymanın güvenli yolu, değeri yalnız hedef cluster'ın açabileceği biçimde şifrelemek (Sealed Secrets), ekibin anahtarıyla şifreleyip manifest üretiminde çözmek (SOPS ve KSOPS) ya da Git'e yalnız bir referans koymak (External Secrets Operator). Var olan Secret'ı devralmayı, strict scope'u, anahtar kaybı provasını, KSOPS'u Argo CD'ye eklemeyi ve üç yolun karşılaştırmasını gerçek çıktılarla görüyoruz.
CI ile GitOps'u Bağlamak: Image Tag Promotion, Pull Request ile Environment Atlatmak ve Image Updater
GitOps'ta CI image'ı bir kez build edip registry'ye koyar ve hangi image'ın çalışacağını config repo'suna commit olarak yazar; deploy'u Argo CD yapar. Yerel bir CI script'iyle tag ve digest'i dev'e commit etmeyi, staging ve prod'a pull request ile promotion'ı, aynı dosyaya yazan iki pipeline'ın çakışmasını, Argo CD Image Updater'ın digest'i silmesini ve Source Hydrator'ı gerçek çıktılarla görüyoruz.
Çok Environment, Çok Uygulama: App of Apps, ApplicationSet Generator'ları ve AppProject
Çok sayıda uygulama ve environment'ı Argo CD'de yönetmenin yolu, Application'ları klasör yapısından üreten bir ApplicationSet'i App of Apps root'uyla Git'ten uygulamak ve sınırları AppProject ile çizmek. Bookstore'un api ve web uygulamalarını dev, staging ve prod için tek bir ApplicationSet ile üretiyor, RollingSync ile ortamları sırayla güncelliyor, AppProject'in yasak bir namespace'i reddetmesini ve preserveResourcesOnDeletion'ın etkisini gerçek çıktılarla görüyoruz.
Sync Wave'ler ve Hook'lar: Migration Job'ını Deploy'dan Önce Çalıştırmak
Argo CD'de migration Job'ını deploy'dan önce çalıştırmanın yolu onu bir hook yapmak ve sırayı sync wave'lerle vermek. Düz Job'ın ikinci sürümde immutable hatası vermesini, PreSync hook'unun boş bir ortamda veritabanından önce çalışıp başarısız olmasını, Sync hook'u ve wave -1/0/1 ile doğru sırayı, PostSync smoke test'ini, SyncFail ve PreDelete hook'larını ve expand-contract ile uyumu gerçek çıktılarla görüyoruz.
Argo CD'de Sync, Health ve Diff: Automated Sync, Prune, Self-Heal ve Sync Option'ları
Argo CD'de sync status Git ile cluster'ın aynı olup olmadığını, health status ise cluster'daki nesnelerin çalışıp çalışmadığını söyler; ikisi bağımsızdır. Synced ama Degraded bir deploy'u, self-heal'in elle yapılan scale'i bir saniyede geri almasını ama elle eklenen env değişkenini görmemesini, prune'un bir StatefulSet'i silmesini ve Prune=false, ignoreDifferences, RespectIgnoreDifferences ile sync option'larını gerçek çıktılarla görüyoruz.
Argo CD Kurulumu ve Mimarisi: İlk Application ile Bookstore'u kind Cluster'a Deploy Etmek
Argo CD, cluster içinde çalışıp bir Git repo'sundaki manifest'leri render eden, canlı nesnelerle karşılaştıran ve uygulayan bir controller grubu. Argo CD 3.6'yı kind cluster'ına kuruyor, repo-server, application-controller ve diğer component'lerin rolünü, CLI ile giriş ve ilk parolayı, Application CRD'sinin alanlarını ve Bookstore'u Git'ten deploy etmeyi görüyoruz; Synced görünüp hiçbir şey değiştirmeyen bir commit'i de yakalıyoruz.
GitOps Nedir? Push Tabanlı CD'den Pull Tabanlı Reconciliation'a ve Ne Zaman Gerekmez
GitOps, istenen durumun Git'te declarative olarak tutulduğu ve cluster içindeki bir agent'ın bu durumu sürekli çekip uyguladığı bir deploy modeli. Push tabanlı bir pipeline'ın drift'i neden göremediğini gerçek çıktılarla, OpenGitOps'un dört prensibini, oyuncak bir reconcile döngüsünü, repo düzeni kararlarını, Argo CD ile Flux farkını ve GitOps'un ne zaman gereksiz olduğunu görüyoruz.
Helm 3'ten Helm 4'e: Ne Değişti, Neyi Bozar ve Helm 3 EOL Takvimi
Helm 4, Helm 3 chart'larını ve release'lerini değiştirmeden yönetir; kırılan şeyler script'ler, plugin'ler ve post-renderer'lardır, Helm 3'ün security desteği ise 10 Şubat 2027'de biter. Helm 3.22 ile Helm 4.3'ü yan yana çalıştırıp server-side apply latching'ini, iki sürüm karışınca SSA'nın nasıl geri alındığını, flag ve log değişikliklerini, post-renderer'ın plugin'e dönüşmesini, deneysel Chart v3'ü ve Helm 2 dönemi bir chart'ı gerçek çıktılarla görüyor, bir geçiş checklist'i çıkarıyoruz.
Dependency'ler, OCI Registry ve Chart'ı Test Etmek: Chart.lock, helm push, lint, helm test ve CI
Chart dependency'leri Chart.yaml'da aralıkla tanımlanır ve Chart.lock ile sabitlenir; chart helm package ve helm push ile bir OCI registry'ye yayımlanır, ama aynı sürümü farklı içerikle yeniden push etmeyi registry engellemez. Bookstore chart'ına opsiyonel bir Valkey subchart'ı ve global.imageRegistry ekliyor, Helm 4'ün registry login ve digest ile kurulum davranışını, kubeconform, helm test ve chart-testing'i ve bunları çalıştıran bir GitHub Actions workflow'unu gerçek çıktılarla görüyoruz.
Release Yönetimi: install, upgrade --install, rollback, history, --wait ve Hook'larla Migration
helm upgrade --install her çalıştırmada aynı sonuca götüren deploy komutudur; pre-upgrade hook'u migration'ı Deployment'tan önce çalıştırır, ama rollback veritabanı migration'ını geri almaz. Bookstore'un EF Core migration bundle'ını SQL Server'a karşı hook olarak çalıştırıyor, hook'un üç gerçek başarısızlığını, Helm 4'ün kstatus tabanlı --wait'ini, --rollback-on-failure'ı, pending-upgrade'den kurtarmayı ve server-side apply çakışmalarını gerçek çıktılarla görüyoruz.