{"id":43505,"date":"2026-07-21T21:04:35","date_gmt":"2026-07-21T18:04:35","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/"},"modified":"2026-07-21T21:05:01","modified_gmt":"2026-07-21T18:05:01","slug":"kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/","title":{"rendered":"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon"},"content":{"rendered":"<h2>Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon<\/h2>\n<p>Kubernetes d\u00fcnyas\u0131nda kaynaklar\u0131 y\u00f6netmek, deklaratif (declarative) yakla\u015f\u0131mla m\u00fcmk\u00fcnd\u00fcr ve <code>kubectl apply<\/code> komutu bu yakla\u015f\u0131m\u0131n kalbinde yer al\u0131r. Ancak bu basit g\u00f6r\u00fcnen komutun perde arkas\u0131nda neler d\u00f6nd\u00fc\u011f\u00fcn\u00fc hi\u00e7 merak ettiniz mi? Bu makalede, <code>kubectl apply<\/code>&#8216;\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, istemci tarafl\u0131 (client-side) ve sunucu tarafl\u0131 (server-side) uygulama mekanizmalar\u0131n\u0131, karma\u015f\u0131k senaryolardaki davran\u0131\u015flar\u0131n\u0131 ve en iyi uygulama y\u00f6ntemlerini derinlemesine inceleyece\u011fiz. Amac\u0131m\u0131z, bu komutun sadece bir dosya g\u00f6ndermekten \u00e7ok daha fazlas\u0131 oldu\u011funu, Kubernetes ortam\u0131n\u0131zda istikrarl\u0131 ve \u00f6ng\u00f6r\u00fclebilir bir durum yaratmak i\u00e7in kritik bir rol oynad\u0131\u011f\u0131n\u0131 g\u00f6stermektir.<\/p>\n<h2>Kubernetes Kaynak Y\u00f6netimi Neden Bu Kadar \u00d6nemli?<\/h2>\n<p>Modern uygulama geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde, sistemlerin karma\u015f\u0131kl\u0131\u011f\u0131 her ge\u00e7en g\u00fcn artmaktad\u0131r. Mikroservis mimarileri, bulut yerel (cloud-native) uygulamalar ve s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131, altyap\u0131 y\u00f6netiminin de ayn\u0131 h\u0131zda evrilmesini gerektirmektedir. \u0130\u015fte bu noktada Kubernetes gibi konteyner orkestrasyon platformlar\u0131 devreye girer. Kubernetes, uygulamalar\u0131n\u0131z\u0131 \u00f6l\u00e7eklenebilir, hataya dayan\u0131kl\u0131 ve y\u00f6netilebilir bir \u015fekilde \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. Ancak bu g\u00fc\u00e7, do\u011fru kaynak y\u00f6netimi stratejileriyle birle\u015fti\u011finde ger\u00e7ek potansiyeline ula\u015f\u0131r.<\/p>\n<p>Geleneksel sunucu y\u00f6netimi y\u00f6ntemlerinde, bir sunucuya SSH ile ba\u011flan\u0131p komutlar \u00e7al\u0131\u015ft\u0131rmak veya yap\u0131land\u0131rma dosyalar\u0131n\u0131 manuel olarak d\u00fczenlemek yayg\u0131n bir yakla\u015f\u0131md\u0131. Ancak binlerce konteynerin ve y\u00fczlerce mikroservisin \u00e7al\u0131\u015ft\u0131\u011f\u0131 dinamik bir ortamda bu y\u00f6ntemler s\u00fcrd\u00fcr\u00fclemez hale gelir. Her bir de\u011fi\u015fikli\u011fin manuel olarak yap\u0131lmas\u0131, insan hatas\u0131na a\u00e7\u0131k kap\u0131 b\u0131rak\u0131r, tutars\u0131z yap\u0131land\u0131rmalara yol a\u00e7ar ve felaket kurtarma senaryolar\u0131n\u0131 kabusa \u00e7evirir. Bu nedenle, Kubernetes gibi platformlar, altyap\u0131y\u0131 kod olarak (Infrastructure as Code &#8211; IaC) y\u00f6netme felsefesini benimser. Kaynaklar\u0131n\u0131z\u0131 YAML veya JSON format\u0131nda tan\u0131mlars\u0131n\u0131z ve Kubernetes&#8217;e bu tan\u0131mlar\u0131 uygulamas\u0131n\u0131 s\u00f6ylersiniz.<\/p>\n<p>Peki, bu deklaratif y\u00f6netim yakla\u015f\u0131m\u0131 neden bu kadar kritik? \u00c7\u00fcnk\u00fc bu sayede sisteminizin &#8220;istenen durumunu&#8221; (desired state) a\u00e7\u0131k\u00e7a belirtirsiniz. \u00d6rne\u011fin, bir uygulaman\u0131n her zaman \u00fc\u00e7 kopyas\u0131n\u0131n (replica) \u00e7al\u0131\u015fmas\u0131n\u0131, belirli bir miktarda CPU ve belle\u011fe sahip olmas\u0131n\u0131 veya belirli a\u011f kurallar\u0131na uymas\u0131n\u0131 isteyebilirsiniz. Kubernetes, sizin belirtti\u011finiz bu durumu s\u00fcrekli olarak g\u00f6zlemler ve mevcut durum (current state) ile istenen durum aras\u0131nda bir tutars\u0131zl\u0131k oldu\u011funda otomatik olarak d\u00fczeltici aksiyonlar al\u0131r. Bu, sisteminizin kendi kendini iyile\u015ftirmesini ve belirtilen yap\u0131land\u0131rmaya her zaman uygun kalmas\u0131n\u0131 sa\u011flar. \u0130\u015fte <code>kubectl apply<\/code> komutu, bu deklaratif felsefenin Kubernetes API&#8217;sine ula\u015fan ana kap\u0131s\u0131d\u0131r. Bu komut, kaynak tan\u0131mlar\u0131n\u0131z\u0131 API sunucusuna g\u00f6ndererek sistemin istenen duruma ge\u00e7mesini tetikler ve bu s\u00fcre\u00e7, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden \u00e7ok daha karma\u015f\u0131kt\u0131r.<\/p>\n<h2>Deklaratif Y\u00f6netim ve \u0130stenen Durum Kavram\u0131<\/h2>\n<p><code>kubectl apply<\/code> komutunun derinliklerine inmeden \u00f6nce, Kubernetes&#8217;in temelini olu\u015fturan iki \u00f6nemli kavram\u0131 anlamak \u015fartt\u0131r: deklaratif (declarative) y\u00f6netim ve istenen durum (desired state). Bu kavramlar, Kubernetes&#8217;in &#8220;kendi kendini iyile\u015ftiren&#8221; ve &#8220;otonom&#8221; yap\u0131s\u0131n\u0131n temelini olu\u015fturur ve <code>kubectl apply<\/code>&#8216;\u0131n \u00e7al\u0131\u015fma prensibini do\u011frudan etkiler.<\/p>\n<p><strong>Deklaratif Y\u00f6netim Nedir?<\/strong><\/p>\n<p>Deklaratif y\u00f6netim, bir sistemin &#8220;nas\u0131l&#8221; bir duruma getirilece\u011fini de\u011fil, &#8220;hangi&#8221; durumda olmas\u0131 gerekti\u011fini tan\u0131mlad\u0131\u011f\u0131m\u0131z bir yakla\u015f\u0131md\u0131r. Geleneksel olarak, sistemleri y\u00f6netirken imperatif (imperative) bir yakla\u015f\u0131m benimseriz. \u00d6rne\u011fin, bir sunucuya ba\u011flan\u0131r, bir paketi kurmak i\u00e7in <code>apt install my-package<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r, bir servisi ba\u015flatmak i\u00e7in <code>systemctl start my-service<\/code> yazar\u0131z. Bu, ad\u0131m ad\u0131m talimatlar vererek bir sonuca ula\u015fmaya \u00e7al\u0131\u015fmakt\u0131r. Imperatif yakla\u015f\u0131mlar, k\u00fc\u00e7\u00fck ve basit sistemlerde iyi \u00e7al\u0131\u015fsa da, b\u00fcy\u00fck ve karma\u015f\u0131k da\u011f\u0131t\u0131k sistemlerde h\u0131zla y\u00f6netilemez hale gelir.<\/p>\n<p>Deklaratif y\u00f6netimde ise, sistemin son durumunu (\u00f6rne\u011fin, &#8220;bir web uygulamas\u0131ndan 3 adet \u00e7al\u0131\u015fs\u0131n&#8221;, &#8220;bu uygulama 80 portundan eri\u015filebilir olsun&#8221;) bir yap\u0131land\u0131rma dosyas\u0131 (genellikle YAML veya JSON) arac\u0131l\u0131\u011f\u0131yla belirtiriz. Kubernetes gibi bir sistem, bu yap\u0131land\u0131rma dosyas\u0131n\u0131 okur ve bu istenen duruma ula\u015fmak i\u00e7in gerekli t\u00fcm ad\u0131mlar\u0131 kendi ba\u015f\u0131na atar. Bu yakla\u015f\u0131m, insan hatas\u0131n\u0131 en aza indirir, tekrarlanabilirli\u011fi art\u0131r\u0131r ve sistemin \u00f6ng\u00f6r\u00fclebilirli\u011fini sa\u011flar. <code>kubectl apply<\/code>, i\u015fte bu deklaratif yap\u0131land\u0131rma dosyalar\u0131n\u0131 Kubernetes k\u00fcmesine iletmek i\u00e7in kullan\u0131lan birincil ara\u00e7t\u0131r.<\/p>\n<p><strong>\u0130stenen Durum (Desired State) Nedir?<\/strong><\/p>\n<p>\u0130stenen durum, Kubernetes&#8217;e sa\u011flad\u0131\u011f\u0131n\u0131z YAML veya JSON manifest dosyalar\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z, k\u00fcmedeki kaynaklar\u0131n (Pod&#8217;lar, Deployment&#8217;lar, Service&#8217;ler vb.) ideal yap\u0131land\u0131rmas\u0131d\u0131r. \u00d6rne\u011fin, a\u015fa\u011f\u0131daki basit bir Deployment manifestosu, bir Nginx uygulamas\u0131n\u0131n istenen durumunu tan\u0131mlar:<\/p>\n<div class=\"code-container\">\n<pre><code>\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\n  labels:\n    app: nginx\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.14.2\n        ports:\n        - containerPort: 80\n        resources:\n          limits:\n            cpu: \"100m\"\n            memory: \"128Mi\"\n          requests:\n            cpu: \"50m\"\n            memory: \"64Mi\"\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu manifestoda, Kubernetes&#8217;e \u015funlar\u0131 s\u00f6yl\u00fcyoruz:<\/p>\n<ul>\n<li><code>nginx-deployment<\/code> ad\u0131nda bir Deployment kayna\u011f\u0131 olu\u015ftur.<\/li>\n<li>Bu Deployment&#8217;\u0131n 3 adet kopyas\u0131 (<code>replicas: 3<\/code>) her zaman \u00e7al\u0131\u015f\u0131r durumda olsun.<\/li>\n<li>Her bir kopya (Pod), <code>nginx:1.14.2<\/code> imaj\u0131n\u0131 kullanan bir Nginx konteyneri i\u00e7ersin.<\/li>\n<li>Konteynerin 80 portunu a\u00e7.<\/li>\n<li>Her Pod&#8217;a belirli CPU ve bellek kaynaklar\u0131 tahsis et.<\/li>\n<\/ul>\n<p>Siz bu manifestoyu <code>kubectl apply -f nginx-deployment.yaml<\/code> ile uygulad\u0131\u011f\u0131n\u0131zda, Kubernetes API Sunucusu bu istenen durumu al\u0131r. Ard\u0131ndan, Kubernetes kontrol d\u00fczlemi (control plane) i\u00e7indeki denetleyiciler (controllers), k\u00fcmenin mevcut durumunu s\u00fcrekli olarak bu istenen durumla kar\u015f\u0131la\u015ft\u0131r\u0131r. E\u011fer mevcut durumda 3 Nginx Pod&#8217;u \u00e7al\u0131\u015fm\u0131yorsa (\u00f6rne\u011fin, biri \u00e7\u00f6km\u00fc\u015fse veya hi\u00e7 olu\u015fturulmam\u0131\u015fsa), denetleyici yeni Pod&#8217;lar olu\u015fturarak veya mevcutlar\u0131 d\u00fczelterek istenen duruma ula\u015fmay\u0131 hedefler. Bu s\u00fcrekli senkronizasyon ve kendi kendini d\u00fczeltme mekanizmas\u0131, Kubernetes&#8217;i modern altyap\u0131 y\u00f6netiminde vazge\u00e7ilmez k\u0131lar. <code>kubectl apply<\/code>&#8216;\u0131n g\u00f6revi, bu istenen durumu Kubernetes&#8217;e do\u011fru ve g\u00fcvenli bir \u015fekilde bildirmektir.<\/p>\n<h2><code>kubectl apply<\/code> Nas\u0131l \u00c7al\u0131\u015f\u0131r? \u0130stemci Tarafl\u0131 Uygulama (Client-Side Apply)<\/h2>\n<p><code>kubectl apply<\/code> komutunun temel \u00e7al\u0131\u015fma prensibi, bir YAML veya JSON dosyas\u0131nda tan\u0131mlanan istenen durumu Kubernetes k\u00fcmesine iletmektir. Ancak bu s\u00fcre\u00e7, basit bir dosya kopyalamadan \u00e7ok daha karma\u015f\u0131kt\u0131r. \u00d6zellikle Kubernetes&#8217;in ilk zamanlar\u0131ndan beri kullan\u0131lan istemci tarafl\u0131 uygulama (Client-Side Apply) mekanizmas\u0131, kaynaklar\u0131n g\u00fcncellenmesi s\u0131ras\u0131nda \u00fc\u00e7 y\u00f6nl\u00fc bir birle\u015ftirme (three-way merge) stratejisi kullan\u0131r. Bu strateji, birden fazla kullan\u0131c\u0131n\u0131n veya s\u00fcrecin ayn\u0131 kayna\u011f\u0131 e\u015f zamanl\u0131 olarak g\u00fcncellemeye \u00e7al\u0131\u015fmas\u0131 durumunda ortaya \u00e7\u0131kabilecek sorunlar\u0131 y\u00f6netmek i\u00e7in geli\u015ftirilmi\u015ftir.<\/p>\n<h3>\u00dc\u00e7 Y\u00f6nl\u00fc Birle\u015ftirme (Three-Way Merge) Mekanizmas\u0131<\/h3>\n<p>\u0130stemci tarafl\u0131 uygulama, bir kayna\u011f\u0131 g\u00fcncellerken \u00fc\u00e7 farkl\u0131 bilgi par\u00e7as\u0131n\u0131 dikkate al\u0131r:<\/p>\n<ol>\n<li><strong>Canl\u0131 Durum (Live State):<\/strong> Kubernetes k\u00fcmesinde o anki kayna\u011f\u0131n mevcut durumu. Bu, API sunucusundan sorgulanarak elde edilir.<\/li>\n<li><strong>Son Uygulanan Yap\u0131land\u0131rma (Last-Applied-Configuration):<\/strong> Bir \u00f6nceki <code>kubectl apply<\/code> i\u015flemi s\u0131ras\u0131nda kullan\u0131lan yap\u0131land\u0131rma. Bu bilgi, kayna\u011f\u0131n <code>metadata.annotations<\/code> alan\u0131nda <code>kubectl.kubernetes.io\/last-applied-configuration<\/code> anahtar\u0131 alt\u0131nda saklan\u0131r. Bu, <code>kubectl apply<\/code>&#8216;\u0131n hangi alanlar\u0131 daha \u00f6nce y\u00f6netti\u011fini hat\u0131rlamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Yeni Yap\u0131land\u0131rma (New Configuration):<\/strong> Sizin <code>kubectl apply -f my-resource.yaml<\/code> komutuyla sa\u011flam\u0131\u015f oldu\u011funuz YAML veya JSON dosyas\u0131. Bu, kayna\u011f\u0131n ula\u015fmas\u0131n\u0131 istedi\u011finiz en g\u00fcncel durumdur.<\/li>\n<\/ol>\n<p><code>kubectl apply<\/code> komutu \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, a\u015fa\u011f\u0131daki ad\u0131mlar izlenir:<\/p>\n<ol>\n<li><strong>Manifest Dosyas\u0131n\u0131 Oku:<\/strong> <code>kubectl<\/code> istemcisi, belirtti\u011finiz YAML\/JSON dosyas\u0131n\u0131 okur ve yeni yap\u0131land\u0131rmay\u0131 belle\u011fine al\u0131r.<\/li>\n<li><strong>Canl\u0131 Durumu Al:<\/strong> <code>kubectl<\/code>, Kubernetes API sunucusuna bir GET iste\u011fi g\u00f6ndererek g\u00fcncellenmek istenen kayna\u011f\u0131n mevcut durumunu (canl\u0131 durumu) al\u0131r.<\/li>\n<li><strong>Son Uygulanan Yap\u0131land\u0131rmay\u0131 Al:<\/strong> <code>kubectl<\/code>, canl\u0131 durumdan <code>metadata.annotations[\"kubectl.kubernetes.io\/last-applied-configuration\"]<\/code> alan\u0131ndaki de\u011feri \u00e7\u0131kar\u0131r. Bu, daha \u00f6nce <code>kubectl apply<\/code> taraf\u0131ndan uygulanan yap\u0131land\u0131rmad\u0131r. E\u011fer bu annotation yoksa, kaynak ilk kez uygulan\u0131yor demektir.<\/li>\n<li><strong>Fark\u0131 Hesapla ve Birle\u015ftir:<\/strong> \u0130\u015fte sihirli k\u0131s\u0131m burada ger\u00e7ekle\u015fir. <code>kubectl<\/code> istemcisi, yeni yap\u0131land\u0131rma, canl\u0131 durum ve son uygulanan yap\u0131land\u0131rma aras\u0131ndaki fark\u0131 (diff) hesaplar. Bu \u00fc\u00e7 bilgiyi kullanarak, bir &#8220;birle\u015ftirme yamas\u0131&#8221; (merge patch) olu\u015fturur. Bu yama, canl\u0131 durumun nas\u0131l g\u00fcncellenmesi gerekti\u011fini belirtir. \u00d6rne\u011fin, e\u011fer yeni yap\u0131land\u0131rmada bir alan eklenmi\u015fse ve bu alan son uygulanan yap\u0131land\u0131rmada yoksa, yama bu alan\u0131 ekler. E\u011fer bir alan son uygulanan yap\u0131land\u0131rmada olup yeni yap\u0131land\u0131rmada yoksa, yama bu alan\u0131 canl\u0131 durumdan kald\u0131r\u0131r. E\u011fer bir alan hem son uygulanan hem de yeni yap\u0131land\u0131rmada varsa ve de\u011feri de\u011fi\u015fmi\u015fse, yama yeni de\u011feri uygular.<\/li>\n<li><strong>PATCH \u0130ste\u011fini G\u00f6nder:<\/strong> Olu\u015fturulan birle\u015ftirme yamas\u0131, Kubernetes API sunucusuna bir HTTP PATCH iste\u011fi olarak g\u00f6nderilir. Bu istek, kayna\u011f\u0131n sadece de\u011fi\u015fen alanlar\u0131n\u0131 g\u00fcnceller.<\/li>\n<li><strong>G\u00fcncelle ve Annotation Ekle:<\/strong> API sunucusu, PATCH iste\u011fini i\u015fler ve kayna\u011f\u0131 g\u00fcnceller. Ayr\u0131ca, g\u00fcncellenen kayna\u011f\u0131n <code>metadata.annotations<\/code> alan\u0131na, o anki yeni yap\u0131land\u0131rman\u0131n bir kopyas\u0131n\u0131 <code>kubectl.kubernetes.io\/last-applied-configuration<\/code> olarak ekler. Bu, bir sonraki <code>kubectl apply<\/code> i\u015flemi i\u00e7in referans noktas\u0131 olacakt\u0131r.<\/li>\n<\/ol>\n<h3>\u00d6rnek Senaryo ve Sorunlar<\/h3>\n<p>Diyelim ki bir Deployment kayna\u011f\u0131n\u0131z var. \u0130lk olarak, bir geli\u015ftirici a\u015fa\u011f\u0131daki YAML dosyas\u0131n\u0131 uygular:<\/p>\n<div class=\"code-container\">\n<pre><code>\n# deploy-v1.yaml\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-app\nspec:\n  replicas: 3\n  template:\n    spec:\n      containers:\n      - name: my-container\n        image: my-image:v1\n        resources:\n          limits:\n            cpu: \"100m\"\n        <\/code><\/pre>\n<\/p><\/div>\n<p><code>kubectl apply -f deploy-v1.yaml<\/code> komutu \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Kaynak olu\u015fturulur ve <code>last-applied-configuration<\/code> annotation&#8217;\u0131 eklenir.<\/p>\n<p>\u015eimdi, bir operasyon m\u00fchendisi, bu Deployment&#8217;\u0131n CPU limitini art\u0131rmak ister ve ayn\u0131 anda Pod&#8217;lar\u0131n kaynaklar\u0131n\u0131 da g\u00fcnceller. Ancak, <code>deploy-v1.yaml<\/code> dosyas\u0131nda sadece CPU limiti vard\u0131r. Operasyon m\u00fchendisi, <code>kubectl edit deployment my-app<\/code> komutunu kullanarak do\u011frudan k\u00fcmedeki canl\u0131 kayna\u011f\u0131 d\u00fczenler ve bellek limitini de ekler:<\/p>\n<div class=\"code-container\">\n<pre><code>\n# Canl\u0131 durumdaki de\u011fi\u015fiklik (kubectl edit ile yap\u0131ld\u0131)\n# ...\n        resources:\n          limits:\n            cpu: \"200m\"\n            memory: \"256Mi\" # Yeni eklenen alan\n# ...\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Daha sonra, geli\u015ftirici, kendi <code>deploy-v1.yaml<\/code> dosyas\u0131n\u0131 (i\u00e7inde sadece CPU limiti olan\u0131) tekrar <code>kubectl apply -f deploy-v1.yaml<\/code> ile uygulamak ister. Bu durumda:<\/p>\n<ul>\n<li><strong>Yeni Yap\u0131land\u0131rma:<\/strong> <code>deploy-v1.yaml<\/code> (CPU: 100m)<\/li>\n<li><strong>Canl\u0131 Durum:<\/strong> (CPU: 200m, Memory: 256Mi)<\/li>\n<li><strong>Son Uygulanan Yap\u0131land\u0131rma:<\/strong> (CPU: 100m)<\/li>\n<\/ul>\n<p><code>kubectl apply<\/code>, \u00fc\u00e7 y\u00f6nl\u00fc birle\u015ftirmeyi yaparak, CPU limitini tekrar 100m&#8217;ye \u00e7ekecek, \u00e7\u00fcnk\u00fc bu, geli\u015ftiricinin dosyas\u0131nda belirtilen ve daha \u00f6nce kendisi taraf\u0131ndan uygulanan de\u011ferdir. Ancak, operasyon m\u00fchendisinin ekledi\u011fi <code>memory: 256Mi<\/code> alan\u0131, geli\u015ftiricinin manifest dosyas\u0131nda hi\u00e7 ge\u00e7medi\u011fi ve <code>last-applied-configuration<\/code> i\u00e7inde de olmad\u0131\u011f\u0131 i\u00e7in, <code>kubectl apply<\/code> bu alan\u0131 dokunmadan b\u0131rak\u0131r. Bu durum, istemci tarafl\u0131 uygulaman\u0131n &#8220;sahip olmad\u0131\u011f\u0131&#8221; alanlara dokunmama prensibinden kaynaklan\u0131r.<\/p>\n<p>Bu mekanizma, basit senaryolarda i\u015fe yarasa da, \u00f6zellikle birden fazla ekibin ayn\u0131 kayna\u011f\u0131n farkl\u0131 alanlar\u0131n\u0131 y\u00f6netti\u011fi veya otomasyon ara\u00e7lar\u0131n\u0131n devreye girdi\u011fi karma\u015f\u0131k ortamlarda sorunlara yol a\u00e7abilir. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n manuel olarak yapt\u0131\u011f\u0131 bir de\u011fi\u015fikli\u011fin, ba\u015fka bir <code>kubectl apply<\/code> i\u015flemi taraf\u0131ndan beklenmedik bir \u015fekilde silinmesi veya \u00e7ak\u0131\u015fmalar\u0131n fark edilmemesi gibi durumlar ortaya \u00e7\u0131kabilir. \u0130\u015fte bu t\u00fcr sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in Server-Side Apply (Sunucu Tarafl\u0131 Uygulama) geli\u015ftirilmi\u015ftir.<\/p>\n<h2>Server-Side Apply (SSA): Yeni Nesil Yakla\u015f\u0131m ve Alan Sahipli\u011fi<\/h2>\n<p>\u0130stemci tarafl\u0131 uygulaman\u0131n (Client-Side Apply) getirdi\u011fi karma\u015f\u0131kl\u0131klar ve \u00f6zellikle e\u015f zamanl\u0131 g\u00fcncellemelerde ortaya \u00e7\u0131kan sorunlar, Kubernetes toplulu\u011funu daha sa\u011flam ve \u00f6ng\u00f6r\u00fclebilir bir mekanizma aramaya itti. Bu aray\u0131\u015f\u0131n sonucunda ortaya \u00e7\u0131kan Server-Side Apply (SSA), <code>kubectl apply<\/code> komutunun \u00e7al\u0131\u015fma \u015feklini k\u00f6kten de\u011fi\u015ftiren ve Kubernetes kaynak y\u00f6netiminde yeni bir d\u00f6nemi ba\u015flatan bir yakla\u015f\u0131md\u0131r. SSA, \u00f6zellikle \u00e7ok kullan\u0131c\u0131l\u0131 ve \u00e7ok ara\u00e7l\u0131 ortamlarda kaynak y\u00f6netimini basitle\u015ftirmeyi ve \u00e7ak\u0131\u015fmalar\u0131 daha etkin bir \u015fekilde ele almay\u0131 hedefler.<\/p>\n<h3>Neden Server-Side Apply?<\/h3>\n<p>Client-Side Apply&#8217;\u0131n temel zorluklar\u0131 \u015funlard\u0131:<\/p>\n<ul>\n<li><strong><code>last-applied-configuration<\/code> Annotation&#8217;\u0131n\u0131n Y\u00fck\u00fc:<\/strong> Her kaynakta bu annotation&#8217;\u0131n tutulmas\u0131, kayna\u011f\u0131n boyutunu art\u0131r\u0131r ve API sunucusunda ek y\u00fck olu\u015fturur. Ayr\u0131ca, bu annotation&#8217;\u0131n manuel olarak silinmesi veya bozulmas\u0131 durumunda beklenmedik davran\u0131\u015flar ortaya \u00e7\u0131kabilir.<\/li>\n<li><strong>\u00c7ak\u0131\u015fma Y\u00f6netimi:<\/strong> Client-Side Apply, \u00e7ak\u0131\u015fmalar\u0131 tam olarak \u00e7\u00f6zmez, sadece birle\u015ftirme yapar. \u0130ki farkl\u0131 istemci ayn\u0131 alan \u00fczerinde farkl\u0131 de\u011ferler belirtirse, son uygulayan kazan\u0131r veya karma\u015f\u0131k durumlarda beklenmedik sonu\u00e7lar do\u011fabilir.<\/li>\n<li><strong>Alan Sahipli\u011fi Eksikli\u011fi:<\/strong> Hangi kullan\u0131c\u0131n\u0131n veya arac\u0131n kayna\u011f\u0131n hangi alan\u0131ndan sorumlu oldu\u011funu takip etmek zordur. Bu durum, bir ekip taraf\u0131ndan yap\u0131lan de\u011fi\u015fikli\u011fin di\u011fer bir ekip taraf\u0131ndan fark\u0131nda olmadan \u00fczerine yaz\u0131lmas\u0131na neden olabilir.<\/li>\n<\/ul>\n<p>Server-Side Apply, bu sorunlara \u00e7\u00f6z\u00fcm getirmek i\u00e7in geli\u015ftirilmi\u015ftir. Temel fikri, birle\u015ftirme mant\u0131\u011f\u0131n\u0131 istemciden (<code>kubectl<\/code>) al\u0131p do\u011frudan Kubernetes API sunucusuna ta\u015f\u0131makt\u0131r. Bu sayede, API sunucusu, kaynaklar\u0131n g\u00fcncellenmesi s\u0131ras\u0131nda daha ak\u0131ll\u0131 kararlar alabilir ve alan sahipli\u011fini (field ownership) takip edebilir.<\/p>\n<h3>Server-Side Apply Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>SSA&#8217;n\u0131n anahtar kavram\u0131 &#8220;alan sahipli\u011fi&#8221;dir. Her kaynak alan\u0131 (\u00f6rne\u011fin, <code>spec.replicas<\/code>, <code>spec.template.spec.containers[0].image<\/code>), onu en son g\u00fcncelleyen &#8220;y\u00f6netici&#8221; (field manager) taraf\u0131ndan sahip olunur. Bir y\u00f6netici, bir alan\u0131n de\u011ferini de\u011fi\u015ftirdi\u011finde, o alan\u0131n sahibi olur. E\u011fer ba\u015fka bir y\u00f6netici ayn\u0131 alan\u0131n de\u011ferini de\u011fi\u015ftirmeye \u00e7al\u0131\u015f\u0131rsa, bir \u00e7ak\u0131\u015fma (conflict) olu\u015fur ve API sunucusu bu durumu bildirir.<\/p>\n<p>SSA&#8217;n\u0131n \u00e7al\u0131\u015fma ad\u0131mlar\u0131 \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>Manifest Dosyas\u0131n\u0131 G\u00f6nder:<\/strong> <code>kubectl apply --server-side -f my-resource.yaml<\/code> komutuyla, istemci manifest dosyas\u0131n\u0131 do\u011frudan Kubernetes API sunucusuna g\u00f6nderir. \u0130stemci, bu noktada canl\u0131 durumu veya son uygulanan yap\u0131land\u0131rmay\u0131 \u00e7ekmez.<\/li>\n<li><strong>API Sunucusu \u0130\u015fler:<\/strong> API sunucusu, gelen manifesti al\u0131r ve a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 uygular:\n<ul>\n<li><strong>Alan Sahipli\u011fini Belirle:<\/strong> API sunucusu, manifestte belirtilen her alan i\u00e7in, bu alan\u0131n mevcut sahibini (e\u011fer varsa) ve yeni sahibini (<code>--field-manager<\/code> parametresiyle belirtilen veya varsay\u0131lan olarak <code>kubectl<\/code> olan) kontrol eder.<\/li>\n<li><strong>Birle\u015ftirme ve \u00c7ak\u0131\u015fma Tespiti:<\/strong> API sunucusu, yeni yap\u0131land\u0131rmay\u0131 canl\u0131 durumla birle\u015ftirmeye \u00e7al\u0131\u015f\u0131r. E\u011fer bir alan\u0131n yeni de\u011feri, canl\u0131 durumdaki de\u011ferden farkl\u0131ysa ve bu alan\u0131n sahibi ba\u015fka bir y\u00f6netici ise, bir \u00e7ak\u0131\u015fma olu\u015fur.<\/li>\n<li><strong>\u00c7ak\u0131\u015fma Y\u00f6netimi:<\/strong>\n<ul>\n<li>E\u011fer \u00e7ak\u0131\u015fan alan\u0131n sahibi siz de\u011filseniz ve <code>--force-conflicts<\/code> (k\u0131saca <code>-f<\/code>) bayra\u011f\u0131n\u0131 kullanmad\u0131ysan\u0131z, API sunucusu bir hata d\u00f6nd\u00fcr\u00fcr ve i\u015flemi reddeder. Bu, yanl\u0131\u015fl\u0131kla ba\u015fkas\u0131n\u0131n yapt\u0131\u011f\u0131 de\u011fi\u015fikliklerin \u00fczerine yaz\u0131lmas\u0131n\u0131 engeller.<\/li>\n<li>E\u011fer <code>--force-conflicts<\/code> bayra\u011f\u0131n\u0131 kullan\u0131rsan\u0131z, API sunucusu \u00e7ak\u0131\u015fan alan\u0131n sahipli\u011fini sizden yana de\u011fi\u015ftirir ve de\u011feri g\u00fcnceller. Bu, &#8220;ben bu alan\u0131 y\u00f6netmek istiyorum, di\u011ferlerinin de\u011fi\u015fikliklerini ge\u00e7ersiz say\u0131yorum&#8221; demektir.<\/li>\n<li>E\u011fer \u00e7ak\u0131\u015fan alan\u0131n sahibi sizseniz veya alan\u0131n hi\u00e7 sahibi yoksa, g\u00fcncelleme sorunsuz bir \u015fekilde ger\u00e7ekle\u015fir ve o alan\u0131n sahibi siz olursunuz.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Kaynak Durumunu G\u00fcncelle:<\/strong> Ba\u015far\u0131l\u0131 bir birle\u015ftirmenin ard\u0131ndan, API sunucusu kayna\u011f\u0131 g\u00fcnceller ve her alan i\u00e7in hangi y\u00f6neticinin (field manager) ona sahip oldu\u011funu kaydeden \u00f6zel bir yap\u0131land\u0131rma (<code>managedFields<\/code>) ekler. Bu, <code>last-applied-configuration<\/code> annotation&#8217;\u0131n\u0131n yerini al\u0131r.<\/li>\n<\/ol>\n<h3>ManagedFields \u00d6rne\u011fi<\/h3>\n<p>Bir kayna\u011f\u0131n <code>managedFields<\/code> b\u00f6l\u00fcm\u00fc, kimin hangi alanlar\u0131 y\u00f6netti\u011fini g\u00f6sterir. \u00d6rne\u011fin, bir Deployment&#8217;\u0131n <code>managedFields<\/code> \u00e7\u0131kt\u0131s\u0131 \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<div class=\"code-container\">\n<pre><code>\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-app\n  managedFields:\n  - apiVersion: apps\/v1\n    fieldsType: FieldsV1\n    fieldsV1:\n      f:metadata:\n        f:labels:\n          f:app: {}\n      f:spec:\n        f:replicas: {}\n        f:selector: {}\n        f:template:\n          f:metadata:\n            f:labels:\n              f:app: {}\n          f:spec:\n            f:containers:\n              k:{\"name\":\"my-container\"}:\n                f:image: {}\n                f:name: {}\n                f:resources:\n                  f:limits:\n                    f:cpu: {}\n    manager: kubectl\n    operation: Apply\n    time: \"2023-10-26T10:00:00Z\"\n  - apiVersion: apps\/v1\n    fieldsType: FieldsV1\n    fieldsV1:\n      f:spec:\n        f:template:\n          f:spec:\n            f:containers:\n              k:{\"name\":\"my-container\"}:\n                f:resources:\n                  f:limits:\n                    f:memory: {}\n    manager: my-ops-tool\n    operation: Apply\n    time: \"2023-10-26T10:05:00Z\"\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>kubectl<\/code> y\u00f6neticisi <code>spec.replicas<\/code> ve <code>spec.template.spec.containers[0].image<\/code> gibi alanlara sahipken, <code>my-ops-tool<\/code> adl\u0131 ba\u015fka bir y\u00f6netici <code>spec.template.spec.containers[0].resources.limits.memory<\/code> alan\u0131na sahiptir. Bu, farkl\u0131 ara\u00e7lar\u0131n veya ekiplerin ayn\u0131 kayna\u011f\u0131n farkl\u0131 y\u00f6nlerini g\u00fcvenli bir \u015fekilde y\u00f6netebilmesini sa\u011flar.<\/p>\n<p>Server-Side Apply, \u00f6zellikle GitOps yakla\u015f\u0131mlar\u0131nda ve birden fazla otomasyon arac\u0131n\u0131n (Helm, Argo CD, Flux CD vb.) ayn\u0131 k\u00fcmeyi y\u00f6netti\u011fi senaryolarda \u00e7ok daha sa\u011flam ve tercih edilen bir y\u00f6ntem haline gelmi\u015ftir. \u00c7ak\u0131\u015fmalar\u0131n API sunucusu taraf\u0131nda y\u00f6netilmesi, tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r ve beklenmedik davran\u0131\u015flar\u0131 en aza indirir.<\/p>\n<h2>Vaka Analizi: \u00c7oklu Ekip Ortam\u0131nda Kaynak Y\u00f6netimi Sorunlar\u0131 ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p>Kubernetes&#8217;in benimsenmesiyle birlikte, b\u00fcy\u00fck kurulu\u015flar genellikle birden fazla geli\u015ftirme ekibinin, operasyon ekibinin ve g\u00fcvenlik ekibinin ayn\u0131 Kubernetes k\u00fcmesi \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 senaryolarla kar\u015f\u0131la\u015f\u0131r. Bu durum, kaynak y\u00f6netimini karma\u015f\u0131kla\u015ft\u0131r\u0131r ve \u00f6zellikle istemci tarafl\u0131 uygulama (Client-Side Apply) kullan\u0131ld\u0131\u011f\u0131nda \u00e7e\u015fitli sorunlara yol a\u00e7abilir. Bu vaka analizinde, bu sorunlar\u0131 ve Server-Side Apply (SSA) ile nas\u0131l \u00e7\u00f6z\u00fclebileceklerini inceleyece\u011fiz.<\/p>\n<h3>Senaryo: &#8220;Uygulama A&#8221; Deployment&#8217;\u0131n\u0131n Karma\u015f\u0131k Y\u00f6netimi<\/h3>\n<p>Bir e-ticaret \u015firketi olan &#8220;H\u0131zl\u0131Teslimat A.\u015e.&#8221;de, &#8220;Uygulama A&#8221; ad\u0131nda kritik bir mikroservis bulunmaktad\u0131r. Bu uygulaman\u0131n Kubernetes Deployment&#8217;\u0131 \u00fc\u00e7 farkl\u0131 ekip taraf\u0131ndan y\u00f6netilmektedir:<\/p>\n<ul>\n<li><strong>Geli\u015ftirme Ekibi (DevTeam):<\/strong> Uygulaman\u0131n Docker imaj s\u00fcr\u00fcm\u00fcn\u00fc ve Pod&#8217;lar\u0131n genel yap\u0131land\u0131rmas\u0131n\u0131 (\u00e7evre de\u011fi\u015fkenleri gibi) y\u00f6netir.<\/li>\n<li><strong>Operasyon Ekibi (OpsTeam):<\/strong> Pod&#8217;lar\u0131n replika say\u0131s\u0131n\u0131 (\u00f6l\u00e7eklendirme), kaynak limitlerini (CPU\/Bellek) ve Pod da\u011f\u0131t\u0131m stratejilerini (nodeSelector gibi) y\u00f6netir.<\/li>\n<li><strong>G\u00fcvenlik Ekibi (SecTeam):<\/strong> Uygulaman\u0131n g\u00fcvenlik ba\u011flam\u0131n\u0131 (SecurityContext) ve a\u011f politikalar\u0131n\u0131 (NetworkPolicy) y\u00f6netir.<\/li>\n<\/ul>\n<h3>Client-Side Apply ile Ortaya \u00c7\u0131kan Sorunlar<\/h3>\n<p>Her ekip, kendi YAML dosyalar\u0131n\u0131 <code>kubectl apply<\/code> ile uygulad\u0131\u011f\u0131nda a\u015fa\u011f\u0131daki sorunlar ortaya \u00e7\u0131km\u0131\u015ft\u0131r:<\/p>\n<ol>\n<li><strong>Beklenmedik \u00dczerine Yazmalar:<\/strong>\n<p>DevTeam, <code>nginx:1.20<\/code> imaj\u0131n\u0131 <code>nginx:1.21<\/code> olarak g\u00fcncellemek i\u00e7in kendi <code>deployment.yaml<\/code> dosyas\u0131n\u0131 uygular. Bir s\u00fcre sonra, OpsTeam, uygulaman\u0131n yo\u011funlu\u011funu azaltmak i\u00e7in replika say\u0131s\u0131n\u0131 3&#8217;ten 5&#8217;e \u00e7\u0131karmak amac\u0131yla kendi <code>deployment.yaml<\/code> dosyas\u0131n\u0131 uygular. Ancak, OpsTeam&#8217;in dosyas\u0131 eski bir imaj s\u00fcr\u00fcm\u00fcn\u00fc (<code>nginx:1.20<\/code>) i\u00e7erebilir, \u00e7\u00fcnk\u00fc DevTeam&#8217;in yapt\u0131\u011f\u0131 de\u011fi\u015fiklikten habersizdir. Sonu\u00e7 olarak, OpsTeam&#8217;in <code>kubectl apply<\/code> i\u015flemi, replika say\u0131s\u0131n\u0131 g\u00fcncellerken, imaj s\u00fcr\u00fcm\u00fcn\u00fc tekrar eski haline (<code>nginx:1.20<\/code>) d\u00f6nd\u00fcrebilir. Bu durum, DevTeam&#8217;in yapt\u0131\u011f\u0131 de\u011fi\u015fikli\u011fin \u00fczerine yaz\u0131lmas\u0131na ve uygulaman\u0131n beklenmedik bir \u015fekilde eski bir s\u00fcr\u00fcme d\u00f6nmesine neden olur.<\/p>\n<\/li>\n<li><strong><code>last-applied-configuration<\/code> \u00c7ak\u0131\u015fmalar\u0131 ve Bozulmalar:<\/strong>\n<p>DevTeam, kendi <code>deployment.yaml<\/code> dosyas\u0131n\u0131 uygulad\u0131\u011f\u0131nda, kayna\u011f\u0131n <code>last-applied-configuration<\/code> annotation&#8217;\u0131 DevTeam&#8217;in dosyas\u0131n\u0131n i\u00e7eri\u011fiyle g\u00fcncellenir. OpsTeam ayn\u0131 kayna\u011fa kendi <code>deployment.yaml<\/code> dosyas\u0131n\u0131 uygulad\u0131\u011f\u0131nda, bu annotation OpsTeam&#8217;in dosyas\u0131n\u0131n i\u00e7eri\u011fiyle g\u00fcncellenir. Bu, her <code>kubectl apply<\/code> i\u015flemiyle annotation&#8217;\u0131n s\u00fcrekli de\u011fi\u015fmesi anlam\u0131na gelir. E\u011fer bir ekip, <code>kubectl edit<\/code> ile manuel bir de\u011fi\u015fiklik yaparsa, <code>last-applied-configuration<\/code> annotation&#8217;\u0131 g\u00fcncellenmez ve sonraki <code>kubectl apply<\/code> i\u015flemi s\u0131ras\u0131nda bu manuel de\u011fi\u015fiklikler beklenmedik bir \u015fekilde silinebilir.<\/p>\n<\/li>\n<li><strong>Manuel M\u00fcdahalelerin Kaybolmas\u0131:<\/strong>\n<p>SecTeam, acil bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131 kapatmak i\u00e7in bir Deployment&#8217;a <code>securityContext<\/code> eklemek \u00fczere <code>kubectl edit deployment my-app<\/code> komutunu kullan\u0131r. Bu de\u011fi\u015fiklik do\u011frudan k\u00fcmede yap\u0131l\u0131r. Birka\u00e7 g\u00fcn sonra, DevTeam veya OpsTeam, kendi versiyonlar\u0131ndaki <code>deployment.yaml<\/code> dosyas\u0131n\u0131 <code>kubectl apply<\/code> ile uygulad\u0131\u011f\u0131nda, bu dosyalar <code>securityContext<\/code> alan\u0131n\u0131 i\u00e7ermedi\u011fi i\u00e7in, \u00fc\u00e7 y\u00f6nl\u00fc birle\u015ftirme s\u0131ras\u0131nda bu alan <code>last-applied-configuration<\/code>&#8216;da da yer almad\u0131\u011f\u0131ndan, canl\u0131 durumdan silinebilir. Bu durum, g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n tekrar ortaya \u00e7\u0131kmas\u0131na neden olur.<\/p>\n<\/li>\n<\/ol>\n<h3>Server-Side Apply (SSA) ile \u00c7\u00f6z\u00fcmler<\/h3>\n<p>H\u0131zl\u0131Teslimat A.\u015e., bu sorunlar\u0131 a\u015fmak i\u00e7in Server-Side Apply&#8217;a ge\u00e7meye karar verir. Her ekip, kendi <code>kubectl apply --server-side --field-manager=<EkipAd\u0131> -f <dosya.yaml><\/code> komutunu kullan\u0131r.<\/p>\n<ol>\n<li><strong>Alan Sahipli\u011fi ile \u00c7ak\u0131\u015fma \u00d6nleme:<\/strong>\n<ul>\n<li>DevTeam, imaj s\u00fcr\u00fcm\u00fcn\u00fc g\u00fcncellerken <code>--field-manager=DevTeam<\/code> kullan\u0131r. B\u00f6ylece <code>spec.template.spec.containers[0].image<\/code> alan\u0131n\u0131n sahibi DevTeam olur.<\/li>\n<li>OpsTeam, replika say\u0131s\u0131n\u0131 g\u00fcncellerken <code>--field-manager=OpsTeam<\/code> kullan\u0131r. B\u00f6ylece <code>spec.replicas<\/code> alan\u0131n\u0131n sahibi OpsTeam olur.<\/li>\n<li>SecTeam, <code>securityContext<\/code> eklerken <code>--field-manager=SecTeam<\/code> kullan\u0131r. B\u00f6ylece <code>spec.template.spec.securityContext<\/code> alan\u0131n\u0131n sahibi SecTeam olur.<\/li>\n<\/ul>\n<p>\u015eimdi, e\u011fer OpsTeam yanl\u0131\u015fl\u0131kla kendi <code>deployment.yaml<\/code> dosyas\u0131nda eski bir imaj s\u00fcr\u00fcm\u00fc belirtirse ve <code>--field-manager=OpsTeam<\/code> ile uygulamaya \u00e7al\u0131\u015f\u0131rsa, API sunucusu bir \u00e7ak\u0131\u015fma tespit eder. \u00c7\u00fcnk\u00fc <code>spec.template.spec.containers[0].image<\/code> alan\u0131n\u0131n sahibi DevTeam&#8217;dir. API sunucusu, OpsTeam&#8217;e bir hata mesaj\u0131 d\u00f6nd\u00fcr\u00fcr ve i\u015flemi reddeder. OpsTeam, bu hatay\u0131 g\u00f6rerek DevTeam ile ileti\u015fime ge\u00e7ebilir veya <code>--force-conflicts<\/code> bayra\u011f\u0131n\u0131 kullanarak DevTeam&#8217;in sahipli\u011fini zorla alabilir (bu genellikle dikkatli kullan\u0131lmas\u0131 gereken bir se\u00e7enektir).<\/p>\n<\/li>\n<li><strong>Temiz ve G\u00fcvenilir Y\u00f6netim:<\/strong>\n<p><code>last-applied-configuration<\/code> annotation&#8217;\u0131n\u0131n art\u0131k kullan\u0131lmas\u0131na gerek kalmaz. Her alan\u0131n sahibi <code>managedFields<\/code> b\u00f6l\u00fcm\u00fcnde a\u00e7\u0131k\u00e7a belirtildi\u011fi i\u00e7in, hangi ekibin hangi alandan sorumlu oldu\u011fu kolayca anla\u015f\u0131l\u0131r. Bu, hata ay\u0131klamay\u0131 ve sorumluluk takibini basitle\u015ftirir.<\/p>\n<\/li>\n<li><strong>Manuel De\u011fi\u015fikliklerin Korunmas\u0131 (\u0130stenirse):<\/strong>\n<p>E\u011fer SecTeam, acil bir durumda <code>kubectl edit<\/code> ile bir de\u011fi\u015fiklik yaparsa, bu de\u011fi\u015fiklik varsay\u0131lan olarak <code>kubectl-edit<\/code> ad\u0131nda bir y\u00f6netici taraf\u0131ndan yap\u0131lm\u0131\u015f gibi kaydedilir. Di\u011fer ekipler <code>kubectl apply --server-side<\/code> kulland\u0131\u011f\u0131nda, SecTeam&#8217;in yapt\u0131\u011f\u0131 de\u011fi\u015fiklikler, e\u011fer di\u011fer ekiplerin manifest dosyalar\u0131nda bu alanlar belirtilmemi\u015fse, \u00fczerine yaz\u0131lmaz. E\u011fer di\u011fer ekipler bu alanlar\u0131 kendi manifestolar\u0131na ekler ve <code>--force-conflicts<\/code> kullanmazsa, API sunucusu \u00e7ak\u0131\u015fma hatas\u0131 verir ve SecTeam&#8217;in yapt\u0131\u011f\u0131 de\u011fi\u015fikli\u011fi korur. Bu, manuel m\u00fcdahalelerin yanl\u0131\u015fl\u0131kla kaybolmas\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde engeller.<\/p>\n<\/li>\n<\/ol>\n<p>Sonu\u00e7 olarak, Server-Side Apply, H\u0131zl\u0131Teslimat A.\u015e.&#8217;nin \u00e7oklu ekip ortam\u0131nda Kubernetes kaynaklar\u0131n\u0131 daha g\u00fcvenli, tutarl\u0131 ve \u00f6ng\u00f6r\u00fclebilir bir \u015fekilde y\u00f6netmesini sa\u011flam\u0131\u015ft\u0131r. Ekipler aras\u0131ndaki \u00e7ak\u0131\u015fmalar azalm\u0131\u015f, hata ay\u0131klama kolayla\u015fm\u0131\u015f ve operasyonel verimlilik artm\u0131\u015ft\u0131r.<\/p>\n<h2>Yayg\u0131n Hatalar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p><code>kubectl apply<\/code> komutu g\u00fc\u00e7l\u00fc olsa da, yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda veya beklenmedik durumlarla kar\u015f\u0131la\u015f\u0131ld\u0131\u011f\u0131nda \u00e7e\u015fitli hatalara yol a\u00e7abilir. Bu b\u00f6l\u00fcmde, s\u0131k kar\u015f\u0131la\u015f\u0131lan baz\u0131 hatalar\u0131 ve bunlar\u0131n olas\u0131 \u00e7\u00f6z\u00fcmlerini inceleyece\u011fiz.<\/p>\n<ol>\n<li>\n<h3>Hata: &#8220;The request is invalid: patch: Invalid value: &#8220;null&#8221;: field is immutable&#8221;<\/h3>\n<p><strong>A\u00e7\u0131klama:<\/strong> Baz\u0131 Kubernetes kaynak alanlar\u0131, bir kere ayarland\u0131ktan sonra de\u011fi\u015ftirilemez (immutable) \u00f6zelliktedir. \u00d6rne\u011fin, bir Pod&#8217;un konteyner ad\u0131 veya bir Service&#8217;in tipi (ClusterIP, NodePort, LoadBalancer) bazen de\u011fi\u015ftirilemez olabilir. Bu hatay\u0131 genellikle, mevcut bir kayna\u011f\u0131n immutable bir alan\u0131n\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda al\u0131rs\u0131n\u0131z.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Immutable alanlar\u0131 de\u011fi\u015ftirmek i\u00e7in genellikle kayna\u011f\u0131 silip yeniden olu\u015fturman\u0131z gerekir. Ancak bu, uygulaman\u0131zda kesintiye yol a\u00e7abilir. Kesintisiz bir g\u00fcncelleme i\u00e7in, yeni yap\u0131land\u0131rmay\u0131 farkl\u0131 bir isimle olu\u015fturup, trafi\u011fi yava\u015f yava\u015f yeni kayna\u011fa y\u00f6nlendirebilirsiniz (mavi\/ye\u015fil da\u011f\u0131t\u0131m veya canary da\u011f\u0131t\u0131m stratejileri). E\u011fer Pod&#8217;un konteyner ad\u0131n\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015f\u0131yorsan\u0131z, Deployment&#8217;\u0131 silip yeniden olu\u015fturman\u0131z gerekecektir. Bir Service&#8217;in tipini de\u011fi\u015ftirmek istiyorsan\u0131z, Service&#8217;i silip yeni tip ile tekrar olu\u015fturman\u0131z gerekebilir.<\/p>\n<\/li>\n<li>\n<h3>Hata: &#8220;Error from server (Conflict): conflicts with other field managers&#8221; (Server-Side Apply kullan\u0131rken)<\/h3>\n<p><strong>A\u00e7\u0131klama:<\/strong> Server-Side Apply (SSA) kullan\u0131rken, bir alan\u0131n sahipli\u011fi ba\u015fka bir y\u00f6neticiye (field manager) aitken o alan\u0131 de\u011fi\u015ftirmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda bu hatay\u0131 al\u0131rs\u0131n\u0131z. SSA, \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek ve alan sahipli\u011fini korumak i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><\/p>\n<ul>\n<li><strong><code>--force-conflicts<\/code> Kullan\u0131m\u0131:<\/strong> E\u011fer bu alan\u0131 ger\u00e7ekten siz y\u00f6netmek istiyorsan\u0131z ve di\u011fer y\u00f6neticinin de\u011fi\u015fikliklerini ge\u00e7ersiz k\u0131lmaya haz\u0131rsan\u0131z, <code>kubectl apply --server-side --force-conflicts -f my-resource.yaml<\/code> komutunu kullanabilirsiniz. Ancak bu, dikkatli kullan\u0131lmas\u0131 gereken bir se\u00e7enektir, \u00e7\u00fcnk\u00fc ba\u015fkas\u0131n\u0131n de\u011fi\u015fikliklerini zorla \u00fczerine yazars\u0131n\u0131z.<\/li>\n<li><strong>\u0130leti\u015fim Kurma:<\/strong> En iyi \u00e7\u00f6z\u00fcm, \u00e7ak\u0131\u015fan alan\u0131 y\u00f6neten ekiple ileti\u015fime ge\u00e7mektir. Belki de onlar\u0131n yap\u0131land\u0131rmalar\u0131n\u0131 kendi manifest dosyan\u0131za dahil etmeniz veya sorumluluklar\u0131 netle\u015ftirmeniz gerekiyordur.<\/li>\n<li><strong><code>--field-manager<\/code> Belirtme:<\/strong> Her ekibin veya arac\u0131n kendi <code>--field-manager<\/code> ad\u0131n\u0131 belirtmesi, \u00e7ak\u0131\u015fmalar\u0131 daha \u015feffaf hale getirir ve kimin hangi alandan sorumlu oldu\u011funu kolayca g\u00f6rmeyi sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li>\n<h3>Hata: &#8220;Error from server (NotFound): deployments.apps &#8220;my-app&#8221; not found&#8221;<\/h3>\n<p><strong>A\u00e7\u0131klama:<\/strong> Belirtilen isimde ve t\u00fcrde bir kayna\u011f\u0131n Kubernetes k\u00fcmesinde bulunamad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Bu genellikle yanl\u0131\u015f kaynak ad\u0131, yanl\u0131\u015f ad alan\u0131 (namespace) veya kayna\u011f\u0131n hen\u00fcz olu\u015fturulmam\u0131\u015f olmas\u0131 nedeniyle olu\u015fur.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><\/p>\n<ul>\n<li><strong>Kaynak Ad\u0131n\u0131 Kontrol Edin:<\/strong> Manifest dosyan\u0131zdaki <code>metadata.name<\/code> ile <code>kubectl<\/code> komutunda kulland\u0131\u011f\u0131n\u0131z ad\u0131n e\u015fle\u015fti\u011finden emin olun.<\/li>\n<li><strong>Ad Alan\u0131n\u0131 Kontrol Edin:<\/strong> Kayna\u011f\u0131n do\u011fru ad alan\u0131nda (namespace) oldu\u011funu do\u011frulay\u0131n. E\u011fer kaynak farkl\u0131 bir ad alan\u0131ndaysa, <code>-n &lt;namespace_ad\u0131&gt;<\/code> bayra\u011f\u0131n\u0131 kullanman\u0131z gerekir. \u00d6rne\u011fin: <code>kubectl apply -f my-resource.yaml -n production<\/code>.<\/li>\n<li><strong>Kaynak T\u00fcr\u00fcn\u00fc Kontrol Edin:<\/strong> <code>kind<\/code> alan\u0131n\u0131n do\u011fru yaz\u0131ld\u0131\u011f\u0131ndan emin olun (\u00f6rne\u011fin, <code>Deployment<\/code> yerine <code>Deployments<\/code> yazmak gibi yaz\u0131m hatalar\u0131).<\/li>\n<\/ul>\n<\/li>\n<li>\n<h3>Hata: &#8220;Error from server (Forbidden): deployments.apps &#8220;my-app&#8221; is forbidden: User &#8220;&#8230;&#8221; cannot patch resource &#8220;deployments&#8221; in API group &#8220;apps&#8221; in the namespace &#8220;&#8230;&#8221;<\/h3>\n<p><strong>A\u00e7\u0131klama:<\/strong> Bu hata, Kubernetes Role-Based Access Control (RBAC) kurallar\u0131 nedeniyle kullan\u0131c\u0131n\u0131n veya hizmet hesab\u0131n\u0131n (service account) belirtilen i\u015flemi (bu durumda &#8220;patch&#8221; yani g\u00fcncelleme) yapmaya yetkisinin olmad\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong><\/p>\n<ul>\n<li><strong>RBAC \u0130zinlerini Kontrol Edin:<\/strong> Kullan\u0131c\u0131n\u0131n veya hizmet hesab\u0131n\u0131n ilgili ad alan\u0131nda ve kaynak t\u00fcr\u00fcnde &#8220;patch&#8221; (veya &#8220;update&#8221;) iznine sahip oldu\u011fundan emin olun. Gerekirse, bir ClusterRole veya Role tan\u0131mlayarak ve bunu bir ClusterRoleBinding veya RoleBinding ile kullan\u0131c\u0131ya\/hizmet hesab\u0131na ba\u011flayarak izinleri geni\u015fletmeniz gerekebilir.<\/li>\n<li><strong>Do\u011fru Kimlik Bilgilerini Kullan\u0131n:<\/strong> Do\u011fru Kubernetes ba\u011flam\u0131n\u0131 (context) ve kimlik bilgilerini kulland\u0131\u011f\u0131n\u0131zdan emin olun. <code>kubectl config current-context<\/code> komutuyla mevcut ba\u011flam\u0131 kontrol edebilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li>\n<h3>Hata: &#8220;The Deployment &#8220;my-app&#8221; is invalid: spec.selector: Required value: <code>selector<\/code> is immutable after creation&#8221;<\/h3>\n<p><strong>A\u00e7\u0131klama:<\/strong> Bir Deployment&#8217;\u0131n <code>spec.selector<\/code> alan\u0131, Deployment olu\u015fturulduktan sonra de\u011fi\u015ftirilemez. Bu alan, Deployment&#8217;\u0131n hangi Pod&#8217;lar\u0131 y\u00f6netece\u011fini belirler ve de\u011fi\u015ftirilmesi tutars\u0131zl\u0131klara yol a\u00e7abilir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> E\u011fer <code>spec.selector<\/code>&#8216;\u0131 de\u011fi\u015ftirmeniz gerekiyorsa, mevcut Deployment&#8217;\u0131 silmeniz ve yeni <code>selector<\/code> de\u011feriyle yeniden olu\u015fturman\u0131z gerekir. Bu da yukar\u0131da bahsedildi\u011fi gibi kesintiye neden olabilir ve dikkatli bir planlama gerektirir.<\/p>\n<\/li>\n<\/ol>\n<p>Bu hatalar\u0131 anlamak ve do\u011fru \u00e7\u00f6z\u00fcmleri uygulamak, Kubernetes ortam\u0131n\u0131zda sorunsuz bir kaynak y\u00f6netimi deneyimi i\u00e7in kritik \u00f6neme sahiptir. Genellikle, hata mesajlar\u0131 sorunun k\u00f6keni hakk\u0131nda de\u011ferli ipu\u00e7lar\u0131 sa\u011flar ve bunlar\u0131 dikkatlice okumak, \u00e7\u00f6z\u00fcm yolunu bulmada size yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p><code>kubectl apply<\/code> komutunu daha verimli ve g\u00fcvenli kullanmak i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar mevcuttur. Bu y\u00f6ntemler, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k Kubernetes ortamlar\u0131nda kaynak y\u00f6netimini kolayla\u015ft\u0131r\u0131r ve hata potansiyelini azalt\u0131r.<\/p>\n<h3>1. Idempotency (Tekrar Edilebilirlik) Prensibi<\/h3>\n<p><code>kubectl apply<\/code>&#8216;\u0131n en temel ve \u00f6nemli \u00f6zelliklerinden biri idempotency&#8217;dir. Bir i\u015flemi birden fazla kez tekrarlad\u0131\u011f\u0131n\u0131zda, sistemin durumu her zaman ayn\u0131 sonuca ula\u015fmal\u0131d\u0131r. Yani, ayn\u0131 YAML dosyas\u0131n\u0131 <code>kubectl apply<\/code> ile defalarca uygulasan\u0131z bile, kaynaklar zaten istenen durumdaysa herhangi bir de\u011fi\u015fiklik yap\u0131lmamal\u0131d\u0131r. Bu, CI\/CD boru hatlar\u0131nda ve otomasyon senaryolar\u0131nda kritik \u00f6neme sahiptir. Kaynaklar\u0131n\u0131z\u0131 tasarlarken bu prensibi g\u00f6z \u00f6n\u00fcnde bulundurun; yani her <code>kubectl apply<\/code> i\u015flemi, kayna\u011f\u0131 her zaman belirtti\u011finiz duruma getirebilmelidir.<\/p>\n<h3>2. Kustomize veya Helm ile Kullan\u0131m<\/h3>\n<p>Tek bir <code>kubectl apply<\/code> komutu basit senaryolar i\u00e7in yeterli olsa da, ger\u00e7ek d\u00fcnya uygulamalar\u0131 genellikle birden fazla YAML dosyas\u0131n\u0131 ve \u00e7evreye \u00f6zg\u00fc (dev, test, prod) yap\u0131land\u0131rmalar\u0131 i\u00e7erir. Bu noktada Kustomize veya Helm gibi ara\u00e7lar devreye girer:<\/p>\n<ul>\n<li><strong>Kustomize:<\/strong> Kubernetes&#8217;e \u00f6zg\u00fc, \u015fablonlama (templating) yerine &#8220;yama&#8221; (patch) tabanl\u0131 bir yap\u0131land\u0131rma y\u00f6netimi arac\u0131d\u0131r. Temel YAML dosyalar\u0131n\u0131z\u0131 tan\u0131mlar ve farkl\u0131 ortamlar i\u00e7in \u00fczerine yamalar uygulayarak de\u011fi\u015fiklikler yapman\u0131z\u0131 sa\u011flar. Kustomize, sonunda yine standart Kubernetes YAML \u00e7\u0131kt\u0131lar\u0131 \u00fcretir ve bunlar\u0131 <code>kubectl apply -k &lt;kustomize_dizini&gt;<\/code> komutuyla uygulayabilirsiniz. Bu, <code>kubectl apply<\/code>&#8216;\u0131n g\u00fcc\u00fcn\u00fc korurken, yap\u0131land\u0131rma \u00e7e\u015fitlili\u011fini y\u00f6netmenizi sa\u011flar.<\/li>\n<li><strong>Helm:<\/strong> Kubernetes i\u00e7in bir paket y\u00f6neticisidir. Uygulamalar\u0131 &#8220;chart&#8221; ad\u0131 verilen \u00f6nceden paketlenmi\u015f ve yap\u0131land\u0131r\u0131labilir \u015fablonlar arac\u0131l\u0131\u011f\u0131yla da\u011f\u0131tman\u0131z\u0131 sa\u011flar. Helm, de\u011ferleri (values) kullanarak chart&#8217;lar\u0131 \u00f6zelle\u015ftirmenize olanak tan\u0131r ve temelde Kubernetes manifest dosyalar\u0131 \u00fcretip bunlar\u0131 API sunucusuna g\u00f6nderir. Helm&#8217;in kendi <code>helm upgrade<\/code> komutu, arka planda <code>kubectl apply<\/code> benzeri mekanizmalar kullan\u0131r ve Server-Side Apply ile de entegre \u00e7al\u0131\u015fabilir.<\/li>\n<\/ul>\n<h3>3. GitOps Prensip ve Uygulamalar\u0131<\/h3>\n<p>GitOps, Kubernetes kaynak y\u00f6netiminde modern bir yakla\u015f\u0131md\u0131r. Temel olarak, t\u00fcm uygulama ve altyap\u0131 yap\u0131land\u0131rmalar\u0131n\u0131z\u0131 bir Git deposunda (repository) tutmay\u0131 ve bu depoyu sisteminizin &#8220;tek do\u011fruluk kayna\u011f\u0131&#8221; (single source of truth) olarak kullanmay\u0131 savunur. De\u011fi\u015fiklikler Git&#8217;e commit edildi\u011finde, otomasyon ara\u00e7lar\u0131 (Flux CD, Argo CD gibi) bu de\u011fi\u015fiklikleri alg\u0131lar ve otomatik olarak Kubernetes k\u00fcmenize uygular. Bu yakla\u015f\u0131m, <code>kubectl apply<\/code>&#8216;\u0131n deklaratif do\u011fas\u0131n\u0131 en \u00fcst d\u00fczeyde kullan\u0131r ve a\u015fa\u011f\u0131daki faydalar\u0131 sa\u011flar:<\/p>\n<ul>\n<li><strong>Versiyon Kontrol\u00fc:<\/strong> T\u00fcm de\u011fi\u015fikliklerin ge\u00e7mi\u015fi Git&#8217;te tutulur.<\/li>\n<li><strong>Denetlenebilirlik:<\/strong> Kimin ne zaman hangi de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131 kolayca takip edebilirsiniz.<\/li>\n<li><strong>Geri Alma Kolayl\u0131\u011f\u0131:<\/strong> Hatal\u0131 bir da\u011f\u0131t\u0131m durumunda, Git&#8217;teki \u00f6nceki bir commit&#8217;e geri d\u00f6nmek, k\u00fcmenin durumunu da o commit&#8217;teki yap\u0131land\u0131rmaya d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><strong>Otomasyon:<\/strong> Manuel m\u00fcdahaleler azal\u0131r, CI\/CD boru hatlar\u0131 ile entegrasyon kolayla\u015f\u0131r.<\/li>\n<\/ul>\n<p>GitOps ara\u00e7lar\u0131, arka planda genellikle Server-Side Apply kullanarak kaynaklar\u0131 g\u00fcnceller ve b\u00f6ylece \u00e7ak\u0131\u015fma y\u00f6netimini daha etkin hale getirir.<\/p>\n<h3>4. Dry-Run Modu ile De\u011fi\u015fiklikleri \u00d6nizleme<\/h3>\n<p>Bir de\u011fi\u015fikli\u011fi uygulamadan \u00f6nce ne gibi etkileri olaca\u011f\u0131n\u0131 g\u00f6rmek, olas\u0131 hatalar\u0131 \u00f6nlemek i\u00e7in \u00e7ok \u00f6nemlidir. <code>kubectl apply<\/code> komutu, bu ama\u00e7la <code>--dry-run<\/code> bayra\u011f\u0131n\u0131 sunar:<\/p>\n<ul>\n<li><code>kubectl apply --dry-run=client -f my-resource.yaml<\/code>: Bu komut, istemci taraf\u0131nda birle\u015ftirme i\u015flemini yapar ve API sunucusuna herhangi bir istek g\u00f6ndermeden uygulanacak yamay\u0131 g\u00f6sterir. Bu, syntax hatalar\u0131n\u0131 veya basit mant\u0131k hatalar\u0131n\u0131 yakalamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<li><code>kubectl apply --dry-run=server -f my-resource.yaml<\/code>: Bu komut, API sunucusuna bir istek g\u00f6nderir ancak sunucu de\u011fi\u015fikli\u011fi kal\u0131c\u0131 olarak kaydetmez. Sunucu, de\u011fi\u015fikli\u011fin ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131, \u00e7ak\u0131\u015fma olup olmad\u0131\u011f\u0131n\u0131 kontrol eder ve sonucu geri d\u00f6nd\u00fcr\u00fcr. Bu, Server-Side Apply mekanizmas\u0131n\u0131 test etmek ve potansiyel \u00e7ak\u0131\u015fmalar\u0131 \u00f6nceden g\u00f6rmek i\u00e7in daha kapsaml\u0131 bir yoldur.<\/li>\n<\/ul>\n<h3>5. <code>kubectl diff<\/code> Kullan\u0131m\u0131<\/h3>\n<p>Bir YAML dosyas\u0131n\u0131 uygulamadan \u00f6nce, bu dosyan\u0131n k\u00fcmedeki mevcut kaynakla aras\u0131ndaki farklar\u0131 g\u00f6rmek, beklenmedik de\u011fi\u015fiklikleri \u00f6nlemek i\u00e7in harika bir yoldur. <code>kubectl diff -f my-resource.yaml<\/code> komutu, yerel dosyan\u0131z ile k\u00fcmedeki canl\u0131 durum aras\u0131ndaki t\u00fcm de\u011fi\u015fiklikleri g\u00f6sterir. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k manifest dosyalar\u0131nda \u00e7ok de\u011ferlidir.<\/p>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar, <code>kubectl apply<\/code> komutunu sadece bir &#8220;uygulama&#8221; arac\u0131 olmaktan \u00e7\u0131kar\u0131p, Kubernetes ortam\u0131n\u0131zda g\u00fcvenli, verimli ve \u00f6l\u00e7eklenebilir bir kaynak y\u00f6netim stratejisinin temel ta\u015f\u0131 haline getirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p><code>kubectl apply<\/code> komutu, Kubernetes kaynak y\u00f6netiminin temel ta\u015f\u0131d\u0131r ve basit bir komut olman\u0131n \u00f6tesinde, karma\u015f\u0131k bir deklaratif y\u00f6netim felsefesini ve geli\u015fmi\u015f senkronizasyon mekanizmalar\u0131n\u0131 bar\u0131nd\u0131r\u0131r. \u0130stemci tarafl\u0131 uygulaman\u0131n (Client-Side Apply) \u00fc\u00e7 y\u00f6nl\u00fc birle\u015ftirme (three-way merge) stratejisi ve <code>last-applied-configuration<\/code> annotation&#8217;\u0131 ile nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda bu yakla\u015f\u0131m\u0131n \u00e7oklu ekip ortamlar\u0131nda yol a\u00e7abilece\u011fi potansiyel sorunlar\u0131 detayl\u0131ca inceledik. Bu sorunlara \u00e7\u00f6z\u00fcm olarak geli\u015ftirilen Server-Side Apply (SSA) ile tan\u0131\u015ft\u0131k; alan sahipli\u011fi (field ownership) ve API sunucusu tabanl\u0131 \u00e7ak\u0131\u015fma y\u00f6netimi sayesinde kaynak y\u00f6netiminin nas\u0131l daha g\u00fcvenli, \u015feffaf ve \u00f6ng\u00f6r\u00fclebilir hale geldi\u011fini g\u00f6rd\u00fck.<\/p>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, \u00f6zellikle birden fazla ekibin ayn\u0131 k\u00fcme \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 durumlarda, SSA&#8217;n\u0131n sundu\u011fu avantajlar yads\u0131namaz. Kaynaklar\u0131n\u0131z\u0131 Kustomize veya Helm gibi ara\u00e7larla y\u00f6netmek, GitOps prensiplerini benimsemek ve <code>--dry-run<\/code> veya <code>kubectl diff<\/code> gibi komutlarla de\u011fi\u015fiklikleri \u00f6nceden kontrol etmek, operasyonel verimlili\u011fi ve sistem istikrar\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. Unutmay\u0131n ki, Kubernetes&#8217;in g\u00fcc\u00fc, sadece kaynaklar\u0131 da\u011f\u0131tmakta de\u011fil, ayn\u0131 zamanda onlar\u0131 tutarl\u0131 ve g\u00fcvenli bir \u015fekilde y\u00f6netebilmektedir. <code>kubectl apply<\/code>&#8216;\u0131n derinliklerini anlamak, bu g\u00fcc\u00fc tam anlam\u0131yla kullanman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n<h4><code>kubectl apply<\/code> ile <code>kubectl create<\/code> veya <code>kubectl replace<\/code> aras\u0131ndaki fark nedir?<\/h4>\n<p><code>kubectl create<\/code>, bir kayna\u011f\u0131 yaln\u0131zca ilk kez olu\u015fturmak i\u00e7in kullan\u0131l\u0131r ve kaynak zaten varsa hata verir. <code>kubectl replace<\/code>, mevcut bir kayna\u011f\u0131 tamamen yeni bir tan\u0131mla de\u011fi\u015ftirir; bu da kaynakta tan\u0131mlanmayan t\u00fcm alanlar\u0131n silinmesine neden olur ve kayna\u011f\u0131 s\u0131f\u0131rdan olu\u015fturmaya benzer. <code>kubectl apply<\/code> ise deklaratif bir yakla\u015f\u0131md\u0131r; bir kayna\u011f\u0131 olu\u015fturur veya g\u00fcnceller, ancak yaln\u0131zca belirtilen alanlar\u0131 de\u011fi\u015ftirir ve mevcut olmayan alanlar\u0131 korur. Bu, <code>kubectl apply<\/code>&#8216;\u0131 s\u00fcrekli entegrasyon\/da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131 i\u00e7in daha uygun hale getirir.<\/p>\n<\/li>\n<li>\n<h4>Server-Side Apply (SSA) kullanmak neden Client-Side Apply&#8217;dan daha iyidir?<\/h4>\n<p>SSA, \u00f6zellikle \u00e7ok kullan\u0131c\u0131l\u0131 ve \u00e7ok ara\u00e7l\u0131 ortamlarda daha iyi bir deneyim sunar. Alan sahipli\u011fi (field ownership) kavram\u0131 sayesinde, hangi kullan\u0131c\u0131n\u0131n veya arac\u0131n kayna\u011f\u0131n hangi alan\u0131ndan sorumlu oldu\u011funu takip eder ve \u00e7ak\u0131\u015fmalar\u0131 API sunucusu taraf\u0131nda y\u00f6netir. Bu, yanl\u0131\u015fl\u0131kla \u00fczerine yazmalar\u0131 \u00f6nler, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r ve <code>last-applied-configuration<\/code> annotation&#8217;\u0131n\u0131n getirdi\u011fi karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131r\u0131r. Daha tutarl\u0131 ve \u00f6ng\u00f6r\u00fclebilir bir kaynak y\u00f6netimi sa\u011flar.<\/p>\n<\/li>\n<li>\n<h4><code>--force-conflicts<\/code> bayra\u011f\u0131n\u0131 ne zaman kullanmal\u0131y\u0131m?<\/h4>\n<p><code>--force-conflicts<\/code> bayra\u011f\u0131n\u0131 yaln\u0131zca, bir alan\u0131n sahipli\u011fini ba\u015fka bir y\u00f6neticiden (field manager) zorla almak istedi\u011finizden eminseniz kullanmal\u0131s\u0131n\u0131z. Bu, genellikle ba\u015fka bir ekibin veya otomasyon arac\u0131n\u0131n yapt\u0131\u011f\u0131 bir de\u011fi\u015fikli\u011fi bilerek ge\u00e7ersiz k\u0131lmak istedi\u011finiz durumlarda kullan\u0131l\u0131r. Ancak bu, potansiyel olarak di\u011fer ekiplerin i\u015f ak\u0131\u015flar\u0131n\u0131 bozabilece\u011fi i\u00e7in \u00e7ok dikkatli ve genellikle ekip i\u00e7i mutabakatla kullan\u0131lmal\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n<h4><code>kubectl apply<\/code> ile yap\u0131lan de\u011fi\u015fiklikleri nas\u0131l geri alabilirim?<\/h4>\n<p><code>kubectl apply<\/code> ile yap\u0131lan de\u011fi\u015fiklikleri geri alman\u0131n en iyi yolu, GitOps prensiplerini takip etmektir. E\u011fer kaynak tan\u0131mlar\u0131n\u0131z Git&#8217;te versiyonlan\u0131yorsa, hatal\u0131 commit&#8217;i geri alabilir (revert) ve GitOps arac\u0131n\u0131z\u0131n (Argo CD, Flux CD vb.) bu de\u011fi\u015fikli\u011fi k\u00fcmenize uygulamas\u0131n\u0131 sa\u011flayabilirsiniz. Manuel olarak geri almak isterseniz, \u00f6nceki bir yap\u0131land\u0131rma dosyas\u0131n\u0131 <code>kubectl apply<\/code> ile tekrar uygulayabilir veya <code>kubectl rollout undo<\/code> gibi komutlarla Deployment&#8217;lar\u0131n \u00f6nceki revizyonlar\u0131na d\u00f6nebilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>Server-Side Apply, t\u00fcm Kubernetes kaynak t\u00fcrlerini destekliyor mu?<\/h4>\n<p>Evet, Server-Side Apply (SSA) Kubernetes&#8217;in 1.16 s\u00fcr\u00fcm\u00fcnden itibaren beta olarak tan\u0131t\u0131lm\u0131\u015f ve 1.22 s\u00fcr\u00fcm\u00fcnden itibaren genel olarak kullan\u0131labilir (GA) hale gelmi\u015ftir. Temel olarak t\u00fcm yerle\u015fik (built-in) Kubernetes kaynak t\u00fcrleri ve \u00e7o\u011fu \u00f6zel kaynak tan\u0131m\u0131 (Custom Resource Definitions &#8211; CRD&#8217;ler) i\u00e7in SSA deste\u011fi bulunmaktad\u0131r. Ancak, baz\u0131 eski veya \u00e7ok \u00f6zel CRD&#8217;lerde tam uyumluluk i\u00e7in ek yap\u0131land\u0131rmalar gerekebilir.<\/p>\n<\/li>\n<\/ol>\n<p>#Kubernetes #kubectl #DevOps #GitOps #CloudNative #ServerSideApply #KaynakY\u00f6netimi #Teknoloji<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/kubectl-apply-declarative-resource-management\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/kubectl-apply-declarative-resource-management<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Kubernetes d\u00fcnyas\u0131nda kaynaklar\u0131 y\u00f6netmek, deklaratif (declarative) yakla\u015f\u0131mla m\u00fcmk\u00fcnd\u00fcr ve kubectl apply komutu bu yakla\u015f\u0131m\u0131n kalbinde yer al\u0131r.","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":[1],"tags":[],"class_list":{"0":"post-43505","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon - 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\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon\" \/>\n<meta property=\"og:description\" content=\"Kubernetes d\u00fcnyas\u0131nda kaynaklar\u0131 y\u00f6netmek, deklaratif (declarative) yakla\u015f\u0131mla m\u00fcmk\u00fcnd\u00fcr ve kubectl apply komutu bu yakla\u015f\u0131m\u0131n kalbinde yer al\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-21T18:04:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-21T18:05:01+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=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon\",\"datePublished\":\"2026-07-21T18:04:35+00:00\",\"dateModified\":\"2026-07-21T18:05:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\"},\"wordCount\":5711,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\",\"name\":\"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-07-21T18:04:35+00:00\",\"dateModified\":\"2026-07-21T18:05:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon\"}]},{\"@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":"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon - 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\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon","og_description":"Kubernetes d\u00fcnyas\u0131nda kaynaklar\u0131 y\u00f6netmek, deklaratif (declarative) yakla\u015f\u0131mla m\u00fcmk\u00fcnd\u00fcr ve kubectl apply komutu bu yakla\u015f\u0131m\u0131n kalbinde yer al\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-07-21T18:04:35+00:00","article_modified_time":"2026-07-21T18:05:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon","datePublished":"2026-07-21T18:04:35+00:00","dateModified":"2026-07-21T18:05:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/"},"wordCount":5711,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/","url":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/","name":"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-07-21T18:04:35+00:00","dateModified":"2026-07-21T18:05:01+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kubectl-apply-komutunun-perde-arkasi-kaynak-yonetimi-ve-senkronizasyon\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubectl Apply Komutunun Perde Arkas\u0131: Kaynak Y\u00f6netimi ve Senkronizasyon"}]},{"@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\/43505","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=43505"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43505\/revisions"}],"predecessor-version":[{"id":43506,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43505\/revisions\/43506"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=43505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=43505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=43505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}