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.