{"id":35749,"date":"2025-12-03T13:01:14","date_gmt":"2025-12-03T10:01:14","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/"},"modified":"2025-12-03T13:01:14","modified_gmt":"2025-12-03T10:01:14","slug":"gitops-ve-argocd-neden-bu-kadar-onemliler","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/","title":{"rendered":"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?"},"content":{"rendered":"<article>ArgoCD ile Kubernetes&#8217;te S\u0131f\u0131r Kesinti Geri D\u00f6n\u00fc\u015fler: GitOps&#8217;un G\u00fcc\u00fc<\/article>\n<p><body><\/p>\n<p>Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri&#8230; Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, <b>ArgoCD<\/b> ve <b>GitOps<\/b> felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.<\/p>\n<div class=\"interactive-tip\">\n  Uzman \u0130pucu: Da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizde ya\u015fanan kesintiler, sadece gelir kayb\u0131na de\u011fil, ayn\u0131 zamanda marka itibar\u0131n\u0131zda ciddi zedelenmelere yol a\u00e7abilir. Bu nedenle, h\u0131zl\u0131 ve g\u00fcvenilir geri d\u00f6n\u00fc\u015f yetene\u011fi, modern DevOps ekipleri i\u00e7in vazge\u00e7ilmezdir.\n<\/div>\n<p>Modern uygulama geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde karma\u015f\u0131kl\u0131k giderek art\u0131yor. Mikroservis mimarileri, bulut tabanl\u0131 altyap\u0131lar ve s\u00fcrekli teslimat (Continuous Delivery &#8211; CD) beklentileri, yeni yakla\u015f\u0131mlar\u0131 zorunlu k\u0131l\u0131yor. \u0130\u015fte tam bu noktada <b>GitOps<\/b>, Kubernetes ekosisteminde adeta bir can simidi g\u00f6revi g\u00f6r\u00fcyor. Peki, GitOps tam olarak nedir ve <b>ArgoCD<\/b> bu felsefeyi nas\u0131l hayata ge\u00e7iriyor?<\/p>\n<h3>GitOps Nedir ve Neden Bir Paradigm Shift Yarat\u0131yor?<\/h3>\n<p>GitOps, cloud-native uygulamalar i\u00e7in bir operasyon \u00e7er\u00e7evesidir. Temelinde, t\u00fcm sistemin istenen durumunun (declarative configuration) Git versiyon kontrol sistemi i\u00e7inde tutulmas\u0131 yatar. Ortam\u0131n\u0131z\u0131n t\u00fcm ayarlar\u0131, uygulama da\u011f\u0131t\u0131mlar\u0131, konfig\u00fcrasyon dosyalar\u0131 (ConfigMaps, Secrets), servis tan\u0131mlar\u0131 (Services) ve hatta altyap\u0131 kodlar\u0131 (Infrastructure as Code &#8211; IaC) bile Git depolar\u0131nda saklan\u0131r. Bu yakla\u015f\u0131m\u0131n getirdi\u011fi en b\u00fcy\u00fck avantaj, Git&#8217;in sundu\u011fu g\u00fc\u00e7l\u00fc \u00f6zelliklerin (versiyonlama, de\u011fi\u015fiklik ge\u00e7mi\u015fi, kod incelemesi, geri alma yetene\u011fi) operasyonel s\u00fcre\u00e7lere de ta\u015f\u0131nmas\u0131d\u0131r. Git bir &#8220;tek do\u011fru kaynak&#8221; (Single Source of Truth) haline gelir.<\/p>\n<p>Geleneksel DevOps yakla\u015f\u0131mlar\u0131nda, da\u011f\u0131t\u0131mlar genellikle CI\/CD pipeline&#8217;lar\u0131 taraf\u0131ndan tetiklenir ve bu pipeline&#8217;lar Kubernetes k\u00fcmesi \u00fczerinde do\u011frudan de\u011fi\u015fiklikler yapabilir. GitOps ise bunun yerine, Kubernetes k\u00fcmesindeki mevcut durumu s\u00fcrekli olarak Git deposundaki istenen durumla kar\u015f\u0131la\u015ft\u0131r\u0131r. E\u011fer bir uyumsuzluk varsa, GitOps operat\u00f6r\u00fc (bu durumda ArgoCD), k\u00fcmedeki durumu Git&#8217;teki ile e\u015fle\u015ftirmek i\u00e7in gerekli aksiyonlar\u0131 otomatik olarak al\u0131r. Bu &#8220;\u00e7ekme&#8221; (pull) tabanl\u0131 model, g\u00fcvenlik a\u00e7\u0131s\u0131ndan da \u00f6nemli avantajlar sunar, \u00e7\u00fcnk\u00fc Kubernetes k\u00fcmesinin d\u0131\u015far\u0131dan gelen komutlara a\u00e7\u0131k olmas\u0131 gerekmez. Her de\u011fi\u015fiklik bir Git commit&#8217;i olarak kaydedildi\u011fi i\u00e7in, her da\u011f\u0131t\u0131m\u0131n ne zaman, kim taraf\u0131ndan ve hangi ama\u00e7la yap\u0131ld\u0131\u011f\u0131na dair tam bir denetim izi bulunur. Bu sayede, olas\u0131 bir problemde hangi de\u011fi\u015fikli\u011fin soruna yol a\u00e7t\u0131\u011f\u0131n\u0131 tespit etmek ve geriye d\u00f6nmek inan\u0131lmaz derecede kolayla\u015f\u0131r.<\/p>\n<h3>ArgoCD: GitOps Felsefesini Kubernetes&#8217;e Nas\u0131l Ta\u015f\u0131yor?<\/h3>\n<p>ArgoCD, GitOps&#8217;u Kubernetes&#8217;e getiren pop\u00fcler, a\u00e7\u0131k kaynakl\u0131 bir s\u00fcrekli teslimat arac\u0131d\u0131r. ArgoCD&#8217;nin temel g\u00f6revi, Kubernetes k\u00fcmelerindeki uygulama durumlar\u0131n\u0131, belirledi\u011finiz Git depolar\u0131ndaki (GitHub, GitLab, Bitbucket vb.) konfig\u00fcrasyon dosyalar\u0131yla senkronize etmektir. Bir Git deposunda uygulama YAML dosyalar\u0131n\u0131z\u0131, Helm chart&#8217;lar\u0131n\u0131z\u0131 veya Kustomize konfig\u00fcrasyonlar\u0131n\u0131z\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131zda, ArgoCD bu depoyu izler. Depoda yeni bir commit alg\u0131lad\u0131\u011f\u0131nda veya k\u00fcmedeki mevcut durum Git&#8217;teki beklenen durumdan sapt\u0131\u011f\u0131nda (drift), ArgoCD otomatik olarak harekete ge\u00e7er ve k\u00fcmedeki durumu Git&#8217;teki ile e\u015fle\u015fecek \u015fekilde g\u00fcnceller. Bu senkronizasyon s\u00fcreci manuel m\u00fcdahaleye gerek kalmadan otomatik olarak ger\u00e7ekle\u015fir, bu da insan hatas\u0131n\u0131 minimuma indirir.<\/p>\n<p>ArgoCD sadece otomatik senkronizasyon yapmakla kalmaz, ayn\u0131 zamanda zengin bir web aray\u00fcz\u00fc (UI) ve komut sat\u0131r\u0131 aray\u00fcz\u00fc (CLI) sunar. Bu aray\u00fczler sayesinde uygulamalar\u0131n\u0131z\u0131n durumunu g\u00f6rselle\u015ftirebilir, senkronizasyon ge\u00e7mi\u015fini inceleyebilir, kaynak manifestolar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleyebilir ve hatta gerekti\u011finde manuel senkronizasyon veya geri d\u00f6n\u00fc\u015f i\u015flemleri yapabilirsiniz. Uygulamalar\u0131n\u0131z\u0131n sa\u011fl\u0131k durumunu izlemek, kaynaklar\u0131n ne zaman ve nas\u0131l de\u011fi\u015ftirildi\u011fini g\u00f6rmek ve potansiyel sorunlar\u0131 proaktif bir \u015fekilde tespit etmek i\u00e7in kapsaml\u0131 yetenekler sunar. ArgoCD&#8217;nin en g\u00fc\u00e7l\u00fc y\u00f6nlerinden biri de geri d\u00f6n\u00fc\u015f (rollback) yetene\u011fidir. Git&#8217;in t\u00fcm versiyonlama g\u00fcc\u00fcn\u00fc kullanarak, herhangi bir \u00f6nceki \u00e7al\u0131\u015fan s\u00fcr\u00fcme sadece birka\u00e7 t\u0131klamayla veya tek bir komutla kolayca geri d\u00f6nebilirsiniz. Bu, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizde kar\u015f\u0131la\u015fabilece\u011finiz herhangi bir aksakl\u0131kta sizi b\u00fcy\u00fck bir dertten kurtar\u0131r ve uygulaman\u0131z\u0131n kesintisizli\u011fini sa\u011flar.<\/p>\n<h2>ArgoCD Kurulumu ve \u0130lk Uygulaman\u0131z\u0131 Nas\u0131l Da\u011f\u0131t\u0131rs\u0131n\u0131z?<\/h2>\n<p>ArgoCD&#8217;nin sundu\u011fu avantajlardan yararlanmaya ba\u015flamak i\u00e7in \u00f6ncelikle onu Kubernetes k\u00fcmenize kurman\u0131z ve bir uygulaman\u0131z\u0131 onunla y\u00f6netmeye ba\u015flaman\u0131z gerekiyor. Bu b\u00f6l\u00fcmde, ArgoCD&#8217;yi nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve basit bir web uygulamas\u0131n\u0131 GitOps yakla\u015f\u0131m\u0131yla nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Bu s\u00fcre\u00e7, GitOps d\u00fcnyas\u0131na ilk ad\u0131m\u0131n\u0131z\u0131 atman\u0131z\u0131 sa\u011flayacak.<\/p>\n<h3>ArgoCD Kubernetes K\u00fcmenize Nas\u0131l Kurulur?<\/h3>\n<p>ArgoCD&#8217;yi kurman\u0131n en yayg\u0131n ve \u00f6nerilen yolu, Kustomize veya Helm kullanmakt\u0131r. Biz burada, daha h\u0131zl\u0131 bir ba\u015flang\u0131\u00e7 i\u00e7in kubectl ve ArgoCD&#8217;nin kendi manifestolar\u0131n\u0131 kullanaca\u011f\u0131z. \u0130lk olarak, ArgoCD i\u00e7in ayr\u0131 bir namespace olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">kubectl create namespace argocd<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, ArgoCD'nin gerekli t\u00fcm Kubernetes kaynaklar\u0131n\u0131 (Deployment'lar, Service'ler, ConfigMap'ler vb.) bu namespace'e da\u011f\u0131tabiliriz. Resmi kurulum manifestosunu kullanmak en kolay yoldur:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -n argocd -f https:\/\/raw.githubusercontent.com\/argoproj\/argo-cd\/stable\/manifests\/install.yaml<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, ArgoCD'nin t\u00fcm bile\u015fenlerini k\u00fcmenize kuracakt\u0131r. Kurulumun tamamlanmas\u0131n\u0131 beklemek biraz zaman alabilir. Pod'lar\u0131n durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n argocd<\/pre>\n<p><\/code><\/p>\n<p>T\u00fcm pod'lar \"Running\" durumuna geldi\u011finde, ArgoCD ba\u015far\u0131yla kurulmu\u015f demektir. ArgoCD UI'ya eri\u015fmek i\u00e7in \u00e7e\u015fitli y\u00f6ntemler vard\u0131r (Port-forwarding, LoadBalancer, Ingress). Geli\u015ftirme ortam\u0131 i\u00e7in en basit y\u00f6ntem port-forwarding'dir:<\/p>\n<pre><code class=\"language-bash\">kubectl port-forward svc\/argocd-server -n argocd 8080:443<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan <code>https:\/\/localhost:8080<\/code> adresine giderek ArgoCD UI'ya eri\u015febilirsiniz. \u0130lk oturum a\u00e7ma i\u00e7in kullan\u0131c\u0131 ad\u0131 <code>admin<\/code>'dir. Parolay\u0131 ise ArgoCD API sunucusunun pod ad\u0131ndan alman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d<\/pre>\n<p><\/code><\/p>\n<p>Bu parolay\u0131 kullanarak UI'a giri\u015f yapt\u0131ktan sonra, ArgoCD'nin y\u00f6netici parolas\u0131n\u0131 de\u011fi\u015ftirmeyi unutmay\u0131n.<\/p>\n<h3>\u0130lk Uygulaman\u0131z\u0131 ArgoCD ile Nas\u0131l Da\u011f\u0131t\u0131rs\u0131n\u0131z?<\/h3>\n<p>\u015eimdi basit bir Nginx web uygulamas\u0131n\u0131 ArgoCD arac\u0131l\u0131\u011f\u0131yla da\u011f\u0131tma zaman\u0131. \u00d6ncelikle, uygulaman\u0131z\u0131n Kubernetes manifestolar\u0131n\u0131 i\u00e7erecek bir Git deposuna ihtiyac\u0131n\u0131z var. E\u011fer yoksa, bir tane olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki <code>deployment.yaml<\/code> ve <code>service.yaml<\/code> dosyalar\u0131n\u0131 ekleyin:<\/p>\n<pre><code class=\"language-yaml\"># my-app-repo\/deployment.yaml\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-nginx-app\n  labels:\n    app: my-nginx\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: my-nginx\n  template:\n    metadata:\n      labels:\n        app: my-nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.21.0\n        ports:\n        - containerPort: 80\n---\n# my-app-repo\/service.yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: my-nginx-service\nspec:\n  selector:\n    app: my-nginx\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 80\n  type: LoadBalancer # Test ortam\u0131 i\u00e7in NodePort veya ClusterIP de olabilir.\n<\/pre>\n<p><\/code><\/p>\n<p>Bu dosyalar\u0131 Git deponuza (\u00f6rne\u011fin, <code>my-app-repo<\/code>) push ettikten sonra, ArgoCD UI'a geri d\u00f6n\u00fcn ve \"New App\" butonuna t\u0131klay\u0131n. Uygulaman\u0131n detaylar\u0131n\u0131 girin:<\/p>\n<ul>\n<li><b>Application Name:<\/b> <code>my-nginx-app<\/code><\/li>\n<li><b>Project:<\/b> <code>default<\/code><\/li>\n<li><b>Sync Policy:<\/b> <code>Automatic<\/code> (Otomatik senkronizasyon i\u00e7in)<\/li>\n<li><b>Repository URL:<\/b> Uygulama manifestolar\u0131n\u0131z\u0131n bulundu\u011fu Git deposunun URL'si (\u00f6rn. <code>https:\/\/github.com\/kullaniciadi\/my-app-repo.git<\/code>)<\/li>\n<li><b>Revision:<\/b> <code>HEAD<\/code> (Git deposundaki son commit'i izlemesi i\u00e7in)<\/li>\n<li><b>Path:<\/b> Manifestolar\u0131n\u0131z\u0131n bulundu\u011fu dizin (\u00f6rn. <code>.<\/code> e\u011fer repo'nun k\u00f6k\u00fcndeyseler)<\/li>\n<li><b>Cluster:<\/b> <code>in-cluster<\/code> (ArgoCD'nin \u00e7al\u0131\u015ft\u0131\u011f\u0131 k\u00fcme)<\/li>\n<li><b>Namespace:<\/b> <code>default<\/code> (Uygulamay\u0131 da\u011f\u0131tmak istedi\u011finiz namespace)<\/li>\n<\/ul>\n<p>\"Create\" butonuna bast\u0131ktan sonra, ArgoCD Git deponuzu izlemeye ba\u015flayacak ve otomatik olarak <code>my-nginx-app<\/code> uygulamas\u0131n\u0131 Kubernetes k\u00fcmenize da\u011f\u0131tacakt\u0131r. ArgoCD UI'da uygulaman\u0131z\u0131n \"Healthy\" ve \"Synced\" durumuna ge\u00e7ti\u011fini g\u00f6receksiniz. Bu, ilk uygulaman\u0131z\u0131 GitOps prensipleriyle ba\u015far\u0131yla da\u011f\u0131tt\u0131\u011f\u0131n\u0131z anlam\u0131na gelir. Art\u0131k Git deponuzda yapt\u0131\u011f\u0131n\u0131z her de\u011fi\u015fiklik (yeni bir image versiyonu, replica say\u0131s\u0131 de\u011fi\u015fikli\u011fi vb.), ArgoCD taraf\u0131ndan alg\u0131lanacak ve otomatik olarak k\u00fcmenize yans\u0131t\u0131lacakt\u0131r.<\/p>\n<h2>S\u0131f\u0131r Kesinti Geri D\u00f6n\u00fc\u015flerin Temel Mant\u0131\u011f\u0131 Nedir?<\/h2>\n<p>Bir yaz\u0131l\u0131m da\u011f\u0131t\u0131m\u0131n\u0131n ba\u015far\u0131s\u0131z oldu\u011fu senaryoda, h\u0131zl\u0131 ve kesintisiz bir \u015fekilde \u00f6nceki \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilmek kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, ArgoCD'nin Git'in g\u00fcc\u00fcn\u00fc kullanarak bu geri d\u00f6n\u00fc\u015fleri nas\u0131l sa\u011flad\u0131\u011f\u0131n\u0131 ve modern da\u011f\u0131t\u0131m stratejilerinin s\u0131f\u0131r kesinti ilkesine nas\u0131l katk\u0131da bulundu\u011funu inceleyece\u011fiz.<\/p>\n<h3>ArgoCD ve Git Tarih\u00e7esi \u0130li\u015fkisi<\/h3>\n<p>ArgoCD'nin geri d\u00f6n\u00fc\u015f yetene\u011finin kalbinde Git'in versiyon kontrol sistemi yatar. Her uygulama de\u011fi\u015fikli\u011fi, Git deposunda yeni bir commit olarak kaydedilir. Bu commit'ler, uygulaman\u0131z\u0131n zaman i\u00e7indeki t\u00fcm evrelerini belgeleyen detayl\u0131 bir tarih\u00e7e olu\u015fturur. ArgoCD, bu tarih\u00e7eyi kullanarak uygulaman\u0131z\u0131n herhangi bir \u00f6nceki kararl\u0131 durumuna kolayca geri d\u00f6nebilir. Bir uygulaman\u0131n belirli bir s\u00fcr\u00fcm\u00fcne geri d\u00f6nmek, asl\u0131nda Git'teki o s\u00fcr\u00fcm\u00fc temsil eden commit'in (veya tag'in) i\u015faret etti\u011fi manifestolar\u0131 tekrar da\u011f\u0131tmaktan ibarettir. ArgoCD, se\u00e7ti\u011finiz eski commit'in g\u00f6sterdi\u011fi YAML dosyalar\u0131n\u0131 okur ve Kubernetes k\u00fcmesindeki mevcut kaynaklar\u0131 bu eski duruma d\u00f6nd\u00fcrmek i\u00e7in gerekli de\u011fi\u015fiklikleri yapar.<\/p>\n<p>Bu yakla\u015f\u0131m\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan biri, geri d\u00f6n\u00fc\u015f i\u015flemlerinin \u00f6ng\u00f6r\u00fclebilir ve g\u00fcvenilir olmas\u0131d\u0131r. Geleneksel olarak, bir geri d\u00f6n\u00fc\u015f genellikle bir yedekten geri y\u00fckleme veya manuel olarak eski manifestolar\u0131 tekrar uygulama gibi riskli ve hataya a\u00e7\u0131k i\u015flemlerle yap\u0131l\u0131r. Ancak ArgoCD ile, t\u00fcm s\u00fcre\u00e7 Git taraf\u0131ndan y\u00f6netildi\u011fi i\u00e7in, her geri d\u00f6n\u00fc\u015f de bir Git operasyonu kadar g\u00fcvenlidir. Ayr\u0131ca, Git ge\u00e7mi\u015finde yap\u0131lan her \u015feyin logland\u0131\u011f\u0131 gibi, ArgoCD de her senkronizasyon ve geri d\u00f6n\u00fc\u015f i\u015flemini kaydeder. Bu, denetlenebilirlik ve sorun giderme (troubleshooting) s\u00fcre\u00e7lerinde paha bi\u00e7ilmez bir kolayl\u0131k sa\u011flar. Uygulaman\u0131z\u0131n tarih\u00e7esine bakt\u0131\u011f\u0131n\u0131zda, hangi commit'in ne zaman da\u011f\u0131t\u0131ld\u0131\u011f\u0131, hangi commit'e geri d\u00f6n\u00fcld\u00fc\u011f\u00fc gibi bilgilere an\u0131nda ula\u015fabilirsiniz. Bu sayede, herhangi bir sorun an\u0131nda \"neden\" sorusunun cevab\u0131n\u0131 bulmak \u00e7ok daha basitle\u015fir.<\/p>\n<h3>S\u0131f\u0131r Kesinti Geri D\u00f6n\u00fc\u015f \u0130\u00e7in Temel Da\u011f\u0131t\u0131m Stratejileri<\/h3>\n<p>S\u0131f\u0131r kesinti ile geri d\u00f6n\u00fc\u015fler yapabilmek i\u00e7in ArgoCD'nin GitOps yeteneklerinin yan\u0131 s\u0131ra, Kubernetes'in sundu\u011fu da\u011f\u0131t\u0131m stratejilerini de anlamak \u00f6nemlidir. Bu stratejiler, yeni bir s\u00fcr\u00fcm\u00fcn devreye al\u0131nmas\u0131 veya eski bir s\u00fcr\u00fcme geri d\u00f6n\u00fclmesi s\u0131ras\u0131nda kullan\u0131c\u0131lar\u0131n hizmet kesintisi ya\u015famas\u0131n\u0131 engeller.<\/p>\n<h4>Rolling Update (Yuvarlanan G\u00fcncelleme)<\/h4>\n<p>Kubernetes'teki varsay\u0131lan da\u011f\u0131t\u0131m stratejisidir. Yeni bir uygulama s\u00fcr\u00fcm\u00fc da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda, Deployment kontrol\u00f6r\u00fc eski s\u00fcr\u00fcme ait pod'lar\u0131 yava\u015f yava\u015f sonland\u0131r\u0131r ve yeni s\u00fcr\u00fcme ait pod'lar\u0131 a\u015famal\u0131 olarak ba\u015flat\u0131r. Bu i\u015flem s\u0131ras\u0131nda hem eski hem de yeni s\u00fcr\u00fcm pod'lar\u0131 ayn\u0131 anda \u00e7al\u0131\u015f\u0131r. Bir Service nesnesi, t\u00fcm pod'lar aras\u0131nda trafi\u011fi dengeledi\u011fi i\u00e7in kullan\u0131c\u0131lar kesinti ya\u015famaz. E\u011fer yeni s\u00fcr\u00fcmde bir sorun ortaya \u00e7\u0131karsa, Rolling Update i\u015flemi durdurulabilir ve Deployment kolayca \u00f6nceki kararl\u0131 s\u00fcr\u00fcme geri d\u00f6nd\u00fcr\u00fclebilir. Bu, ArgoCD'nin varsay\u0131lan geri d\u00f6n\u00fc\u015f mekanizmas\u0131yla entegre \u00e7al\u0131\u015f\u0131r ve h\u0131zl\u0131 geri d\u00f6n\u00fc\u015fleri m\u00fcmk\u00fcn k\u0131lar. \u00d6rne\u011fin, uygulaman\u0131z\u0131n yeni bir versiyonunu (nginx:1.22.0 yerine nginx:1.23.0) da\u011f\u0131tt\u0131n\u0131z ve bir sorun olu\u015ftu. ArgoCD ile tek bir komutla eski versiyona (nginx:1.22.0) Rolling Update yapabilirsiniz.<\/p>\n<pre><code class=\"language-yaml\"># deployment.yaml\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-nginx-app\n  labels:\n    app: my-nginx\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: my-nginx\n  template:\n    metadata:\n      labels:\n        app: my-nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.23.0 # Yeni versiyon\n        ports:\n        - containerPort: 80\n<\/pre>\n<p><\/code><\/p>\n<h4>Blue\/Green Deployment (Mavi\/Ye\u015fil Da\u011f\u0131t\u0131m)<\/h4>\n<p>Bu stratejide, mevcut kararl\u0131 s\u00fcr\u00fcm (\"Blue\" ortam\u0131) ile yeni s\u00fcr\u00fcm (\"Green\" ortam\u0131) ayn\u0131 anda tamamen ba\u011f\u0131ms\u0131z iki ortamda \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Yeni s\u00fcr\u00fcm (Green), canl\u0131 trafi\u011fe a\u00e7\u0131lmadan \u00f6nce test edilir ve do\u011frulan\u0131r. Her iki ortam da haz\u0131r oldu\u011funda, Load Balancer veya Ingress kural\u0131 basit\u00e7e trafi\u011fi Blue'dan Green ortama y\u00f6nlendirecek \u015fekilde g\u00fcncellenir. E\u011fer Green ortam\u0131nda bir sorun tespit edilirse, trafik an\u0131nda Blue ortama geri y\u00f6nlendirilebilir. Bu, en h\u0131zl\u0131 geri d\u00f6n\u00fc\u015f s\u00fcrelerinden birini sunar, \u00e7\u00fcnk\u00fc sadece trafik y\u00f6nlendirme de\u011fi\u015fikli\u011fi yeterlidir. Ancak, iki ortam\u0131 da ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rmak kaynak maliyetini art\u0131rabilir. ArgoCD tek ba\u015f\u0131na Blue\/Green da\u011f\u0131t\u0131m\u0131n\u0131 direkt olarak desteklemese de, Ingress veya Service kaynaklar\u0131n\u0131n manifestolar\u0131n\u0131 de\u011fi\u015ftirerek ve bunlar\u0131 Git \u00fczerinde versiyonlayarak bu stratejiyi uygulayabilirsiniz. Daha geli\u015fmi\u015f Blue\/Green da\u011f\u0131t\u0131m\u0131 i\u00e7in Argo Rollouts gibi ara\u00e7lar ArgoCD ile entegre edilebilir.<\/p>\n<h4>Canary Deployment (Kanarya Da\u011f\u0131t\u0131m\u0131)<\/h4>\n<p>Canary da\u011f\u0131t\u0131m\u0131nda, yeni s\u00fcr\u00fcm k\u00fc\u00e7\u00fck bir kullan\u0131c\u0131 alt k\u00fcmesine veya belirli bir co\u011frafi b\u00f6lgeye a\u015famal\u0131 olarak sunulur. Bu, yeni s\u00fcr\u00fcm\u00fcn ger\u00e7ek d\u00fcnya ko\u015fullar\u0131nda test edilmesine olanak tan\u0131r ve olas\u0131 sorunlar\u0131n sadece s\u0131n\u0131rl\u0131 bir etkiyle ortaya \u00e7\u0131kmas\u0131n\u0131 sa\u011flar. E\u011fer yeni s\u00fcr\u00fcm beklendi\u011fi gibi performans g\u00f6sterirse, a\u015famal\u0131 olarak daha fazla kullan\u0131c\u0131ya yay\u0131l\u0131r. Bir sorun tespit edildi\u011finde ise, sadece Canary grubundaki trafik eski s\u00fcr\u00fcme geri y\u00f6nlendirilir ve sorunlu s\u00fcr\u00fcm iptal edilir. Canary da\u011f\u0131t\u0131m\u0131, en g\u00fcvenli da\u011f\u0131t\u0131m stratejilerinden biridir ancak uygulamas\u0131 daha karma\u015f\u0131kt\u0131r ve trafik y\u00f6nlendirmeyi y\u00f6neten geli\u015fmi\u015f ara\u00e7lar (\u00f6rne\u011fin, Istio veya Argo Rollouts) gerektirir. ArgoCD, bu t\u00fcr karma\u015f\u0131k da\u011f\u0131t\u0131m stratejilerini y\u00f6netmek i\u00e7in Argo Rollouts ile sorunsuz bir \u015fekilde entegre olabilir.<\/p>\n<h2>Pratikte ArgoCD ile S\u0131f\u0131r Kesinti Geri D\u00f6n\u00fc\u015f Nas\u0131l Yap\u0131l\u0131r? Ad\u0131m Ad\u0131m Rehber<\/h2>\n<p>\u015eimdi teoriden prati\u011fe ge\u00e7elim. Bu b\u00f6l\u00fcmde, ArgoCD kullanarak bir uygulaman\u0131n hatal\u0131 bir da\u011f\u0131t\u0131m\u0131ndan nas\u0131l h\u0131zl\u0131 ve kesintisiz bir \u015fekilde geri d\u00f6nece\u011finizi ad\u0131m ad\u0131m g\u00f6sterece\u011fiz. Ger\u00e7ek d\u00fcnya senaryosuna yak\u0131n bir \u00f6rnekle, ArgoCD'nin GitOps yeteneklerinin nas\u0131l bir \"can simidi\" olabilece\u011fini g\u00f6zlemleyece\u011fiz.<\/p>\n<h3>Senaryo: Hatal\u0131 Bir Da\u011f\u0131t\u0131m ve H\u0131zl\u0131 Bir Geri D\u00f6n\u00fc\u015f \u0130htiyac\u0131<\/h3>\n<p>Diyelim ki <code>my-nginx-app<\/code> adl\u0131 bir web uygulaman\u0131z var ve bu uygulaman\u0131n <code>nginx:1.21.0<\/code> s\u00fcr\u00fcm\u00fc sorunsuz bir \u015fekilde \u00e7al\u0131\u015f\u0131yor. Ekibiniz, yeni \u00f6zellikler i\u00e7eren <code>nginx:1.22.0<\/code> s\u00fcr\u00fcm\u00fcn\u00fc da\u011f\u0131tmaya karar verdi. Ancak, bu yeni s\u00fcr\u00fcmde kritik bir bug var ve da\u011f\u0131t\u0131mdan k\u0131sa bir s\u00fcre sonra uygulaman\u0131z eri\u015filemez hale geliyor veya hata vermeye ba\u015fl\u0131yor. M\u00fc\u015fterileriniz hizmet alam\u0131yor, i\u015f s\u00fcreklili\u011fi tehlikede. Bu durumda, en h\u0131zl\u0131 ve g\u00fcvenilir \u015fekilde eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme (<code>nginx:1.21.0<\/code>) geri d\u00f6nmeniz gerekiyor.<\/p>\n<div class=\"interactive-tip\">\n  Uzman \u0130pucu: Da\u011f\u0131t\u0131m \u00f6ncesinde ve sonras\u0131nda mutlaka otomatikle\u015ftirilmi\u015f sa\u011fl\u0131k ve performans kontrolleri \u00e7al\u0131\u015ft\u0131rmal\u0131s\u0131n\u0131z. ArgoCD'nin sa\u011fl\u0131k kontrolleri (Health Checks) ve senkronizasyon kancalar\u0131 (Sync Hooks) bu t\u00fcr durumlar\u0131 proaktif olarak tespit etmenize yard\u0131mc\u0131 olabilir.\n<\/div>\n<h3>Ad\u0131m 1: Uygulaman\u0131n Mevcut Durumu ve Hatal\u0131 Da\u011f\u0131t\u0131m<\/h3>\n<p>\u00d6ncelikle, uygulaman\u0131z\u0131n mevcut <code>deployment.yaml<\/code> dosyas\u0131 Git deponuzda <code>nginx:1.21.0<\/code> imaj\u0131n\u0131 kullan\u0131yor olsun:<\/p>\n<pre><code class=\"language-yaml\"># my-app-repo\/deployment.yaml (initial state)\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-nginx-app\n  labels:\n    app: my-nginx\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: my-nginx\n  template:\n    metadata:\n      labels:\n        app: my-nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.21.0 # \u00c7al\u0131\u015fan versiyon\n        ports:\n        - containerPort: 80\n<\/pre>\n<p><\/code><\/p>\n<p>ArgoCD bu depoyu izliyor ve <code>my-nginx-app<\/code> \u015fu anda \"Synced\" ve \"Healthy\" durumda. \u015eimdi, yeni s\u00fcr\u00fcm\u00fc da\u011f\u0131tmak i\u00e7in <code>deployment.yaml<\/code> dosyas\u0131n\u0131 g\u00fcncelleyelim ve imaj\u0131 <code>nginx:1.22.0<\/code> olarak de\u011fi\u015ftirelim:<\/p>\n<pre><code class=\"language-yaml\"># my-app-repo\/deployment.yaml (after problematic update)\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-nginx-app\n  labels:\n    app: my-nginx\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: my-nginx\n  template:\n    metadata:\n      labels:\n        app: my-nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.22.0 # Sorunlu versiyon\n        ports:\n        - containerPort: 80\n<\/pre>\n<p><\/code><\/p>\n<p>Bu de\u011fi\u015fikli\u011fi Git deponuza commit edin ve push yap\u0131n. ArgoCD, bu de\u011fi\u015fikli\u011fi otomatik olarak alg\u0131layacak ve uygulaman\u0131z\u0131 <code>nginx:1.22.0<\/code> s\u00fcr\u00fcm\u00fcne g\u00fcncelleyecektir. G\u00fcncelleme tamamland\u0131ktan k\u0131sa bir s\u00fcre sonra, uygulaman\u0131n durumunun \"Degraded\" veya \"Unhealthy\" oldu\u011funu g\u00f6zlemleyin. Pod'lar s\u00fcrekli yeniden ba\u015fl\u0131yor, sa\u011fl\u0131k kontrolleri ba\u015far\u0131s\u0131z oluyor veya uygulaman\u0131z yan\u0131t vermiyor. \u0130\u015fte bu, geri d\u00f6n\u00fc\u015f yapman\u0131z gereken an!<\/p>\n<h3>Ad\u0131m 2: Hatal\u0131 S\u00fcr\u00fcm\u00fc Tespit Etme ve Geri D\u00f6n\u00fc\u015f Ba\u015flatma<\/h3>\n<p>ArgoCD UI'a gidin ve <code>my-nginx-app<\/code> uygulamas\u0131n\u0131 se\u00e7in. Uygulaman\u0131n durumu muhtemelen k\u0131rm\u0131z\u0131 renkte \"Degraded\" olarak g\u00f6r\u00fcnecektir. \"History and Rollback\" sekmesine t\u0131klay\u0131n. Burada, uygulaman\u0131z\u0131n t\u00fcm senkronizasyon ge\u00e7mi\u015fini g\u00f6receksiniz. Her bir giri\u015f, bir Git commit'ine kar\u015f\u0131l\u0131k gelir.<\/p>\n<ol>\n<li>En \u00fcstteki giri\u015f (en yeni olan), az \u00f6nce da\u011f\u0131tt\u0131\u011f\u0131n\u0131z <code>nginx:1.22.0<\/code> s\u00fcr\u00fcm\u00fcne aittir ve \"Failed\" veya \"Degraded\" durumunda olacakt\u0131r.<\/li>\n<li>Bir \u00f6nceki giri\u015fi (sorunsuz \u00e7al\u0131\u015fan <code>nginx:1.21.0<\/code> s\u00fcr\u00fcm\u00fcne ait olan\u0131) bulun. Genellikle, bu giri\u015fteki Git commit mesaj\u0131 size neyin da\u011f\u0131t\u0131ld\u0131\u011f\u0131n\u0131 s\u00f6yleyecektir.<\/li>\n<li>Sorunsuz \u00e7al\u0131\u015fan bu \u00f6nceki s\u00fcr\u00fcm\u00fcn yan\u0131ndaki \"ROLLBACK\" butonuna t\u0131klay\u0131n.<\/li>\n<\/ol>\n<p>ArgoCD sizden geri d\u00f6n\u00fc\u015f\u00fc onaylaman\u0131z\u0131 isteyecektir. Onaylad\u0131ktan sonra, ArgoCD hemen se\u00e7ilen eski commit'in i\u015faret etti\u011fi manifestolar\u0131 kullanarak Kubernetes k\u00fcmesindeki uygulaman\u0131z\u0131 geri d\u00f6nd\u00fcrmeye ba\u015flayacakt\u0131r. Bu i\u015flem, bir rolling update stratejisi kullanarak eski pod'lar\u0131 sonland\u0131r\u0131p yeni (eski s\u00fcr\u00fcmdeki) pod'lar\u0131 ba\u015flatacakt\u0131r.<\/p>\n<h3>Ad\u0131m 3: Geri D\u00f6n\u00fc\u015f S\u00fcrecini \u0130zleme ve Do\u011frulama<\/h3>\n<p>Geri d\u00f6n\u00fc\u015f i\u015flemi ba\u015flad\u0131ktan sonra, ArgoCD UI'daki uygulaman\u0131n genel g\u00f6r\u00fcn\u00fcm\u00fcne geri d\u00f6n\u00fcn. Uygulaman\u0131n durumunun \"Progressing\" oldu\u011funu g\u00f6receksiniz. Kubernetes, Deployment'\u0131n replica set'ini g\u00fcncelledik\u00e7e ve eski s\u00fcr\u00fcm pod'lar\u0131 ba\u015flat\u0131ld\u0131k\u00e7a, ArgoCD bunlar\u0131 izleyecek ve durumu g\u00fcncelleyecektir. Birka\u00e7 saniye veya dakika i\u00e7inde (uygulaman\u0131z\u0131n pod ba\u015flang\u0131\u00e7 s\u00fcresine ba\u011fl\u0131 olarak), uygulaman\u0131z\u0131n tekrar \"Healthy\" ve \"Synced\" durumuna ge\u00e7ti\u011fini g\u00f6rmelisiniz. Bu, geri d\u00f6n\u00fc\u015f\u00fcn ba\u015far\u0131yla tamamland\u0131\u011f\u0131 ve uygulaman\u0131z\u0131n tekrar <code>nginx:1.21.0<\/code> s\u00fcr\u00fcm\u00fcne d\u00f6nd\u00fc\u011f\u00fc anlam\u0131na gelir. M\u00fc\u015fterileriniz art\u0131k hizmeti kesintisiz bir \u015fekilde alabiliyor olmal\u0131.<\/p>\n<h4>CLI ile Geri D\u00f6n\u00fc\u015f Yapma<\/h4>\n<p>ArgoCD UI yerine komut sat\u0131r\u0131ndan geri d\u00f6n\u00fc\u015f yapmak da m\u00fcmk\u00fcnd\u00fcr. \u00d6ncelikle uygulaman\u0131z\u0131n senkronizasyon ge\u00e7mi\u015fini listelemeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">argocd app history my-nginx-app<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, her bir senkronizasyonun kimli\u011fini (ID), commit SHA's\u0131n\u0131 ve durumunu listeleyecektir. Hata \u00f6ncesi \u00e7al\u0131\u015fan versiyonun ID'sini (\u00f6rne\u011fin <code>123<\/code>) belirledikten sonra, geri d\u00f6n\u00fc\u015f\u00fc ba\u015flatmak i\u00e7in \u015fu komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">argocd app rollback my-nginx-app --revision 123<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, ArgoCD'ye <code>my-nginx-app<\/code> uygulamas\u0131n\u0131 <code>123<\/code> ID'li senkronizasyonun durumuna geri d\u00f6nd\u00fcrmesini s\u00f6yleyecektir. CLI arac\u0131l\u0131\u011f\u0131yla geri d\u00f6n\u00fc\u015f, otomasyon betikleri i\u00e7in veya uzak sunuculardan h\u0131zl\u0131 m\u00fcdahale gerekti\u011finde olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>Bu pratik \u00f6rnek, ArgoCD'nin GitOps felsefesiyle nas\u0131l entegre \u00e7al\u0131\u015farak, da\u011f\u0131t\u0131m sorunlar\u0131nda h\u0131zl\u0131 ve g\u00fcvenilir bir geri d\u00f6n\u00fc\u015f mekanizmas\u0131 sundu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Anahtar nokta, Git'in de\u011fi\u015fmez ve versiyonlanabilir yap\u0131s\u0131n\u0131 kullanarak uygulaman\u0131z\u0131n her bir kararl\u0131 durumunu kaydetmek ve bu durumlara an\u0131nda geri d\u00f6nebilmektir.<\/p>\n<h2>Vaka Analizi: B\u00fcy\u00fck Bir E-ticaret Uygulamas\u0131nda Ba\u015far\u0131s\u0131z Da\u011f\u0131t\u0131m ve H\u0131zl\u0131 Geri D\u00f6n\u00fc\u015f<\/h2>\n<p>Ger\u00e7ek d\u00fcnyadan bir \u00f6rnekle, ArgoCD'nin ve s\u0131f\u0131r kesinti geri d\u00f6n\u00fc\u015f yetene\u011finin bir \u015firketin operasyonlar\u0131nda nas\u0131l fark yaratabilece\u011fine yak\u0131ndan bakal\u0131m. Bu vaka analizi, b\u00fcy\u00fck \u00f6l\u00e7ekli bir e-ticaret platformunun ya\u015fad\u0131\u011f\u0131 ger\u00e7ek bir senaryoyu ve ArgoCD'nin bu senaryodaki kurtar\u0131c\u0131 rol\u00fcn\u00fc g\u00f6zler \u00f6n\u00fcne serecek.<\/p>\n<h3>Senaryo: \"MegaMa\u011faza\" E-ticaret Platformu<\/h3>\n<p>MegaMa\u011faza, milyonlarca kullan\u0131c\u0131s\u0131 olan, g\u00fcnde y\u00fcz binlerce i\u015flem ger\u00e7ekle\u015ftiren ve Black Friday, Siber Pazartesi gibi \u00f6zel g\u00fcnlerde trafik zirvesi ya\u015fayan dev bir e-ticaret platformudur. Altyap\u0131s\u0131 Kubernetes \u00fczerinde mikroservis mimarisiyle in\u015fa edilmi\u015f ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri ArgoCD ile GitOps prensiplerine g\u00f6re y\u00f6netilmektedir. Her bir mikroservisin (\u00f6deme servisi, \u00fcr\u00fcn katalog servisi, envanter servisi, kullan\u0131c\u0131 profili servisi vb.) kendi Git deposu ve ArgoCD uygulamas\u0131 bulunmaktad\u0131r.<\/p>\n<h4>Olay: \u00d6deme Servisi Da\u011f\u0131t\u0131m Hatas\u0131<\/h4>\n<p>Black Friday'e iki g\u00fcn kala, MegaMa\u011faza DevOps ekibi, \u00f6deme servisi i\u00e7in yeni bir s\u00fcr\u00fcm (v2.1.0) da\u011f\u0131tmaya karar verdi. Bu yeni s\u00fcr\u00fcm, performans\u0131 art\u0131racak ve yeni bir \u00f6deme y\u00f6ntemini destekleyecekti. Geleneksel CI\/CD pipeline'lar\u0131 \u00fczerinden testleri ba\u015far\u0131yla ge\u00e7mi\u015f, entegrasyon testleri de olumlu sonu\u00e7lanm\u0131\u015ft\u0131. Manifestolar Git deposuna commit edildi ve ArgoCD, otomatik senkronizasyon politikas\u0131 sayesinde \u00f6deme servisini v2.1.0 s\u00fcr\u00fcm\u00fcne g\u00fcncellemeye ba\u015flad\u0131.<\/p>\n<p>Da\u011f\u0131t\u0131m\u0131n ilk be\u015f dakikas\u0131 sorunsuz ge\u00e7ti. Yeni pod'lar sa\u011fl\u0131kl\u0131 bir \u015fekilde aya\u011fa kalkt\u0131 ve trafik yava\u015f yava\u015f onlara y\u00f6nlendirildi (rolling update stratejisiyle). Ancak, da\u011f\u0131t\u0131m\u0131n onuncu dakikas\u0131nda, \u00fcretim ortam\u0131ndaki hata izleme sistemleri (APM ara\u00e7lar\u0131) \u00f6deme servisinde anormal bir hata art\u0131\u015f\u0131 ve i\u015flem ba\u015far\u0131s\u0131zl\u0131klar\u0131 bildirmeye ba\u015flad\u0131. \u0130lk ba\u015fta k\u00fc\u00e7\u00fck bir problem gibi g\u00f6r\u00fcnse de, hata oran\u0131 h\u0131zla %0.5'ten %10'a, ard\u0131ndan %25'e \u00e7\u0131kt\u0131. Bu durum, y\u00fcz binlerce dolarl\u0131k i\u015flem kayb\u0131 ve m\u00fc\u015fteri memnuniyetsizli\u011fi anlam\u0131na geliyordu.<\/p>\n<h4>Acil M\u00fcdahale ve ArgoCD'nin Rol\u00fc<\/h4>\n<p>DevOps ekibi an\u0131nda durum odas\u0131na (war room) girdi. \u0130zleme panolar\u0131 ve hata g\u00fcnl\u00fckleri, hatan\u0131n v2.1.0 s\u00fcr\u00fcm\u00fcne ge\u00e7i\u015fle birlikte ba\u015flad\u0131\u011f\u0131n\u0131 net bir \u015fekilde g\u00f6steriyordu. Ancak hatan\u0131n tam nedeni (k\u00fc\u00e7\u00fck bir veri taban\u0131 sorgu hatas\u0131 m\u0131, bir ba\u011f\u0131ml\u0131l\u0131k problemi mi, yoksa bir kaynak s\u0131z\u0131nt\u0131s\u0131 m\u0131) h\u0131zl\u0131ca tespit edilemiyordu ve Black Friday arifesinde risk almak istemiyorlard\u0131. En g\u00fcvenli ve h\u0131zl\u0131 \u00e7\u00f6z\u00fcm, \u00f6nceki kararl\u0131 s\u00fcr\u00fcm olan v2.0.0'a geri d\u00f6nmekti.<\/p>\n<p>Ekip lideri, h\u0131zl\u0131ca ArgoCD UI'a eri\u015fti. \u00d6deme servisi uygulamas\u0131n\u0131n \"Degraded\" durumda oldu\u011funu g\u00f6rd\u00fc. \"History and Rollback\" sekmesine giderek, mevcut v2.1.0 da\u011f\u0131t\u0131m\u0131n\u0131n bir \u00f6nceki ba\u015far\u0131l\u0131 da\u011f\u0131t\u0131m olan v2.0.0'\u0131 temsil eden commit'i buldu. Tek bir t\u0131klamayla, v2.0.0 commit'ini se\u00e7erek \"ROLLBACK\" butonuna bast\u0131.<\/p>\n<p>ArgoCD, bu iste\u011fi al\u0131r almaz \u00f6deme servisini v2.0.0 s\u00fcr\u00fcm\u00fcne geri d\u00f6nd\u00fcrme s\u00fcrecini ba\u015flatt\u0131. Kubernetes k\u00fcmesinde, v2.1.0 pod'lar\u0131 a\u015famal\u0131 olarak sonland\u0131r\u0131l\u0131rken, v2.0.0 pod'lar\u0131 h\u0131zl\u0131ca ba\u015flat\u0131ld\u0131. T\u00fcm bu s\u00fcre\u00e7, rolling update stratejisi sayesinde kullan\u0131c\u0131lar i\u00e7in neredeyse hi\u00e7 kesinti olmadan ger\u00e7ekle\u015fti. Mevcut v2.1.0 pod'lar\u0131 \u00e7al\u0131\u015fmaya devam ederken yeni v2.0.0 pod'lar\u0131 haz\u0131r hale geldi, b\u00f6ylece trafi\u011fi i\u015fleyecek her zaman yeterli say\u0131da pod mevcuttu.<\/p>\n<h4>Sonu\u00e7 ve Kazan\u0131mlar<\/h4>\n<p>Geri d\u00f6n\u00fc\u015f i\u015flemi sadece 3 dakika s\u00fcrd\u00fc. 3 dakika sonra, \u00f6deme servisi tekrar v2.0.0 s\u00fcr\u00fcm\u00fcnde tamamen \"Healthy\" ve \"Synced\" durumuna geldi. Hata oranlar\u0131 h\u0131zla d\u00fc\u015ft\u00fc ve i\u015flemler normale d\u00f6nd\u00fc. Bu h\u0131zl\u0131 geri d\u00f6n\u00fc\u015f sayesinde MegaMa\u011faza, Black Friday arifesinde ya\u015fanabilecek b\u00fcy\u00fck bir finansal kayb\u0131 ve itibar zedelenmesini \u00f6nledi. Kullan\u0131c\u0131lar, k\u0131sa bir yava\u015flama d\u0131\u015f\u0131nda, ciddi bir kesinti veya \u00f6deme ba\u015far\u0131s\u0131zl\u0131\u011f\u0131 deneyimlemediler.<\/p>\n<p>Bu vaka, ArgoCD ve GitOps'un neden modern, y\u00fcksek \u00f6l\u00e7ekli ve kritik \u00f6neme sahip sistemler i\u00e7in vazge\u00e7ilmez oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Geri d\u00f6n\u00fc\u015f s\u00fcresi, geleneksel manuel y\u00f6ntemlerle saatler s\u00fcrebilecekken, ArgoCD ile dakikalarla \u00f6l\u00e7\u00fcl\u00fcr hale geldi. Git'in sa\u011flad\u0131\u011f\u0131 versiyon kontrol\u00fc, her da\u011f\u0131t\u0131m\u0131n izlenebilirli\u011fini ve geri al\u0131nabilirli\u011fini garanti ederek operasyonel riskleri minimuma indirdi. Bu sayede, DevOps ekibi sorunlu s\u00fcr\u00fcm\u00fc sakin bir \u015fekilde analiz etme ve d\u00fczeltme f\u0131rsat\u0131 bulurken, i\u015f s\u00fcreklili\u011fi de sa\u011flanm\u0131\u015f oldu.<\/p>\n<h2>\u0130leri D\u00fczey ArgoCD ile Da\u011f\u0131t\u0131m Otomasyonu ve G\u00fcvenli\u011fi<\/h2>\n<p>ArgoCD'nin temel geri d\u00f6n\u00fc\u015f yetenekleri zaten etkileyici olsa da, platform daha karma\u015f\u0131k ve g\u00fcvenli da\u011f\u0131t\u0131m stratejileri i\u00e7in de g\u00fc\u00e7l\u00fc \u00f6zellikler sunar. Bu b\u00f6l\u00fcmde, otomatik geri d\u00f6n\u00fc\u015f politikalar\u0131, sa\u011fl\u0131k kontrolleri ve Argo Rollouts gibi ileri d\u00fczey konulara de\u011finece\u011fiz.<\/p>\n<h3>Otomatik Geri D\u00f6n\u00fc\u015f Politikalar\u0131 ve Sa\u011fl\u0131k Kontrolleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?<\/h3>\n<p>ArgoCD, sadece manuel geri d\u00f6n\u00fc\u015flere de\u011fil, ayn\u0131 zamanda belirli ko\u015fullar alt\u0131nda otomatik geri d\u00f6n\u00fc\u015flere de olanak tan\u0131r. Bu, \u00f6zellikle gece veya hafta sonu gibi m\u00fcdahalenin zor oldu\u011fu zamanlarda kritik uygulamalar i\u00e7in paha bi\u00e7ilmezdir. Otomatik geri d\u00f6n\u00fc\u015fleri tetiklemek i\u00e7in ArgoCD, Kubernetes kaynaklar\u0131n\u0131n sa\u011fl\u0131k durumunu (Health Status) ve ya\u015fam d\u00f6ng\u00fcs\u00fc kancalar\u0131n\u0131 (Lifecycle Hooks) kullan\u0131r.<\/p>\n<h4>Sa\u011fl\u0131k Kontrolleri (Health Checks)<\/h4>\n<p>Kubernetes, pod'lar\u0131n ve di\u011fer kaynaklar\u0131n sa\u011fl\u0131kl\u0131 olup olmad\u0131\u011f\u0131n\u0131 belirlemek i\u00e7in \u00e7e\u015fitli mekanizmalar sunar (\u00f6rne\u011fin, Liveness ve Readiness Problar\u0131). ArgoCD, bu sa\u011fl\u0131k durumlar\u0131n\u0131 s\u00fcrekli olarak izler. E\u011fer bir da\u011f\u0131t\u0131m sonras\u0131nda uygulama \"Healthy\" durumuna ge\u00e7emezse veya \"Degraded\" hale gelirse, ArgoCD bunu bir sorun olarak alg\u0131lar. GitOps manifestonuzda, ArgoCD'ye bir uygulaman\u0131n ne zaman sa\u011fl\u0131ks\u0131z say\u0131laca\u011f\u0131n\u0131 ve bu durumda ne yapmas\u0131 gerekti\u011fini bildiren \u00f6zel <code>sync<\/code> ve <code>health<\/code> ayarlar\u0131 tan\u0131mlayabilirsiniz.<\/p>\n<p>\u00d6rne\u011fin, bir Deployment'\u0131n t\u00fcm pod'lar\u0131 beklenen say\u0131da \"Ready\" durumuna gelmezse veya uzun s\u00fcre \"CrashLoopBackOff\" durumunda kal\u0131rsa, ArgoCD bu durumu yakalayabilir ve otomatik olarak \u00f6nceki kararl\u0131 s\u00fcr\u00fcme geri d\u00f6necek \u015fekilde yap\u0131land\u0131r\u0131labilir. Bu, bir <code>Application<\/code> kayna\u011f\u0131nda <code>syncPolicy<\/code> alt\u0131nda <code>automated<\/code> ayarlar\u0131yla yap\u0131l\u0131r:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: argoproj.io\/v1alpha1\nkind: Application\nmetadata:\n  name: my-app\nspec:\n  destination:\n    namespace: default\n    server: https:\/\/kubernetes.default.svc\n  project: default\n  source:\n    path: k8s\n    repoURL: https:\/\/github.com\/my-org\/my-app-repo.git\n    targetRevision: HEAD\n  syncPolicy:\n    automated: # Otomatik senkronizasyon ve geri d\u00f6n\u00fc\u015f politikas\u0131\n      prune: true\n      selfHeal: true # Drift alg\u0131land\u0131\u011f\u0131nda otomatik d\u00fczeltme\n      allowEmpty: false\n    syncOptions:\n      - CreateNamespace=true\n    retry:\n      limit: 5 # Senkronizasyon ba\u015far\u0131s\u0131z olursa ka\u00e7 kez denensin\n      backoff:\n        duration: 5s # \u0130lk deneme sonras\u0131 bekleme s\u00fcresi\n        maxDuration: 3m # Maksimum bekleme s\u00fcresi\n        factor: 2 # \u00dcstel art\u0131\u015f fakt\u00f6r\u00fc\n<\/pre>\n<p><\/code><\/p>\n<p><code>selfHeal: true<\/code> ayar\u0131, ArgoCD'nin d\u0131\u015f m\u00fcdahalelerle k\u00fcmede olu\u015fan \"drift\" (Git'teki durumdan sapma) durumlar\u0131n\u0131 otomatik olarak d\u00fczelterek Git'teki duruma geri d\u00f6nd\u00fcrmesini sa\u011flar. Bu, bir anlamda uygulaman\u0131z\u0131n her zaman Git'teki \"do\u011fru\" durumda kalmas\u0131n\u0131 garantileyen bir s\u00fcrekli geri d\u00f6n\u00fc\u015f veya \"kendi kendini onarma\" mekanizmas\u0131d\u0131r.<\/p>\n<h3>Argo Rollouts ile Daha Ak\u0131ll\u0131 Da\u011f\u0131t\u0131m Stratejileri: Canary ve Blue\/Green Otomasyonu<\/h3>\n<p>Yukar\u0131da bahsedilen Rolling Update, Canary ve Blue\/Green gibi da\u011f\u0131t\u0131m stratejilerini Kubernetes'in standart Deployment kaynaklar\u0131yla y\u00f6netmek m\u00fcmk\u00fcnd\u00fcr, ancak Canary ve Blue\/Green gibi karma\u015f\u0131k stratejilerde trafik y\u00f6nlendirme, ad\u0131m ad\u0131m tan\u0131t\u0131m ve otomatik do\u011frulama gibi \u00f6zellikleri y\u00f6netmek zahmetli olabilir. \u0130\u015fte burada <b>Argo Rollouts<\/b> devreye girer. Argo Rollouts, ArgoCD ekosisteminin bir par\u00e7as\u0131d\u0131r ve Kubernetes'e geli\u015fmi\u015f da\u011f\u0131t\u0131m stratejileri (Canary, Blue\/Green, A\/B testing) getiren \u00f6zel bir denetleyicidir (controller).<\/p>\n<p>Argo Rollouts, standart Deployment API'sini geni\u015fleterek, Rollout ad\u0131nda yeni bir Kubernetes kayna\u011f\u0131 sunar. Bu Rollout kayna\u011f\u0131, uygulaman\u0131z\u0131n da\u011f\u0131t\u0131m stratejisini (\u00f6rne\u011fin, %10 trafikle bir Canary ba\u015flat, 2 dakika bekle, sa\u011fl\u0131k kontrollerini yap, ba\u015far\u0131l\u0131ysa %50'ye \u00e7\u0131kar vb.) deklaratif olarak tan\u0131mlaman\u0131z\u0131 sa\u011flar. Argo Rollouts, bu stratejiyi ad\u0131m ad\u0131m otomatik olarak y\u00fcr\u00fct\u00fcr ve bir sorun tespit edildi\u011finde da\u011f\u0131t\u0131m\u0131 otomatik olarak geri alabilir.<\/p>\n<pre><code class=\"language-yaml\"># rollout.yaml (\u00d6rnek Canary da\u011f\u0131t\u0131m\u0131)\napiVersion: argoproj.io\/v1alpha1\nkind: Rollout\nmetadata:\n  name: canary-app\nspec:\n  replicas: 5\n  selector:\n    matchLabels:\n      app: canary-app\n  template:\n    metadata:\n      labels:\n        app: canary-app\n    spec:\n      containers:\n      - name: canary-app\n        image: my-repo\/my-app:v1.1 # Yeni versiyon\n        ports:\n        - containerPort: 8080\n  strategy:\n    canary:\n      steps:\n      - setWeight: 20 # Trafi\u011fin %20'si yeni s\u00fcr\u00fcme y\u00f6nlendirilir\n      - pause: { duration: 1m } # 1 dakika bekle\n      - setWeight: 50 # Trafi\u011fin %50'si yeni s\u00fcr\u00fcme y\u00f6nlendirilir\n      - pause: { duration: 1m } # 1 dakika daha bekle\n      # Ba\u015far\u0131l\u0131 olursa otomatik olarak %100'e \u00e7\u0131kar\n      # Hata olursa geri d\u00f6ner\n<\/pre>\n<p><\/code><\/p>\n<p>ArgoCD, Argo Rollouts ile sorunsuz bir \u015fekilde entegre olur. ArgoCD, Rollout kayna\u011f\u0131n\u0131 Git deposundan al\u0131r ve Kubernetes k\u00fcmesine da\u011f\u0131t\u0131r. Rollout kayna\u011f\u0131n\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc ve durumu daha sonra Argo Rollouts denetleyicisi taraf\u0131ndan y\u00f6netilir. Bu sayede, GitOps prensiplerini koruyarak \u00e7ok daha sofistike ve kontroll\u00fc da\u011f\u0131t\u0131m stratejileri uygulayabilir, s\u0131f\u0131r kesinti geri d\u00f6n\u00fc\u015f yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131yabilirsiniz. \u00d6rne\u011fin, Prometheus veya Datadog gibi izleme ara\u00e7lar\u0131yla entegrasyon kurarak, bir Canary da\u011f\u0131t\u0131m\u0131nda hata oranlar\u0131 veya gecikme s\u00fcreleri belirli bir e\u015fi\u011fi a\u015ft\u0131\u011f\u0131nda otomatik geri d\u00f6n\u00fc\u015f tetikleyebilirsiniz.<\/p>\n<h3>Mobil Uyumlu HTML \u0130\u00e7in Medya Sorgular\u0131 (Media Queries)<\/h3>\n<p>Bir makalenin kendisi do\u011frudan mobil uyumlu HTML \u00e7\u0131kt\u0131s\u0131 \u00fcretemese de, mobil uyumlu tasar\u0131m prensiplerini ve medya sorgular\u0131n\u0131n nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 a\u00e7\u0131klamak \u00f6nemlidir. Web uygulamalar\u0131 ve aray\u00fczler tasarlarken, farkl\u0131 ekran boyutlar\u0131na ve cihazlara (masa\u00fcst\u00fc, tablet, mobil) uyum sa\u011flamak esast\u0131r. Bu uyumu sa\u011flaman\u0131n temel ara\u00e7lar\u0131ndan biri CSS Medya Sorgular\u0131d\u0131r.<\/p>\n<p>Medya sorgular\u0131, taray\u0131c\u0131n\u0131n veya cihaz\u0131n \u00f6zelliklerine (geni\u015flik, y\u00fckseklik, y\u00f6nlendirme, \u00e7\u00f6z\u00fcn\u00fcrl\u00fck vb.) ba\u011fl\u0131 olarak farkl\u0131 CSS stilleri uygulaman\u0131za olanak tan\u0131r. Bu sayede, ayn\u0131 HTML yap\u0131s\u0131n\u0131 kullanarak farkl\u0131 cihazlarda en iyi kullan\u0131c\u0131 deneyimini sunabilirsiniz.<\/p>\n<pre><code class=\"language-css\">\/* Genel stil ayarlar\u0131 *\/\nbody {\n  font-family: Arial, sans-serif;\n  line-height: 1.6;\n  margin: 0;\n  padding: 20px;\n  background-color: #f4f4f4;\n}\n\n.container {\n  max-width: 1200px;\n  margin: auto;\n  overflow: hidden;\n  padding: 0 20px;\n}\n\n\/* K\u00fc\u00e7\u00fck ekranlar (mobil cihazlar) i\u00e7in medya sorgusu *\/\n@media screen and (max-width: 768px) {\n  .container {\n    padding: 0 10px;\n  }\n\n  h2 {\n    font-size: 1.5em;\n  }\n\n  p {\n    font-size: 0.9em;\n  }\n  \n  \/* \u00d6rne\u011fin, iki s\u00fctunlu bir d\u00fczeni tek s\u00fctuna indirmek *\/\n  .two-column-layout {\n    flex-direction: column;\n  }\n\n  .two-column-layout > div {\n    width: 100%; \/* Mobil cihazlarda tam geni\u015flik *\/\n    margin-bottom: 20px;\n  }\n}\n\n\/* Orta boyutlu ekranlar (tabletler) i\u00e7in medya sorgusu *\/\n@media screen and (min-width: 769px) and (max-width: 1024px) {\n  .container {\n    padding: 0 15px;\n  }\n\n  h2 {\n    font-size: 1.8em;\n  }\n  \n  \/* \u0130ki s\u00fctunlu d\u00fczeni koru ama geni\u015fliklerini ayarla *\/\n  .two-column-layout > div {\n    width: 48%; \/* Tabletlerde yar\u0131 geni\u015flik *\/\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>@media screen and (max-width: 768px)<\/code> kural\u0131, ekran geni\u015fli\u011fi 768 pikselden az oldu\u011funda (tipik mobil cihazlar), farkl\u0131 stillerin uygulanmas\u0131n\u0131 sa\u011flar. Bu, metin boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltmek, s\u00fctunlar\u0131 tek bir s\u00fctun haline getirmek veya men\u00fcleri daha kompakt hale getirmek gibi de\u011fi\u015fiklikleri i\u00e7erir. Bu sayede, kullan\u0131c\u0131lar hangi cihaz\u0131 kullan\u0131rsa kullans\u0131n, i\u00e7eri\u011fi rahat\u00e7a okuyabilir ve uygulamay\u0131 kolayca kullanabilirler. ArgoCD UI'\u0131 gibi modern web aray\u00fczleri de benzer medya sorgular\u0131n\u0131 ve responsive tasar\u0131m prensiplerini kullanarak farkl\u0131 cihazlarda tutarl\u0131 bir deneyim sunar.<\/p>\n<h2>Sonu\u00e7: GitOps ve ArgoCD ile Da\u011f\u0131t\u0131m M\u00fckemmelli\u011fi<\/h2>\n<p>Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesinti geri d\u00f6n\u00fc\u015fler, modern yaz\u0131l\u0131m da\u011f\u0131t\u0131m\u0131n\u0131n temel direklerinden biridir. Bu makalede g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, <b>GitOps<\/b> felsefesi ve onun Kubernetes'teki g\u00fc\u00e7l\u00fc uygulay\u0131c\u0131s\u0131 <b>ArgoCD<\/b>, bu hayati yetene\u011fi ekiplerin eline veriyor. Git'in de\u011fi\u015fmez, versiyonlanabilir ve denetlenebilir do\u011fas\u0131n\u0131 kullanarak, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerimizi daha g\u00fcvenli, \u00f6ng\u00f6r\u00fclebilir ve h\u0131zl\u0131 hale getiriyoruz. \u0130ster basit bir hatal\u0131 da\u011f\u0131t\u0131mdan geri d\u00f6nmek, ister karma\u015f\u0131k Canary veya Blue\/Green stratejileri uygulamak olsun, ArgoCD bize her senaryoda g\u00fcvenilir bir yol arkada\u015f\u0131 sunar. Bu ara\u00e7 sayesinde ekipler, da\u011f\u0131t\u0131m korkular\u0131n\u0131 bir kenara b\u0131rak\u0131p, daha \u00e7ok yenilik yapmaya ve de\u011fer katmaya odaklanabilirler.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Bu b\u00f6l\u00fcmde, ArgoCD ve s\u0131f\u0131r kesinti geri d\u00f6n\u00fc\u015fler hakk\u0131nda akla gelebilecek baz\u0131 yayg\u0131n sorular\u0131 yan\u0131tl\u0131yoruz.<\/p>\n<table border=\"1\">\n<thead>\n<tr>\n<th>Soru<\/th>\n<th>Cevap<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>S\u0131f\u0131r kesinti geri d\u00f6n\u00fc\u015f neden bu kadar \u00f6nemli?<\/strong><\/td>\n<td>Uygulama kesintileri, do\u011frudan gelir kayb\u0131na, m\u00fc\u015fteri memnuniyetsizli\u011fine ve marka itibar\u0131n\u0131n zedelenmesine yol a\u00e7ar. S\u0131f\u0131r kesinti geri d\u00f6n\u00fc\u015fler, hatal\u0131 da\u011f\u0131t\u0131mlar\u0131n etkisini minimize ederek i\u015f s\u00fcreklili\u011fini ve m\u00fc\u015fteri g\u00fcvenini koruman\u0131z\u0131 sa\u011flar. \u00d6zellikle kritik e-ticaret, finans veya sa\u011fl\u0131k uygulamalar\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/td>\n<\/tr>\n<tr>\n<td><strong>ArgoCD, geri d\u00f6n\u00fc\u015fleri otomatik olarak yapabilir mi?<\/strong><\/td>\n<td>Evet. ArgoCD, uygulaman\u0131z\u0131n sa\u011fl\u0131k durumunu (Kubernetes Liveness\/Readiness probu sonu\u00e7lar\u0131, \u00f6zel sa\u011fl\u0131k kontrolleri) izleyebilir ve belirli ko\u015fullar alt\u0131nda (\u00f6rne\u011fin, uygulaman\u0131n 'Degraded' duruma ge\u00e7mesi) otomatik olarak \u00f6nceki kararl\u0131 s\u00fcr\u00fcme geri d\u00f6nmek \u00fczere yap\u0131land\u0131r\u0131labilir. Bu, <code>selfHeal: true<\/code> ve <code>automated<\/code> senkronizasyon politikalar\u0131 ile sa\u011flan\u0131r.<\/td>\n<\/tr>\n<tr>\n<td><strong>ArgoCD sadece Rolling Update mi destekler? Blue\/Green veya Canary da\u011f\u0131t\u0131mlar\u0131 i\u00e7in ne yapmal\u0131y\u0131m?<\/strong><\/td>\n<td>ArgoCD, temel Kubernetes Deployment kaynaklar\u0131n\u0131 y\u00f6netti\u011fi i\u00e7in do\u011frudan Rolling Update'i destekler. Ancak, daha geli\u015fmi\u015f stratejiler (Blue\/Green, Canary) i\u00e7in ArgoCD'nin ekosistemindeki bir ba\u015fka ara\u00e7 olan Argo Rollouts'u kullanmal\u0131s\u0131n\u0131z. Argo Rollouts, bu stratejileri deklaratif olarak tan\u0131mlaman\u0131za ve otomatik olarak y\u00f6netmenize olanak tan\u0131r ve ArgoCD ile sorunsuz bir \u015fekilde entegre olur.<\/td>\n<\/tr>\n<tr>\n<td><strong>Geri d\u00f6n\u00fc\u015f i\u015flemleri ne kadar s\u00fcrer?<\/strong><\/td>\n<td>Geri d\u00f6n\u00fc\u015f s\u00fcresi, uygulaman\u0131z\u0131n boyutuna, pod'lar\u0131n ba\u015flatma s\u00fcresine, kulland\u0131\u011f\u0131n\u0131z da\u011f\u0131t\u0131m stratejisine ve Kubernetes k\u00fcmenizin performans\u0131na ba\u011fl\u0131 olarak de\u011fi\u015fir. Basit bir Rolling Update ile ArgoCD'de bu s\u00fcre genellikle birka\u00e7 saniye ile birka\u00e7 dakika aras\u0131ndad\u0131r. Blue\/Green veya Canary stratejileri, trafik ge\u00e7i\u015fini i\u00e7erdi\u011fi i\u00e7in genellikle daha h\u0131zl\u0131d\u0131r.<\/td>\n<\/tr>\n<tr>\n<td><strong>GitOps ve ArgoCD'yi kullanmak i\u00e7in Kubernetes'i ne kadar iyi bilmem gerekir?<\/strong><\/td>\n<td>Temel Kubernetes kavramlar\u0131na (Pod, Deployment, Service, Namespace) a\u015fina olmak GitOps ve ArgoCD'yi etkili bir \u015fekilde kullanmak i\u00e7in yeterlidir. ArgoCD, Kubernetes'in karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 soyutlayarak da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini basitle\u015ftirir, ancak altyap\u0131n\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak sorun giderme ve optimizasyon i\u00e7in her zaman faydal\u0131d\u0131r.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"ArgoCD ile Kubernetes&#8217;te S\u0131f\u0131r Kesinti Geri D\u00f6n\u00fc\u015fler: GitOps&#8217;un G\u00fcc\u00fc Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc&hellip;","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":[1401],"tags":[],"class_list":{"0":"post-35749","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","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>GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?<\/title>\n<meta name=\"description\" content=\"Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri... Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, ArgoCD ve GitOps felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.\" \/>\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\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?\" \/>\n<meta property=\"og:description\" content=\"Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri... Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, ArgoCD ve GitOps felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-03T10:01:14+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=\"30 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?\",\"datePublished\":\"2025-12-03T10:01:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\"},\"wordCount\":5486,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\",\"name\":\"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-03T10:01:14+00:00\",\"description\":\"Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri... Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, ArgoCD ve GitOps felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?\"}]},{\"@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":"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?","description":"Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri... Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, ArgoCD ve GitOps felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.","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\/gitops-ve-argocd-neden-bu-kadar-onemliler\/","og_locale":"tr_TR","og_type":"article","og_title":"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?","og_description":"Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri... Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, ArgoCD ve GitOps felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.","og_url":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-03T10:01:14+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"30 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?","datePublished":"2025-12-03T10:01:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/"},"wordCount":5486,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/","url":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/","name":"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-03T10:01:14+00:00","description":"Kritik bir anda da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131z oldu\u011funu ve uygulaman\u0131z\u0131n \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc hayal edin. Panik, stres ve kesinti maliyetleri... Peki ya sadece birka\u00e7 saniye i\u00e7inde, hi\u00e7bir kesinti ya\u015famadan eski, \u00e7al\u0131\u015fan s\u00fcr\u00fcme geri d\u00f6nebilseydiniz? Kubernetes ortamlar\u0131nda s\u0131f\u0131r kesintiyle geri d\u00f6n\u00fc\u015fler yapmak, ArgoCD ve GitOps felsefesiyle art\u0131k bir hayal de\u011fil, standart bir pratik haline geliyor. Bu makale, sizi bu hayat kurtar\u0131c\u0131 yetene\u011fin temellerinden ileri d\u00fczey uygulamalar\u0131na kadar ad\u0131m ad\u0131m g\u00f6t\u00fcrecek.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gitops-ve-argocd-neden-bu-kadar-onemliler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GitOps ve ArgoCD: Neden Bu Kadar \u00d6nemliler?"}]},{"@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\/35749","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=35749"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35749\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}