{"id":34263,"date":"2025-11-14T02:40:53","date_gmt":"2025-11-13T23:40:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34263"},"modified":"2025-11-14T02:40:53","modified_gmt":"2025-11-13T23:40:53","slug":"digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/","title":{"rendered":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda h\u0131z ve g\u00fcvenilirlik, rekabet\u00e7i kalabilmek i\u00e7in temel unsurlard\u0131r. Geleneksel &#8220;b\u00fcy\u00fck patlama&#8221; (big bang) da\u011f\u0131t\u0131m yakla\u015f\u0131mlar\u0131, yeni bir s\u00fcr\u00fcm\u00fcn t\u00fcm kullan\u0131c\u0131 taban\u0131na ayn\u0131 anda sunulmas\u0131yla karakterize edilir. Bu y\u00f6ntem, potansiyel hatalar\u0131n veya performans sorunlar\u0131n\u0131n geni\u015f bir kitleyi etkileme riskini ta\u015f\u0131r ve geri d\u00f6n\u00fc\u015fleri karma\u015f\u0131k ve maliyetli hale getirebilir. \u0130\u015fte tam da bu noktada a\u015famal\u0131 da\u011f\u0131t\u0131m (progressive delivery) devreye girer. A\u015famal\u0131 da\u011f\u0131t\u0131m, yeni yaz\u0131l\u0131m s\u00fcr\u00fcmlerini kontroll\u00fc ve kademeli bir \u015fekilde kullan\u0131c\u0131lara ula\u015ft\u0131rarak riskleri minimize etmeyi, geri bildirimleri h\u0131zland\u0131rmay\u0131 ve genel kullan\u0131c\u0131 deneyimini iyile\u015ftirmeyi hedefler.<\/p>\n<p>Bu teknik makalede, DigitalOcean Kubernetes (DOKS) platformunda Flagger kullanarak a\u015famal\u0131 s\u00fcr\u00fcm da\u011f\u0131t\u0131m\u0131n\u0131 nas\u0131l ger\u00e7ekle\u015ftirece\u011fimizi ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fiz. Flagger, Kubernetes i\u00e7in geli\u015ftirilmi\u015f bir operat\u00f6r olup, hizmet a\u011f\u0131 (service mesh) veya ingress kontrolc\u00fcleri ile entegre olarak kanarya (canary) da\u011f\u0131t\u0131mlar\u0131, A\/B testleri ve mavi\/ye\u015fil (blue\/green) stratejilerini otomatikle\u015ftirir. DOKS&#8217;un sa\u011flad\u0131\u011f\u0131 y\u00f6netilen Kubernetes kolayl\u0131\u011f\u0131 ile Flagger&#8217;\u0131n g\u00fc\u00e7l\u00fc \u00f6zelliklerini birle\u015ftirerek, yaz\u0131l\u0131m da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi daha g\u00fcvenli, verimli ve otomatik hale getirebilirsiniz.<\/p>\n<h3>A\u015famal\u0131 Da\u011f\u0131t\u0131m\u0131 Anlamak: Neden \u00d6nemli?<\/h3>\n<p>A\u015famal\u0131 da\u011f\u0131t\u0131m, yeni bir uygulaman\u0131n veya \u00f6zelli\u011fin k\u00fc\u00e7\u00fck bir kullan\u0131c\u0131 alt k\u00fcmesine sunulmas\u0131 ve performans ile davran\u0131\u015f\u0131n\u0131n dikkatlice izlenmesi prensibine dayan\u0131r. Bu s\u00fcre\u00e7, olas\u0131 sorunlar\u0131n erken a\u015famada tespit edilmesine olanak tan\u0131r ve geni\u015f \u00e7apl\u0131 bir kesintiye yol a\u00e7madan d\u00fczeltmelerin yap\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>A\u015famal\u0131 Da\u011f\u0131t\u0131m Stratejileri:<\/h4>\n<p>*   <strong>Kanarya Da\u011f\u0131t\u0131mlar\u0131 (Canary Deployments):<\/strong> Yeni s\u00fcr\u00fcm (kanarya), trafi\u011fin k\u00fc\u00e7\u00fck bir y\u00fczdesine y\u00f6nlendirilirken, ana s\u00fcr\u00fcm trafi\u011fin \u00e7o\u011funu i\u015flemeye devam eder. Kanarya s\u00fcr\u00fcm\u00fc belirli bir s\u00fcre boyunca izlenir. Metrikler (hata oranlar\u0131, gecikme s\u00fcreleri vb.) kabul edilebilir s\u0131n\u0131rlar i\u00e7inde kal\u0131rsa, kanarya s\u00fcr\u00fcm\u00fcne y\u00f6nlendirilen trafik kademeli olarak art\u0131r\u0131l\u0131r. Aksi takdirde, trafik tamamen ana s\u00fcr\u00fcme geri y\u00f6nlendirilir ve kanarya s\u00fcr\u00fcm\u00fc geri al\u0131n\u0131r. Bu, Flagger&#8217;\u0131n en temel ve g\u00fc\u00e7l\u00fc kullan\u0131m durumudur.<br \/>\n*   <strong>A\/B Testleri:<\/strong> Kullan\u0131c\u0131lar\u0131n belirli \u00f6zelliklerine (\u00f6rne\u011fin, taray\u0131c\u0131 t\u00fcr\u00fc, co\u011frafi konum, \u00e7erezler) g\u00f6re trafi\u011fi farkl\u0131 s\u00fcr\u00fcmler aras\u0131nda b\u00f6lme stratejisidir. Bu, farkl\u0131 kullan\u0131c\u0131 segmentleri i\u00e7in farkl\u0131 \u00f6zelliklerin veya tasar\u0131mlar\u0131n etkisini \u00f6l\u00e7mek i\u00e7in kullan\u0131l\u0131r. Flagger, hizmet a\u011flar\u0131 arac\u0131l\u0131\u011f\u0131yla bu t\u00fcr testleri de destekleyebilir.<br \/>\n*   <strong>Mavi\/Ye\u015fil Da\u011f\u0131t\u0131mlar (Blue\/Green Deployments):<\/strong> \u0130ki tamamen ayr\u0131 ortam (mavi ve ye\u015fil) kullan\u0131l\u0131r. Bir ortam aktif (mavi) iken, yeni s\u00fcr\u00fcm pasif (ye\u015fil) ortama da\u011f\u0131t\u0131l\u0131r ve test edilir. Testler ba\u015far\u0131l\u0131 oldu\u011funda, trafik an\u0131nda ye\u015fil ortama y\u00f6nlendirilir ve mavi ortam pasif hale gelir. Bu, h\u0131zl\u0131 geri d\u00f6n\u00fc\u015fler sa\u011flasa da, iki tam ortam\u0131n maliyetini gerektirir. Flagger, bir dereceye kadar bu stratejiyi de otomatikle\u015ftirebilir, ancak kanarya da\u011f\u0131t\u0131mlar\u0131na daha fazla odaklanm\u0131\u015ft\u0131r.<\/p>\n<h4>A\u015famal\u0131 Da\u011f\u0131t\u0131m\u0131n Faydalar\u0131:<\/h4>\n<p>*   <strong>Risk Azaltma:<\/strong> Yeni s\u00fcr\u00fcmlerin potansiyel riskleri, k\u00fc\u00e7\u00fck bir kullan\u0131c\u0131 grubuna maruz b\u0131rak\u0131larak s\u0131n\u0131rlan\u0131r.<br \/>\n*   <strong>H\u0131zl\u0131 Geri Bildirim:<\/strong> Sorunlar veya performans d\u00fc\u015f\u00fc\u015fleri erken tespit edilir, bu da h\u0131zl\u0131 d\u00fczeltmelere olanak tan\u0131r.<br \/>\n*   <strong>Geli\u015ftirilmi\u015f Kullan\u0131c\u0131 Deneyimi:<\/strong> Son kullan\u0131c\u0131lar, b\u00fcy\u00fck kesintiler veya hatalarla kar\u015f\u0131la\u015fma olas\u0131l\u0131\u011f\u0131 daha az olan daha kararl\u0131 s\u00fcr\u00fcmler al\u0131r.<br \/>\n*   <strong>Otomatik Geri Alma:<\/strong> Hata durumunda sistem otomatik olarak \u00f6nceki kararl\u0131 s\u00fcr\u00fcme d\u00f6nebilir.<br \/>\n*   <strong>G\u00fcven ve Verimlilik:<\/strong> Geli\u015ftirme ekipleri, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin g\u00fcvenli oldu\u011fundan emin olarak daha h\u0131zl\u0131 ve daha s\u0131k da\u011f\u0131t\u0131m yapabilirler.<\/p>\n<h3>Flagger ile Tan\u0131\u015fmak: Otomatik A\u015famal\u0131 Da\u011f\u0131t\u0131m\u0131n Kalbi<\/h3>\n<p>Flagger, a\u015famal\u0131 da\u011f\u0131t\u0131m stratejilerini Kubernetes \u00fczerinde otomatikle\u015ftiren bir a\u00e7\u0131k kaynak operat\u00f6r\u00fcd\u00fcr. Temel amac\u0131, bir hizmet a\u011f\u0131 (Istio, Linkerd, AWS App Mesh) veya ingress kontrolc\u00fc (Nginx, Contour) ile entegre olarak trafik y\u00f6netimini ve metrik analizini birle\u015ftirmektir. Flagger, Kubernetes Custom Resource Definitions (CRD&#8217;ler) arac\u0131l\u0131\u011f\u0131yla tan\u0131mlanan kanarya veya A\/B test s\u00fcre\u00e7lerini y\u00f6netir.<\/p>\n<h4>Flagger Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h4>\n<p>1.  <strong>Kanarya Tan\u0131m\u0131:<\/strong> Geli\u015ftiriciler veya operasyon ekipleri, bir Kubernetes <code>Canary<\/code> CRD&#8217;si olu\u015fturarak uygulaman\u0131n hedef da\u011f\u0131t\u0131m\u0131n\u0131, hizmetini, trafik y\u00f6nlendirme mekanizmas\u0131n\u0131 (hizmet a\u011f\u0131 veya ingress) ve a\u015famal\u0131 da\u011f\u0131t\u0131m i\u00e7in kullan\u0131lacak metrikleri tan\u0131mlar.<br \/>\n2.  <strong>Otomatik \u0130zleme ve Trafik Y\u00f6nlendirme:<\/strong> Yeni bir uygulama s\u00fcr\u00fcm\u00fc da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda, Flagger bu de\u011fi\u015fikli\u011fi alg\u0131lar. Orijinal da\u011f\u0131t\u0131m\u0131n bir klonu olan bir &#8220;kanarya&#8221; da\u011f\u0131t\u0131m\u0131 olu\u015fturur. Ard\u0131ndan, hizmet a\u011f\u0131 veya ingress kontrolc\u00fcs\u00fc arac\u0131l\u0131\u011f\u0131yla trafi\u011fin k\u00fc\u00e7\u00fck bir y\u00fczdesini bu kanarya da\u011f\u0131t\u0131m\u0131na y\u00f6nlendirir.<br \/>\n3.  <strong>Metrik Analizi:<\/strong> Flagger, Prometheus gibi bir izleme sisteminden metrikleri (\u00f6rne\u011fin, HTTP hata oranlar\u0131, gecikme, CPU\/bellek kullan\u0131m\u0131) d\u00fczenli aral\u0131klarla sorgular. Bu metrikler, kanarya s\u00fcr\u00fcm\u00fcn\u00fcn sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 de\u011ferlendirmek i\u00e7in kullan\u0131l\u0131r.<br \/>\n4.  <strong>Kademeli Y\u00fckseltme veya Geri Alma:<\/strong><br \/>\n    *   Metrikler tan\u0131mlanan e\u015fik de\u011ferlerinin alt\u0131ndaysa, Flagger kademeli olarak kanarya s\u00fcr\u00fcm\u00fcne y\u00f6nlendirilen trafik y\u00fczdesini art\u0131r\u0131r.<br \/>\n    *   Metrikler e\u015fik de\u011ferlerini a\u015farsa (\u00f6rne\u011fin, hata oran\u0131 \u00e7ok y\u00fcksekse), Flagger otomatik olarak t\u00fcm trafi\u011fi \u00f6nceki kararl\u0131 s\u00fcr\u00fcme geri y\u00f6nlendirir ve kanarya da\u011f\u0131t\u0131m\u0131n\u0131 geri al\u0131r.<br \/>\n    *   T\u00fcm trafik kanarya s\u00fcr\u00fcm\u00fcne ba\u015far\u0131yla y\u00f6nlendirildi\u011finde ve metrikler iyi kald\u0131\u011f\u0131nda, Flagger orijinal da\u011f\u0131t\u0131m\u0131 yeni s\u00fcr\u00fcmle g\u00fcnceller ve kanarya da\u011f\u0131t\u0131m\u0131n\u0131 temizler. Bu, yeni s\u00fcr\u00fcm\u00fcn &#8220;kararl\u0131&#8221; hale geldi\u011fi anlam\u0131na gelir.<\/p>\n<h4>Flagger&#8217;\u0131n Temel \u00d6zellikleri:<\/h4>\n<p>*   <strong>\u00c7oklu Trafik Y\u00f6nlendirme Entegrasyonlar\u0131:<\/strong> Istio, Linkerd, AWS App Mesh, Nginx Ingress, Contour, Gloo Edge gibi pop\u00fcler hizmet a\u011flar\u0131 ve ingress kontrolc\u00fcleri ile uyumludur.<br \/>\n*   <strong>Prometheus Entegrasyonu:<\/strong> Metrik tabanl\u0131 analiz i\u00e7in end\u00fcstri standard\u0131 Prometheus ile derinlemesine entegrasyon.<br \/>\n*   <strong>Web Kancalar\u0131 (Webhooks):<\/strong> Da\u011f\u0131t\u0131m ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn farkl\u0131 a\u015famalar\u0131nda (ba\u015flang\u0131\u00e7, ilerleme, ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z) \u00f6zel eylemleri tetiklemek i\u00e7in kullan\u0131labilir. Bu, CI\/CD boru hatlar\u0131yla veya bildirim sistemleriyle entegrasyonu sa\u011flar.<br \/>\n*   <strong>Otomatik Geri Alma:<\/strong> Tan\u0131mlanan e\u015fik de\u011ferleri a\u015f\u0131ld\u0131\u011f\u0131nda veya manuel olarak tetiklendi\u011finde otomatik geri alma yetene\u011fi.<br \/>\n*   <strong>A\/B Test Yetenekleri:<\/strong> \u0130stio gibi hizmet a\u011flar\u0131n\u0131n geli\u015fmi\u015f trafik y\u00f6nlendirme \u00f6zelliklerini kullanarak ba\u015fl\u0131k veya \u00e7erez tabanl\u0131 A\/B testleri yapabilir.<\/p>\n<h3>DigitalOcean Kubernetes (DOKS): G\u00fcvenilir Platform<\/h3>\n<p>DigitalOcean Kubernetes (DOKS), geli\u015ftiricilerin ve \u015firketlerin Kubernetes k\u00fcmelerini kolayca olu\u015fturmas\u0131n\u0131, \u00f6l\u00e7eklendirmesini ve y\u00f6netmesini sa\u011flayan y\u00f6netilen bir Kubernetes hizmetidir. DOKS, karma\u015f\u0131k altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131rarak geli\u015ftiricilerin uygulamalar\u0131na odaklanmas\u0131na olanak tan\u0131r.<\/p>\n<h4>DOKS&#8217;un Avantajlar\u0131:<\/h4>\n<p>*   <strong>Kolay Kurulum ve Y\u00f6netim:<\/strong> Sezgisel kullan\u0131c\u0131 aray\u00fcz\u00fc ve <code>doctl<\/code> CLI arac\u0131 arac\u0131l\u0131\u011f\u0131yla h\u0131zl\u0131 k\u00fcme olu\u015fturma ve y\u00f6netimi.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> \u0130htiya\u00e7 duyuldu\u011funda d\u00fc\u011f\u00fcm havuzlar\u0131n\u0131 kolayca \u00f6l\u00e7eklendirme yetene\u011fi.<br \/>\n*   <strong>Entegrasyonlar:<\/strong> DigitalOcean&#8217;\u0131n di\u011fer hizmetleriyle (Load Balancer, Block Storage, S3 uyumlu Spaces depolama) sorunsuz entegrasyon.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Uygun fiyatland\u0131rma modeli, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler i\u00e7in idealdir.<br \/>\n*   <strong>G\u00fcvenilirlik:<\/strong> DigitalOcean&#8217;\u0131n sa\u011flam altyap\u0131s\u0131 \u00fczerinde y\u00fcksek kullan\u0131labilirlik.<\/p>\n<p>Flagger gibi bir ara\u00e7la a\u015famal\u0131 da\u011f\u0131t\u0131m yaparken, g\u00fcvenilir ve y\u00f6netimi kolay bir Kubernetes platformuna sahip olmak kritik \u00f6neme sahiptir. DOKS, bu gereksinimleri fazlas\u0131yla kar\u015f\u0131lar ve Flagger ile m\u00fckemmel bir uyum sa\u011flar.<\/p>\n<h3>\u00d6n Gereksinimler ve Kurulum<\/h3>\n<p>Flagger&#8217;\u0131 DOKS \u00fczerinde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in belirli ara\u00e7lara ve bile\u015fenlere ihtiyac\u0131m\u0131z olacak.<\/p>\n<h4>1. DigitalOcean Kubernetes K\u00fcmesi Olu\u015fturma:<\/h4>\n<p>\u00d6ncelikle bir DOKS k\u00fcmesine ihtiyac\u0131n\u0131z var. DigitalOcean kontrol panelinden veya <code>doctl<\/code> komut sat\u0131r\u0131 arac\u0131n\u0131 kullanarak bir k\u00fcme olu\u015fturabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">doctl kubernetes cluster create <k\u00fcme-ad\u0131> --region nyc1 --version 1.28.2-do.0 --node-pool name=worker-pool,size=s-2vcpu-4gb,count=3<\/code><\/pre>\n<p>K\u00fcmeniz olu\u015fturulduktan sonra, <code>kubectl<\/code>&#8216;in k\u00fcmenize eri\u015febilmesi i\u00e7in yap\u0131land\u0131rma dosyas\u0131n\u0131 indirmeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">doctl kubernetes cluster kubeconfig save <k\u00fcme-ad\u0131>\nkubectl config use-context do-nyc1-<k\u00fcme-ad\u0131><\/code><\/pre>\n<h4>2. Helm Kurulumu:<\/h4>\n<p>Helm, Kubernetes uygulamalar\u0131n\u0131 y\u00f6netmek i\u00e7in bir paket y\u00f6neticisidir. Flagger ve hizmet a\u011f\u0131n\u0131 Helm ile kuraca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">curl https:\/\/raw.githubusercontent.com\/helm\/helm\/main\/scripts\/get-helm-3 | bash<\/code><\/pre>\n<h4>3. Hizmet A\u011f\u0131 Kurulumu (Istio \u00d6rne\u011fi):<\/h4>\n<p>Flagger, trafi\u011fi y\u00f6nlendirmek ve metrikleri toplamak i\u00e7in bir hizmet a\u011f\u0131na veya geli\u015fmi\u015f bir ingress kontrolc\u00fcs\u00fcne ihtiya\u00e7 duyar. Bu makalede, en pop\u00fcler hizmet a\u011flar\u0131ndan biri olan Istio&#8217;yu kullanaca\u011f\u0131z. Istio, karma\u015f\u0131k trafik y\u00f6nlendirme, g\u00f6zlemlenebilirlik ve g\u00fcvenlik yetenekleri sunar.<\/p>\n<p><strong>Istio CLI Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">curl -L https:\/\/istio.io\/downloadIstio | sh -\nexport PATH=\"$PATH:$(pwd)\/istio-<version>\/bin\"<\/code><\/pre>\n<p><strong>Istio Kurulumu:<\/strong><br \/>\n<code>istioctl<\/code> kullanarak Istio&#8217;yu DOKS k\u00fcmenize kurun. <code>demo<\/code> profili, \u00e7o\u011fu kullan\u0131m durumu i\u00e7in yeterli olan temel bile\u015fenleri i\u00e7erir.<\/p>\n<pre><code class=\"language-bash\">istioctl install --set profile=demo -y<\/code><\/pre>\n<p>Bu komut, Istio kontrol d\u00fczlemini (Pilot, Citadel, Galley, Sidecar Injector vb.) ve varsay\u0131lan olarak Prometheus ve Grafana gibi g\u00f6zlemlenebilirlik ara\u00e7lar\u0131n\u0131 kurar.<\/p>\n<p><strong>Uygulama Ad Alan\u0131n\u0131 Istio&#8217;ya Enjekte Etme:<\/strong><br \/>\nUygulamalar\u0131n\u0131z\u0131n Istio hizmet a\u011f\u0131na dahil olmas\u0131 i\u00e7in uygulaman\u0131z\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 ad alan\u0131na otomatik sidecar enjeksiyonunu etkinle\u015ftirmeniz gerekir.<\/p>\n<pre><code class=\"language-bash\">kubectl label namespace default istio-injection=enabled --overwrite<\/code><\/pre>\n<p><em>Not: Kendi ad alan\u0131n\u0131z\u0131 kullan\u0131yorsan\u0131z, <code>default<\/code> yerine kendi ad alan\u0131n\u0131z\u0131n ad\u0131n\u0131 kullan\u0131n.<\/em><\/p>\n<h4>4. Flagger Kurulumu:<\/h4>\n<p>Flagger&#8217;\u0131 Helm kullanarak kurabiliriz.<\/p>\n<p><strong>Flagger Helm Deposunu Ekleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">helm repo add flagger https:\/\/flagger.app\nhelm repo update<\/code><\/pre>\n<p><strong>Flagger&#8217;\u0131 Kurma:<\/strong><br \/>\nFlagger&#8217;\u0131 Istio ile \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131rmam\u0131z gerekiyor.<\/p>\n<pre><code class=\"language-bash\">helm upgrade -i flagger flagger\/flagger \\\n--namespace istio-system \\\n--set meshProvider=istio \\\n--set metricsServer=http:\/\/prometheus.istio-system:9090 \\\n--set ingress.className=istio<\/code><\/pre>\n<p>*   <code>--namespace istio-system<\/code>: Flagger&#8217;\u0131 Istio&#8217;nun kurulu oldu\u011fu ad alan\u0131na kurar\u0131z.<br \/>\n*   <code>--set meshProvider=istio<\/code>: Flagger&#8217;a Istio ile \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtiriz.<br \/>\n*   <code>--set metricsServer=http:\/\/prometheus.istio-system:9090<\/code>: Flagger&#8217;\u0131n metrikleri almak i\u00e7in kullanaca\u011f\u0131 Prometheus sunucusunun adresini belirtiriz. Istio&#8217;nun <code>demo<\/code> profili ile kurulan Prometheus genellikle bu adreste bulunur.<br \/>\n*   <code>--set ingress.className=istio<\/code>: E\u011fer Istio Ingress Gateway kullan\u0131yorsak, Flagger&#8217;\u0131n bunu tan\u0131mas\u0131n\u0131 sa\u011flar\u0131z.<\/p>\n<p>T\u00fcm bile\u015fenler ba\u015far\u0131yla kuruldu\u011funda, Flagger&#8217;\u0131n Kubernetes k\u00fcmenizde \u00e7al\u0131\u015fmaya haz\u0131r olmas\u0131 gerekir.<\/p>\n<h3>Flagger ile A\u015famal\u0131 Da\u011f\u0131t\u0131m Uygulamas\u0131<\/h3>\n<p>\u015eimdi, basit bir web uygulamas\u0131n\u0131 Flagger kullanarak a\u015famal\u0131 olarak nas\u0131l da\u011f\u0131taca\u011f\u0131m\u0131za dair bir \u00f6rnek senaryo olu\u015ftural\u0131m. Bir Nginx tabanl\u0131 uygulama kullanaca\u011f\u0131z ve s\u00fcr\u00fcm bilgilerini g\u00f6sterecek \u015fekilde yap\u0131land\u0131raca\u011f\u0131z.<\/p>\n<h4>1. \u00d6rnek Uygulama Da\u011f\u0131t\u0131m\u0131 (v1):<\/h4>\n<p>\u0130lk olarak, uygulamam\u0131z\u0131n ilk kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc (v1) da\u011f\u0131tal\u0131m.<\/p>\n<pre><code class=\"language-yaml\"># app-v1.yaml\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: podinfo\n  labels:\n    app: podinfo\nspec:\n  minReadySeconds: 5\n  selector:\n    matchLabels:\n      app: podinfo\n  template:\n    metadata:\n      labels:\n        app: podinfo\n    spec:\n      containers:\n        - name: podinfo\n          image: stefanprodan\/podinfo:6.0.0 # v1 s\u00fcr\u00fcm\u00fcm\u00fcz\n          imagePullPolicy: IfNotPresent\n          ports:\n            - containerPort: 9898\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: podinfo\n  labels:\n    app: podinfo\nspec:\n  type: ClusterIP\n  selector:\n    app: podinfo\n  ports:\n    - name: http\n      port: 9898\n      protocol: TCP\n      targetPort: 9898\n---\napiVersion: networking.istio.io\/v1beta1\nkind: Gateway\nmetadata:\n  name: podinfo-gateway\nspec:\n  selector:\n    istio: ingressgateway # use Istio default gateway\n  servers:\n    - port:\n        number: 80\n        name: http\n        protocol: HTTP\n      hosts:\n        - \"*\" # T\u00fcm hostlar i\u00e7in\n---\napiVersion: networking.istio.io\/v1beta1\nkind: VirtualService\nmetadata:\n  name: podinfo\nspec:\n  hosts:\n    - \"*\" # T\u00fcm hostlar i\u00e7in\n  gateways:\n    - podinfo-gateway\n  http:\n    - name: \"podinfo-route\"\n      route:\n        - destination:\n            host: podinfo\n            port:\n              number: 9898<\/code><\/pre>\n<p>Bu YAML dosyas\u0131n\u0131 <code>app-v1.yaml<\/code> olarak kaydedin ve uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f app-v1.yaml<\/code><\/pre>\n<p>\u015eimdi Istio Ingress Gateway IP adresini alarak uygulamaya eri\u015febilirsiniz:<\/p>\n<pre><code class=\"language-bash\">kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'<\/code><\/pre>\n<p>Bu IP adresini taray\u0131c\u0131n\u0131zda a\u00e7t\u0131\u011f\u0131n\u0131zda <code>podinfo<\/code> uygulamas\u0131n\u0131n v6.0.0 s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6rmelisiniz.<\/p>\n<h4>2. <code>Canary<\/code> Kayna\u011f\u0131n\u0131 Tan\u0131mlama:<\/h4>\n<p>Flagger&#8217;\u0131n bu uygulamay\u0131 y\u00f6netmesini sa\u011flamak i\u00e7in bir <code>Canary<\/code> CRD&#8217;si olu\u015fturmam\u0131z gerekiyor. Bu CRD, Flagger&#8217;a hangi da\u011f\u0131t\u0131m\u0131 y\u00f6netece\u011fini, trafi\u011fi nas\u0131l b\u00f6lece\u011fini ve hangi metrikleri izleyece\u011fini s\u00f6yler.<\/p>\n<pre><code class=\"language-yaml\"># podinfo-canary.yaml\napiVersion: flagger.app\/v1beta1\nkind: Canary\nmetadata:\n  name: podinfo\n  namespace: default\nspec:\n  provider: istio # Hizmet a\u011f\u0131 sa\u011flay\u0131c\u0131m\u0131z Istio\n  targetRef:\n    apiVersion: apps\/v1\n    kind: Deployment\n    name: podinfo # Y\u00f6netilecek da\u011f\u0131t\u0131m\n  service:\n    port: 9898 # Uygulaman\u0131n dinledi\u011fi port\n    targetPort: 9898\n    gateways:\n      - podinfo-gateway # Kullan\u0131lacak Istio Gateway\n    hosts:\n      - \"*\" # VirtualService'deki hostlar ile e\u015fle\u015fmeli\n  analysis:\n    interval: 15s # Her 15 saniyede bir metrikleri kontrol et\n    threshold: 5 # 5 ard\u0131\u015f\u0131k ba\u015far\u0131s\u0131zl\u0131kta geri al\n    maxWeight: 50 # Kanarya da\u011f\u0131t\u0131m\u0131na en fazla %50 trafik g\u00f6nder\n    stepWeight: 5 # Her ad\u0131mda trafi\u011fi %5 art\u0131r\n    metrics:\n      - name: request-success-rate\n        thresholdRange:\n          min: 99 # Ba\u015far\u0131 oran\u0131 %99'un alt\u0131nda d\u00fc\u015ferse ba\u015far\u0131s\u0131z say\n        interval: 1m # Son 1 dakika i\u00e7indeki ba\u015far\u0131 oran\u0131n\u0131 kontrol et\n      - name: request-duration\n        thresholdRange:\n          max: 500 # \u0130stek s\u00fcresi 500ms'in \u00fczerine \u00e7\u0131karsa ba\u015far\u0131s\u0131z say\n        interval: 1m\n    webhooks:\n      - name: \"load-test\"\n        type: \"pre-rollout\" # Kanarya da\u011f\u0131t\u0131m\u0131 ba\u015flamadan \u00f6nce \u00e7al\u0131\u015ft\u0131r\n        url: \"http:\/\/flagger-loadtester.istio-system:80\/delay?delay=10s\" # \u00d6rnek bir y\u00fck testi webhook'u\n        timeout: 5s\n        metadata:\n          type: bash\n          cmd: \"curl -sd 'test' http:\/\/podinfo-canary.default:9898\/status\"<\/code><\/pre>\n<p>Bu YAML dosyas\u0131n\u0131 <code>podinfo-canary.yaml<\/code> olarak kaydedin ve uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f podinfo-canary.yaml<\/code><\/pre>\n<p>Flagger, bu <code>Canary<\/code> kayna\u011f\u0131n\u0131 alg\u0131layacak ve <code>podinfo<\/code> da\u011f\u0131t\u0131m\u0131n\u0131z\u0131 y\u00f6netmeye ba\u015flayacakt\u0131r. <code>kubectl get canary<\/code> komutu ile durumunu kontrol edebilirsiniz. \u0130lk ba\u015fta <code>Initialized<\/code> durumunda olacakt\u0131r.<\/p>\n<p>Flagger, <code>podinfo-primary<\/code> ad\u0131nda yeni bir da\u011f\u0131t\u0131m olu\u015fturacak ve mevcut <code>podinfo<\/code> da\u011f\u0131t\u0131m\u0131n\u0131 <code>podinfo-primary<\/code>&#8216;nin bir kopyas\u0131 haline getirecektir. Ayr\u0131ca <code>podinfo-canary<\/code> ad\u0131nda bo\u015f bir da\u011f\u0131t\u0131m ve <code>podinfo-canary<\/code> ad\u0131nda bir hizmet olu\u015fturacakt\u0131r. Istio <code>VirtualService<\/code>&#8216;i de g\u00fcncelleyerek trafi\u011fi <code>podinfo-primary<\/code>&#8216;e y\u00f6nlendirecektir.<\/p>\n<h4>3. Kanarya Da\u011f\u0131t\u0131m\u0131n\u0131 Ba\u015flatma (v2):<\/h4>\n<p>\u015eimdi uygulamam\u0131z\u0131n yeni bir s\u00fcr\u00fcm\u00fcn\u00fc (v2) da\u011f\u0131tarak Flagger&#8217;\u0131n kanarya s\u00fcrecini nas\u0131l y\u00f6netti\u011fini g\u00f6relim. Tek yapman\u0131z gereken orijinal <code>podinfo<\/code> da\u011f\u0131t\u0131m\u0131n\u0131n imaj etiketini de\u011fi\u015ftirmektir. Flagger bu de\u011fi\u015fikli\u011fi alg\u0131layacak ve kanarya s\u00fcrecini otomatik olarak ba\u015flatacakt\u0131r.<\/p>\n<p><code>app-v1.yaml<\/code> dosyas\u0131n\u0131 d\u00fczenleyin veya yeni bir <code>app-v2.yaml<\/code> dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-yaml\"># app-v2.yaml - Sadece imaj etiketini de\u011fi\u015ftiriyoruz\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: podinfo\n  labels:\n    app: podinfo\nspec:\n  minReadySeconds: 5\n  selector:\n    matchLabels:\n      app: podinfo\n  template:\n    metadata:\n      labels:\n        app: podinfo\n    spec:\n      containers:\n        - name: podinfo\n          image: stefanprodan\/podinfo:6.0.1 # v2 s\u00fcr\u00fcm\u00fcm\u00fcz\n          imagePullPolicy: IfNotPresent\n          ports:\n            - containerPort: 9898<\/code><\/pre>\n<p>Bu dosyay\u0131 uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f app-v2.yaml<\/code><\/pre>\n<p><strong>Flagger&#8217;\u0131n \u0130\u015f Ak\u0131\u015f\u0131:<\/strong><\/p>\n<p>1.  Flagger, <code>podinfo<\/code> da\u011f\u0131t\u0131m\u0131ndaki imaj de\u011fi\u015fikli\u011fini alg\u0131lar.<br \/>\n2.  <code>podinfo-canary<\/code> da\u011f\u0131t\u0131m\u0131n\u0131 <code>stefanprodan\/podinfo:6.0.1<\/code> imaj\u0131 ile g\u00fcnceller ve \u00f6l\u00e7eklendirir.<br \/>\n3.  Istio <code>VirtualService<\/code>&#8216;ini g\u00fcncelleyerek trafi\u011fin %5&#8217;ini <code>podinfo-canary<\/code>&#8216;e y\u00f6nlendirir.<br \/>\n4.  Belirlenen <code>interval<\/code> (15 saniye) boyunca metrikleri (ba\u015far\u0131 oran\u0131, gecikme) izler.<br \/>\n5.  Metrikler iyi durumdaysa, trafi\u011fi %5 daha art\u0131r\u0131r (\u015fimdi %10).<br \/>\n6.  Bu ad\u0131mlar\u0131 <code>maxWeight<\/code> (%50) de\u011ferine ula\u015fana kadar tekrarlar.<br \/>\n7.  <code>maxWeight<\/code> de\u011ferine ula\u015ft\u0131\u011f\u0131nda ve metrikler hala iyiyse, Flagger <code>podinfo-primary<\/code> da\u011f\u0131t\u0131m\u0131n\u0131 da <code>stefanprodan\/podinfo:6.0.1<\/code> imaj\u0131yla g\u00fcnceller.<br \/>\n8.  T\u00fcm trafik <code>podinfo-primary<\/code>&#8216;e y\u00f6nlendirilir ve <code>podinfo-canary<\/code> da\u011f\u0131t\u0131m\u0131 k\u00fc\u00e7\u00fclt\u00fcl\u00fcr. Kanarya s\u00fcreci ba\u015far\u0131yla tamamlan\u0131r.<\/p>\n<p><strong>S\u00fcreci G\u00f6zlemleme:<\/strong><\/p>\n<p>Flagger&#8217;\u0131n ilerlemesini <code>kubectl get canary podinfo -w<\/code> komutu ile izleyebilirsiniz. <code>status.phase<\/code> alan\u0131 <code>Succeeded<\/code> olana kadar de\u011fi\u015fimi takip edecektir.<\/p>\n<pre><code class=\"language-bash\">kubectl get canary podinfo -w<\/code><\/pre>\n<p>Ayr\u0131ca Flagger&#8217;\u0131n loglar\u0131n\u0131 da takip edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">kubectl logs -f deployment\/flagger -n istio-system<\/code><\/pre>\n<p>Uygulaman\u0131n eri\u015fim IP&#8217;sinden istek att\u0131\u011f\u0131n\u0131zda, trafi\u011fin bir k\u0131sm\u0131n\u0131n yeni s\u00fcr\u00fcme y\u00f6nlendirildi\u011fini, bir k\u0131sm\u0131n\u0131n eski s\u00fcr\u00fcme gitti\u011fini g\u00f6rebilirsiniz. Yeni s\u00fcr\u00fcme y\u00f6nlendirilen isteklerde <code>6.0.1<\/code> s\u00fcr\u00fcm\u00fcn\u00fc, eski s\u00fcr\u00fcme y\u00f6nlendirilen isteklerde ise <code>6.0.0<\/code> s\u00fcr\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcrecektir. Trafik y\u00fczdesi artt\u0131k\u00e7a, <code>6.0.1<\/code>&#8216;i g\u00f6rme olas\u0131l\u0131\u011f\u0131n\u0131z artacakt\u0131r.<\/p>\n<p><strong>Geri Alma Senaryosu:<\/strong><\/p>\n<p>E\u011fer kanarya da\u011f\u0131t\u0131m\u0131 s\u0131ras\u0131nda metrikler (\u00f6rne\u011fin, hata oran\u0131) tan\u0131mlanan e\u015fik de\u011ferlerini a\u015farsa, Flagger otomatik olarak t\u00fcm trafi\u011fi \u00f6nceki kararl\u0131 s\u00fcr\u00fcme (v1) geri y\u00f6nlendirecek ve <code>podinfo<\/code> da\u011f\u0131t\u0131m\u0131n\u0131 eski imaj etiketine geri alacakt\u0131r. <code>kubectl get canary podinfo -w<\/code> komutunda <code>status.phase<\/code> alan\u0131n\u0131n <code>Failed<\/code> ve ard\u0131ndan <code>RolledBack<\/code> oldu\u011funu g\u00f6receksiniz. Bu, a\u015famal\u0131 da\u011f\u0131t\u0131m\u0131n en \u00f6nemli g\u00fcvenlik mekanizmalar\u0131ndan biridir.<\/p>\n<h3>Geli\u015fmi\u015f Flagger \u00d6zellikleri<\/h3>\n<p>Flagger, basit kanarya da\u011f\u0131t\u0131mlar\u0131n\u0131n \u00f6tesinde bir\u00e7ok geli\u015fmi\u015f \u00f6zellik sunar:<\/p>\n<p>*   <strong>A\/B Testleri:<\/strong> Istio gibi hizmet a\u011flar\u0131n\u0131n geli\u015fmi\u015f trafik y\u00f6nlendirme kurallar\u0131n\u0131 kullanarak, HTTP ba\u015fl\u0131klar\u0131 veya \u00e7erezlere g\u00f6re farkl\u0131 kullan\u0131c\u0131 gruplar\u0131na farkl\u0131 s\u00fcr\u00fcmler sunabilirsiniz. <code>Canary<\/code> CRD&#8217;sinde <code>analysis.match<\/code> alan\u0131 ile bu kurallar\u0131 tan\u0131mlayabilirsiniz.<br \/>\n*   <strong>\u00d6zel Metrikler:<\/strong> Flagger&#8217;\u0131n varsay\u0131lan Prometheus sorgular\u0131n\u0131n yan\u0131 s\u0131ra, uygulaman\u0131za \u00f6zel metrikleri de tan\u0131mlayabilirsiniz. \u00d6rne\u011fin, uygulaman\u0131z\u0131n belirli bir i\u015f mant\u0131\u011f\u0131yla ilgili \u00f6zel bir saya\u00e7 veya g\u00f6stergeyi izleyebilirsiniz.<br \/>\n*   <strong>Web Kancalar\u0131 (Webhooks):<\/strong> Da\u011f\u0131t\u0131m\u0131n farkl\u0131 a\u015famalar\u0131nda (\u00f6rne\u011fin, <code>pre-rollout<\/code>, <code>post-rollout<\/code>, <code>rollback<\/code>) harici sistemleri tetikleyebilirsiniz. Bu, otomatik testleri \u00e7al\u0131\u015ft\u0131rmak, Slack veya Teams&#8217;e bildirim g\u00f6ndermek, CI\/CD boru hatlar\u0131n\u0131 entegre etmek i\u00e7in kullan\u0131labilir.<br \/>\n*   <strong>Manuel \u0130lerleme\/Geri Alma:<\/strong> Flagger&#8217;\u0131n otomatik analizine ek olarak, <code>kubectl annotate canary podinfo flagger.app\/promote=true<\/code> veya <code>flagger.app\/rollback=true<\/code> gibi komutlarla kanarya da\u011f\u0131t\u0131m\u0131n\u0131 manuel olarak ilerletebilir veya geri alabilirsiniz.<br \/>\n*   <strong>Mavi\/Ye\u015fil Da\u011f\u0131t\u0131mlar:<\/strong> Flagger, Istio veya Nginx Ingress gibi sa\u011flay\u0131c\u0131larla mavi\/ye\u015fil da\u011f\u0131t\u0131m stratejilerini de destekler. Bu, trafi\u011fi an\u0131nda yeni s\u00fcr\u00fcme ge\u00e7irme yetene\u011fi sunar.<\/p>\n<h3>En \u0130yi Uygulamalar ve Dikkat Edilmesi Gerekenler<\/h3>\n<p>Flagger ile a\u015famal\u0131 da\u011f\u0131t\u0131m yaparken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 en iyi uygulamalar ve \u00f6nemli noktalar:<\/p>\n<p>*   <strong>Kapsaml\u0131 G\u00f6zlemlenebilirlik:<\/strong> Prometheus ve Grafana gibi ara\u00e7larla uygulaman\u0131z\u0131n metriklerini, loglar\u0131n\u0131 ve izlemelerini (traces) kapsaml\u0131 bir \u015fekilde izleyin. Flagger&#8217;\u0131n do\u011fru kararlar verebilmesi i\u00e7in do\u011fru ve anlaml\u0131 metrikler kritik \u00f6neme sahiptir.<br \/>\n*   <strong>Anlaml\u0131 Metrikler ve E\u015fikleri:<\/strong> Hata oranlar\u0131, gecikme s\u00fcreleri, CPU\/bellek kullan\u0131m\u0131 gibi temel metriklerin yan\u0131 s\u0131ra, uygulaman\u0131z\u0131n i\u015flevselli\u011fiyle ilgili \u00f6zel metrikleri de izleyin. E\u015fik de\u011ferlerini dikkatlice belirleyin; \u00e7ok s\u0131k\u0131 e\u015fikler gereksiz geri almalara, \u00e7ok gev\u015fek e\u015fikler ise sorunlu s\u00fcr\u00fcmlerin ilerlemesine yol a\u00e7abilir.<br \/>\n*   <strong>Otomatik Testler:<\/strong> Kanarya da\u011f\u0131t\u0131m\u0131 ba\u015flamadan \u00f6nce veya s\u0131ras\u0131nda otomatik entegrasyon ve y\u00fck testlerini tetiklemek i\u00e7in Flagger&#8217;\u0131n webhook \u00f6zelliklerini kullan\u0131n. Bu, manuel m\u00fcdahaleyi azalt\u0131r ve g\u00fcveni art\u0131r\u0131r.<br \/>\n*   <strong>GitOps Yakla\u015f\u0131m\u0131:<\/strong> T\u00fcm Kubernetes ve Flagger yap\u0131land\u0131rmalar\u0131n\u0131z\u0131 Git versiyon kontrol\u00fcnde saklay\u0131n. GitOps, altyap\u0131n\u0131z\u0131n ve uygulamalar\u0131n\u0131z\u0131n durumunu Git deposuyla senkronize ederek da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini \u015feffaf, denetlenebilir ve geri al\u0131nabilir hale getirir.<br \/>\n*   <strong>Kaynak Y\u00f6netimi:<\/strong> DOKS k\u00fcmenizin, hizmet a\u011f\u0131, Flagger ve uygulamalar\u0131n\u0131z i\u00e7in yeterli kayna\u011fa (CPU, bellek) sahip oldu\u011fundan emin olun. \u00d6zellikle kanarya da\u011f\u0131t\u0131m\u0131 s\u0131ras\u0131nda ek bir pod seti \u00e7al\u0131\u015facakt\u0131r.<br \/>\n*   <strong>K\u00fcme G\u00fcvenli\u011fi:<\/strong> Kubernetes k\u00fcmenizin g\u00fcvenli\u011fini sa\u011flamak i\u00e7in RBAC (Rol Tabanl\u0131 Eri\u015fim Kontrol\u00fc), a\u011f politikalar\u0131 ve g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131 uygulay\u0131n.<br \/>\n*   <strong>Y\u00fck Testleri:<\/strong> Da\u011f\u0131t\u0131m \u00f6ncesinde veya kanarya a\u015famas\u0131nda uygulaman\u0131z\u0131n yeni s\u00fcr\u00fcm\u00fcn\u00fc ger\u00e7ek d\u00fcnya y\u00fck senaryolar\u0131yla test edin. Bu, performans darbo\u011fazlar\u0131n\u0131 veya \u00f6l\u00e7eklenebilirlik sorunlar\u0131n\u0131 ortaya \u00e7\u0131karabilir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, DigitalOcean Kubernetes (DOKS) \u00fczerinde Flagger kullanarak a\u015famal\u0131 s\u00fcr\u00fcm da\u011f\u0131t\u0131m\u0131n\u0131 nas\u0131l uygulayaca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde ele ald\u0131k. Flagger&#8217;\u0131n temel \u00e7al\u0131\u015fma prensiplerini, kanarya da\u011f\u0131t\u0131m stratejisini ve DOKS&#8217;un sa\u011flad\u0131\u011f\u0131 kolayl\u0131klar\u0131 birle\u015ftirerek, yaz\u0131l\u0131m da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi daha g\u00fcvenli, verimli ve otomatik hale getirebilece\u011finizi g\u00f6sterdik.<\/p>\n<p>A\u015famal\u0131 da\u011f\u0131t\u0131m, modern DevOps uygulamalar\u0131n\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Flagger gibi ara\u00e7lar, bu karma\u015f\u0131k s\u00fcre\u00e7leri basitle\u015ftirerek geli\u015ftiricilerin ve operasyon ekiplerinin daha s\u0131k, daha h\u0131zl\u0131 ve daha g\u00fcvenle da\u011f\u0131t\u0131m yapmas\u0131na olanak tan\u0131r. DOKS gibi y\u00f6netilen bir Kubernetes hizmetiyle birle\u015fti\u011finde, bu g\u00fc\u00e7 birle\u015fimi, altyap\u0131 y\u00f6netiminin y\u00fck\u00fcn\u00fc azalt\u0131rken, yenilik\u00e7i uygulamalar\u0131 son kullan\u0131c\u0131lara daha sorunsuz bir \u015fekilde ula\u015ft\u0131rman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>Uygulaman\u0131z\u0131n kritikli\u011fi ne olursa olsun, Flagger ile a\u015famal\u0131 da\u011f\u0131t\u0131m stratejilerini benimsemek, hatalar\u0131n etkisini en aza indirirken, kullan\u0131c\u0131 deneyimini s\u00fcrekli olarak iyile\u015ftirmek i\u00e7in \u00f6nemli bir ad\u0131md\u0131r. Bu sayede, yaz\u0131l\u0131m teslimat s\u00fcre\u00e7lerinizde daha fazla kontrol, daha az risk ve daha y\u00fcksek bir g\u00fcven seviyesi elde edeceksiniz.<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?\nYaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda h\u0131z ve g\u00fcvenilir","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1328],"tags":[],"class_list":{"0":"post-34263","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-bash","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r? Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda h\u0131z ve g\u00fcvenilir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-13T23:40:53+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?\",\"datePublished\":\"2025-11-13T23:40:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\"},\"wordCount\":3122,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Bash\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\",\"name\":\"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-13T23:40:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/","og_locale":"tr_TR","og_type":"article","og_title":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?","og_description":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r? Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda h\u0131z ve g\u00fcvenilir","og_url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-13T23:40:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?","datePublished":"2025-11-13T23:40:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/"},"wordCount":3122,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Bash"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/","url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/","name":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-13T23:40:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-kubernetes-uzerinde-flagger-ile-asamali-surum-dagitimi-nasil-yapilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DigitalOcean Kubernetes \u00dczerinde Flagger ile A\u015famal\u0131 S\u00fcr\u00fcm Da\u011f\u0131t\u0131m\u0131 Nas\u0131l Yap\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34263"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34263\/revisions"}],"predecessor-version":[{"id":34264,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34263\/revisions\/34264"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}