{"id":32543,"date":"2025-10-23T03:41:46","date_gmt":"2025-10-23T00:41:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32543"},"modified":"2025-10-23T03:41:46","modified_gmt":"2025-10-23T00:41:46","slug":"giris-kubernetes-konfigurasyon-yonetiminin-zorluklari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/","title":{"rendered":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131<\/h2>\n<p>Kubernetes, modern uygulama da\u011f\u0131t\u0131m\u0131nda standart haline gelmi\u015f olsa da, y\u00fczlerce hatta binlerce sat\u0131rdan olu\u015fan YAML tabanl\u0131 konfig\u00fcrasyon dosyalar\u0131n\u0131 y\u00f6netmek zaman zaman karma\u015f\u0131k bir hal alabilir. Geli\u015ftirme (dev), test (staging) ve \u00fcretim (production) gibi farkl\u0131 ortamlar i\u00e7in ayn\u0131 uygulaman\u0131n konfig\u00fcrasyonlar\u0131n\u0131 tutmak, \u00e7o\u011fu zaman tekrarlayan YAML bloklar\u0131, manuel de\u011fi\u015fiklikler ve bu durumdan kaynaklanan hatalara yol a\u00e7ar. Bu durum, &#8220;Configuration Drift&#8221; (konfig\u00fcrasyon kaymas\u0131) olarak bilinen, farkl\u0131 ortamlar\u0131n beklenmedik \u015fekillerde birbirinden ayr\u0131lmas\u0131 sorununu beraberinde getirir.<\/p>\n<p>Geleneksel olarak bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in Helm gibi \u015fablonlama (templating) ara\u00e7lar\u0131 kullan\u0131lm\u0131\u015ft\u0131r. Helm, g\u00fc\u00e7l\u00fc bir paket y\u00f6neticisi ve \u015fablonlama motoru sunsa da, baz\u0131 kullan\u0131c\u0131lar i\u00e7in getirdi\u011fi ek soyutlama katman\u0131 ve Go Template yap\u0131s\u0131 karma\u015f\u0131k bulunabilir. Kustomize ise bu noktada farkl\u0131 bir yakla\u015f\u0131m sunar: Mevcut Kubernetes YAML dosyalar\u0131n\u0131 do\u011frudan de\u011fi\u015ftirerek, ortamlar aras\u0131 farkl\u0131l\u0131klar\u0131 y\u00f6netmek i\u00e7in daha hafif, bildirimsel (declarative) ve \u015fablonlama gerektirmeyen bir y\u00f6ntem sunar.<\/p>\n<h2>Kustomize Nedir ve Neden Kullanmal\u0131y\u0131z?<\/h2>\n<h3>Kustomize&#8217;\u0131n Temel Felsefesi: \u015eablonlama Yerine Yama (Patching)<\/h3>\n<p>Kustomize, Kubernetes konfig\u00fcrasyonlar\u0131n\u0131 y\u00f6netmek i\u00e7in geli\u015ftirilmi\u015f, bildirimsel bir ara\u00e7t\u0131r. En \u00f6nemli \u00f6zelli\u011fi, mevcut YAML dosyalar\u0131n\u0131 &#8220;yamalayarak&#8221; (patching) veya &#8220;d\u00f6n\u00fc\u015ft\u00fcrerek&#8221; (transforming) de\u011fi\u015fiklik yapmas\u0131d\u0131r. Bu, Helm&#8217;in Go Template&#8217;leri kullanarak s\u0131f\u0131rdan YAML dosyalar\u0131 olu\u015fturma yakla\u015f\u0131m\u0131ndan farkl\u0131d\u0131r. Kustomize, temel (base) bir konfig\u00fcrasyon setini al\u0131r ve bu temel \u00fczerine ortamlar aras\u0131 farkl\u0131l\u0131klar\u0131 tan\u0131mlayan katmanlar (overlays) uygular.<\/p>\n<p>Neden Kustomize kullanmal\u0131y\u0131z?<\/p>\n<ul>\n<li><strong>\u015eablonlama Yok:<\/strong> Go Template gibi \u00f6zel bir \u015fablonlama dilini \u00f6\u011frenme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r. Do\u011frudan standart Kubernetes YAML dosyalar\u0131yla \u00e7al\u0131\u015f\u0131rs\u0131n\u0131z.<\/li>\n<li><strong>DRY Prensibi (Don&#8217;t Repeat Yourself):<\/strong> Ortak konfig\u00fcrasyonlar\u0131 tek bir &#8220;base&#8221; alt\u0131nda tutarak, farkl\u0131 ortamlar i\u00e7in sadece de\u011fi\u015fen k\u0131s\u0131mlar\u0131 tan\u0131mlars\u0131n\u0131z. Bu, YAML tekrar\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<li><strong>Do\u011fal Kubernetes Deneyimi:<\/strong> Kustomize, <code>kubectl<\/code> komut sat\u0131r\u0131 arac\u0131na entegredir (v1.14 ve sonras\u0131). Bu sayede ekstra bir ara\u00e7 kurmaya veya \u00f6\u011frenmeye gerek kalmadan do\u011frudan kullanabilirsiniz.<\/li>\n<li><strong>Kolay Anla\u015f\u0131l\u0131rl\u0131k:<\/strong> De\u011fi\u015fiklikler, YAML diff&#8217;leri \u015feklinde kolayca incelenebilir. Bir yamay\u0131 okudu\u011funuzda neyin de\u011fi\u015fti\u011fini net bir \u015fekilde g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/li>\n<li><strong>Esneklik:<\/strong> Farkl\u0131 ortamlara \u00f6zg\u00fc de\u011fi\u015fiklikleri, etiketleri, etiket \u00f6n eklerini\/son eklerini, isim \u00f6n eklerini\/son eklerini ve hatta tamamen yeni kaynaklar\u0131 kolayca ekleyebilirsiniz.<\/li>\n<\/ul>\n<h3>Temel Kavramlar: Base ve Overlays<\/h3>\n<ul>\n<li><strong>Base (Temel Konfig\u00fcrasyon):<\/strong> Bir uygulaman\u0131n veya servisin varsay\u0131lan, ortamdan ba\u011f\u0131ms\u0131z temel konfig\u00fcrasyonunu (Deployment, Service, ConfigMap vb.) i\u00e7eren dizindir. Bu, t\u00fcm ortamlar i\u00e7in ortak olan YAML dosyalar\u0131n\u0131 bar\u0131nd\u0131r\u0131r.<\/li>\n<li><strong>Overlay (Katman):<\/strong> Belirli bir ortama (dev, staging, prod) \u00f6zg\u00fc de\u011fi\u015fiklikleri tan\u0131mlayan dizindir. Bir overlay, bir veya daha fazla base&#8217;i referans alabilir ve bu base&#8217;ler \u00fczerindeki alanlar\u0131 yamalayabilir, yeni kaynaklar ekleyebilir veya mevcut kaynaklar\u0131 d\u00f6n\u00fc\u015ft\u00fcrebilir.<\/li>\n<\/ul>\n<h2>Kustomize ile \u0130lk Ad\u0131mlar ve Pratik Kullan\u0131m<\/h2>\n<h3>Kurulum<\/h3>\n<p>Kubernetes 1.14 ve sonraki s\u00fcr\u00fcmleriyle birlikte <code>kubectl<\/code> komutuna Kustomize entegre olarak gelir. Bu nedenle, ayr\u0131 bir kurulum yapman\u0131za gerek yoktur. Komut istemcinizde <code>kubectl kustomize --help<\/code> yazarak Kustomize&#8217;\u0131n haz\u0131r olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<h3>Temel Konfig\u00fcrasyon (Base) Olu\u015fturma<\/h3>\n<p>\u0130lk olarak, uygulamam\u0131z\u0131n temel konfig\u00fcrasyonunu tan\u0131mlayal\u0131m. Bu konfig\u00fcrasyon, t\u00fcm ortamlar i\u00e7in ge\u00e7erli olacak varsay\u0131lan ayarlar\u0131 i\u00e7erecektir.<\/p>\n<p>Proje yap\u0131m\u0131z\u0131 \u015fu \u015fekilde olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">\nmy-app\/\n\u251c\u2500\u2500 base\/\n\u2502   \u251c\u2500\u2500 deployment.yaml\n\u2502   \u251c\u2500\u2500 service.yaml\n\u2502   \u2514\u2500\u2500 kustomization.yaml\n    <\/code><\/pre>\n<p><strong><code>my-app\/base\/deployment.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-app-deployment\n  labels:\n    app: my-app\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: my-app\n  template:\n    metadata:\n      labels:\n        app: my-app\n    spec:\n      containers:\n      - name: my-app-container\n        image: nginx:1.21.6\n        ports:\n        - containerPort: 80\n    <\/code><\/pre>\n<p><strong><code>my-app\/base\/service.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: v1\nkind: Service\nmetadata:\n  name: my-app-service\n  labels:\n    app: my-app\nspec:\n  selector:\n    app: my-app\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 80\n  type: ClusterIP\n    <\/code><\/pre>\n<p>\u015eimdi, bu YAML dosyalar\u0131n\u0131 Kustomize&#8217;a tan\u0131tmak i\u00e7in bir <code>kustomization.yaml<\/code> dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<p><strong><code>my-app\/base\/kustomization.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nresources:\n  - deployment.yaml\n  - service.yaml\n    <\/code><\/pre>\n<p>Bu temel konfig\u00fcrasyonu uygulamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\nkubectl kustomize my-app\/base\n<h2>Veya do\u011frudan k\u00fcme'ye uygulamak i\u00e7in:<\/h2>\n<h2>kubectl apply -k my-app\/base<\/h2>\n    <\/code><\/pre>\n<p>Bu komut, Kustomize taraf\u0131ndan i\u015flenmi\u015f nihai YAML \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6sterecektir. Hen\u00fcz herhangi bir de\u011fi\u015fiklik yapmad\u0131\u011f\u0131m\u0131z i\u00e7in, do\u011frudan <code>deployment.yaml<\/code> ve <code>service.yaml<\/code> dosyalar\u0131n\u0131n birle\u015fmi\u015f hali olacakt\u0131r.<\/p>\n<h3>Ortama \u00d6zel De\u011fi\u015fiklikler (Overlays) Olu\u015fturma<\/h3>\n<p>\u015eimdi geli\u015ftirme (dev) ve \u00fcretim (prod) ortamlar\u0131 i\u00e7in farkl\u0131 konfig\u00fcrasyonlar olu\u015ftural\u0131m. \u00d6rne\u011fin, dev ortam\u0131nda replika say\u0131s\u0131n\u0131 1&#8217;den 2&#8217;ye \u00e7\u0131karal\u0131m ve farkl\u0131 bir imaj etiketi kullanal\u0131m. Prod ortam\u0131nda ise replika say\u0131s\u0131n\u0131 3 yapal\u0131m ve kaynak limitleri ekleyelim.<\/p>\n<p>Proje yap\u0131m\u0131z\u0131 g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-bash\">\nmy-app\/\n\u251c\u2500\u2500 base\/\n\u2502   \u251c\u2500\u2500 deployment.yaml\n\u2502   \u251c\u2500\u2500 service.yaml\n\u2502   \u2514\u2500\u2500 kustomization.yaml\n\u2514\u2500\u2500 overlays\/\n    \u251c\u2500\u2500 dev\/\n    \u2502   \u2514\u2500\u2500 kustomization.yaml\n    \u2502   \u2514\u2500\u2500 patch-dev-deployment.yaml\n    \u2514\u2500\u2500 prod\/\n        \u2514\u2500\u2500 kustomization.yaml\n        \u2514\u2500\u2500 patch-prod-deployment.yaml\n    <\/code><\/pre>\n<h4>Geli\u015ftirme Ortam\u0131 (Dev Overlay)<\/h4>\n<p><strong><code>my-app\/overlays\/dev\/kustomization.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nbases:\n  - ..\/..\/base # base dizinini referans al\u0131yoruz\nnamePrefix: dev- # T\u00fcm kaynaklara \"dev-\" \u00f6n eki ekle\nnamespace: dev-namespace # T\u00fcm kaynaklar\u0131 bu namespace'e ta\u015f\u0131\npatches:\n  - path: patch-dev-deployment.yaml\n    target:\n      kind: Deployment\n      name: my-app-deployment\ncommonLabels:\n  environment: dev\n    <\/code><\/pre>\n<p><strong><code>my-app\/overlays\/dev\/patch-dev-deployment.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-app-deployment # Base'deki Deployment'\u0131n ad\u0131yla e\u015fle\u015fmeli\nspec:\n  replicas: 2 # Replikalar\u0131 2 yap\n  template:\n    spec:\n      containers:\n      - name: my-app-container\n        image: nginx:1.22.1 # Farkl\u0131 bir imaj etiketi kullan\n    <\/code><\/pre>\n<p>Dev ortam\u0131 konfig\u00fcrasyonunu g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\nkubectl kustomize my-app\/overlays\/dev\n    <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da, Deployment ad\u0131n\u0131n <code>dev-my-app-deployment<\/code> oldu\u011funu, replikalar\u0131n 2&#8217;ye \u00e7\u0131kt\u0131\u011f\u0131n\u0131 ve imaj\u0131n <code>nginx:1.22.1<\/code> olarak de\u011fi\u015fti\u011fini g\u00f6receksiniz. Ayr\u0131ca t\u00fcm kaynaklara <code>environment: dev<\/code> etiketi eklenmi\u015f ve <code>dev-namespace<\/code>&#8216;e ta\u015f\u0131nm\u0131\u015f olacakt\u0131r.<\/p>\n<h4>\u00dcretim Ortam\u0131 (Prod Overlay)<\/h4>\n<p><strong><code>my-app\/overlays\/prod\/kustomization.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nbases:\n  - ..\/..\/base\nnamePrefix: prod-\nnamespace: prod-namespace\npatches:\n  - path: patch-prod-deployment.yaml\n    target:\n      kind: Deployment\n      name: my-app-deployment\ncommonLabels:\n  environment: prod\n    <\/code><\/pre>\n<p><strong><code>my-app\/overlays\/prod\/patch-prod-deployment.yaml<\/code>:<\/strong><\/p>\n<pre><code class=\"language-yaml\">\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-app-deployment\nspec:\n  replicas: 3 # Replikalar\u0131 3 yap\n  template:\n    spec:\n      containers:\n      - name: my-app-container\n        resources: # Kaynak limitleri ekle\n          limits:\n            cpu: \"500m\"\n            memory: \"512Mi\"\n          requests:\n            cpu: \"250m\"\n            memory: \"256Mi\"\n    <\/code><\/pre>\n<p>Prod ortam\u0131 konfig\u00fcrasyonunu g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\nkubectl kustomize my-app\/overlays\/prod\n    <\/code><\/pre>\n<p>Burada da benzer \u015fekilde, Deployment ad\u0131n\u0131n <code>prod-my-app-deployment<\/code> oldu\u011funu, replikalar\u0131n 3&#8217;e \u00e7\u0131kt\u0131\u011f\u0131n\u0131 ve kaynak limitlerinin eklendi\u011fini g\u00f6zlemleyeceksiniz.<\/p>\n<h2>Kustomize&#8217;\u0131n Geli\u015fmi\u015f \u00d6zellikleri<\/h2>\n<p>Kustomize, sadece yamalarla de\u011fil, ayn\u0131 zamanda \u00e7e\u015fitli &#8220;transformer&#8221; ve &#8220;generator&#8221; \u00f6zellikleri ile de konfig\u00fcrasyonlar\u0131n\u0131z\u0131 zenginle\u015ftirmenizi sa\u011flar.<\/p>\n<h3>ConfigMap ve Secret Olu\u015fturucular (Generators)<\/h3>\n<p><code>kustomization.yaml<\/code> dosyas\u0131na do\u011frudan ConfigMap ve Secret olu\u015fturabilirsiniz. Kustomize, belirtilen dosyalardan veya de\u011fi\u015fmez (literal) de\u011ferlerden bu kaynaklar\u0131 otomatik olarak olu\u015fturur ve her de\u011fi\u015fikli\u011fi alg\u0131lad\u0131\u011f\u0131nda yeni bir hash ile isimlerini g\u00fcnceller (immutable ConfigMaps\/Secrets i\u00e7in idealdir).<\/p>\n<p>\u00d6rnek <code>kustomization.yaml<\/code>:<\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nresources:\n  - deployment.yaml\nconfigMapGenerator:\n  - name: my-app-config\n    files:\n      - config\/app-settings.ini\n    literals:\n      - APP_ENV=production\nsecretGenerator:\n  - name: my-app-secret\n    literals:\n      - API_KEY=supersecretkey\n      - DB_PASSWORD=dbpassword123\n    type: Opaque\n    <\/code><\/pre>\n<p><code>config\/app-settings.ini<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-ini\">\n[database]\nhost = localhost\nport = 5432\n    <\/code><\/pre>\n<p>Kustomize bu tan\u0131mlamalardan otomatik olarak ConfigMap ve Secret kaynaklar\u0131n\u0131 olu\u015fturacak ve Deployment&#8217;\u0131n\u0131zda referans verebilece\u011finiz hale getirecektir.<\/p>\n<h3>Ortak Etiketler ve A\u00e7\u0131klamalar (Common Labels &#038; Annotations)<\/h3>\n<p>T\u00fcm kaynaklara otomatik olarak etiket veya a\u00e7\u0131klama eklemek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r:<\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nresources:\n  - deployment.yaml\ncommonLabels:\n  app.kubernetes.io\/name: my-app\n  app.kubernetes.io\/instance: my-app-prod\ncommonAnnotations:\n  managed-by: kustomize\n  owner: platform-team\n    <\/code><\/pre>\n<h3>\u0130sim \u00d6n Ekleri\/Son Ekleri ve Namespace (Name Prefix\/Suffix &#038; Namespace)<\/h3>\n<p>Yukar\u0131daki \u00f6rneklerde g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, t\u00fcm kaynak adlar\u0131na bir \u00f6n ek ekleyebilir veya kaynaklar\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 varsay\u0131lan <code>namespace<\/code>&#8216;i belirleyebilirsiniz. Bu, ortamlar aras\u0131 \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek i\u00e7in \u00e7ok \u00f6nemlidir.<\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nresources:\n  - deployment.yaml\nnamePrefix: prod-\nnameSuffix: -v1 # T\u00fcm kaynak adlar\u0131na \"-v1\" son eki ekler\nnamespace: my-prod-namespace\n    <\/code><\/pre>\n<h3>Bile\u015fenler (Components)<\/h3>\n<p>Kustomize&#8217;\u0131n 5. s\u00fcr\u00fcm\u00fcyle tan\u0131t\u0131lan &#8220;components&#8221; \u00f6zelli\u011fi, k\u00fc\u00e7\u00fck, tekrar kullan\u0131labilir Kustomization par\u00e7ac\u0131klar\u0131 tan\u0131mlaman\u0131za olanak tan\u0131r. \u00d6rne\u011fin, bir uygulaman\u0131n izleme etiketlerini veya kaynak limitlerini tan\u0131mlayan bir bile\u015fen olu\u015fturup bunu birden fazla overlay&#8217;de kullanabilirsiniz.<\/p>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-bash\">\nmy-app\/\n\u251c\u2500\u2500 base\/\n\u2502   \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 components\/\n\u2502   \u2514\u2500\u2500 monitoring\/\n\u2502       \u2514\u2500\u2500 kustomization.yaml # monitoring etiketlerini i\u00e7erir\n\u2514\u2500\u2500 overlays\/\n    \u251c\u2500\u2500 dev\/\n    \u2502   \u2514\u2500\u2500 kustomization.yaml\n    \u2514\u2500\u2500 prod\/\n        \u2514\u2500\u2500 kustomization.yaml\n    <\/code><\/pre>\n<p><code>my-app\/components\/monitoring\/kustomization.yaml<\/code>:<\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\ncommonLabels:\n  prometheus.io\/scrape: \"true\"\n  prometheus.io\/port: \"8080\"\n    <\/code><\/pre>\n<p><code>my-app\/overlays\/prod\/kustomization.yaml<\/code> (i\u00e7inde bile\u015feni kullan\u0131r):<\/p>\n<pre><code class=\"language-yaml\">\napiVersion: kustomize.config.k8s.io\/v1beta1\nkind: Kustomization\nbases:\n  - ..\/..\/base\ncomponents:\n  - ..\/..\/components\/monitoring # Monitoring bile\u015fenini dahil et\npatches:\n  - path: patch-prod-deployment.yaml\n    target:\n      kind: Deployment\n      name: my-app-deployment\n    <\/code><\/pre>\n<h2>Sonu\u00e7, En \u0130yi Pratikler ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Kustomize, Kubernetes konfig\u00fcrasyon y\u00f6netimini basitle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc, esnek ve \u015fablonlama i\u00e7ermeyen bir yakla\u015f\u0131m sunar. Temel ve katman (base ve overlay) kavramlar\u0131yla, farkl\u0131 ortamlar i\u00e7in konfig\u00fcrasyonlar\u0131 DRY prensibine uygun olarak y\u00f6netmek \u00e7ok daha kolay hale gelir. <code>kubectl<\/code> entegrasyonu sayesinde \u00f6\u011frenme e\u011frisi d\u00fc\u015f\u00fckt\u00fcr ve mevcut Kubernetes i\u015f ak\u0131\u015flar\u0131n\u0131za sorunsuz bir \u015fekilde entegre edilebilir.<\/p>\n<h3>En \u0130yi Pratikler<\/h3>\n<ul>\n<li><strong>Base&#8217;i Temiz ve Genel Tutun:<\/strong> Base konfig\u00fcrasyonlar\u0131n\u0131z\u0131 m\u00fcmk\u00fcn oldu\u011funca jenerik tutun. Ortama \u00f6zel hi\u00e7bir bilgiyi base&#8217;e dahil etmeyin.<\/li>\n<li><strong>Overlays&#8217;leri Odakl\u0131 Tutun:<\/strong> Her overlay sadece kendi ortam\u0131na \u00f6zg\u00fc de\u011fi\u015fiklikleri i\u00e7ermelidir. Gereksiz veya ba\u015fka ortamlara ait yamalar\u0131 eklemeyin.<\/li>\n<li><strong>Versiyon Kontrol\u00fc Kullan\u0131n:<\/strong> T\u00fcm Kustomize dosyalar\u0131n\u0131z\u0131 (base, overlays, yamalar) Git gibi bir versiyon kontrol sisteminde saklay\u0131n. Bu, de\u011fi\u015fiklikleri izlemenizi ve geri alman\u0131z\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ve Mod\u00fcler Yamalar Olu\u015fturun:<\/strong> B\u00fcy\u00fck, karma\u015f\u0131k yamalar yerine, belirli bir \u00f6zelli\u011fi veya alan\u0131 de\u011fi\u015ftiren k\u00fc\u00e7\u00fck, odakl\u0131 yamalar olu\u015fturun. Bu, okunabilirli\u011fi ve bak\u0131m\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>CI\/CD ile Entegre Edin:<\/strong> Kustomize&#8217;\u0131 CI\/CD pipeline&#8217;lar\u0131n\u0131za entegre ederek, otomatik da\u011f\u0131t\u0131mlar ve tutarl\u0131 ortamlar sa\u011flay\u0131n.<\/li>\n<\/ul>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<h4>Kustomize ve Helm Aras\u0131ndaki Temel Fark Nedir?<\/h4>\n<p>Kustomize, mevcut YAML dosyalar\u0131n\u0131 &#8220;yamalayarak&#8221; veya &#8220;d\u00f6n\u00fc\u015ft\u00fcrerek&#8221; \u00e7al\u0131\u015f\u0131r. \u015eablonlama motoru yoktur, do\u011frudan standart YAML ile \u00e7al\u0131\u015f\u0131r. Helm ise Go Template kullanarak s\u0131f\u0131rdan YAML dosyalar\u0131 olu\u015fturan bir \u015fablonlama motorudur ve ayn\u0131 zamanda bir paket y\u00f6neticisidir. Kustomize daha hafif ve Kubernetes YAML&#8217;lerine daha yak\u0131nken, Helm daha kapsaml\u0131 bir paketleme ve \u015fablonlama \u00e7\u00f6z\u00fcm\u00fc sunar.<\/p>\n<h4>Kustomize hangi Kubernetes versiyonlar\u0131nda desteklenir?<\/h4>\n<p>Kustomize, Kubernetes 1.14 ve sonraki s\u00fcr\u00fcmleriyle birlikte <code>kubectl<\/code> komutuna entegre edilmi\u015ftir. Daha eski <code>kubectl<\/code> versiyonlar\u0131 i\u00e7in ayr\u0131 bir Kustomize CLI arac\u0131 indirmeniz gerekebilir, ancak bu art\u0131k yayg\u0131n bir durum de\u011fildir.<\/p>\n<h4>Kustomize ile Secret&#8217;lar\u0131 nas\u0131l y\u00f6netebilirim?<\/h4>\n<p>Kustomize&#8217;\u0131n <code>secretGenerator<\/code> \u00f6zelli\u011fini kullanarak Secret&#8217;lar\u0131 olu\u015fturabilirsiniz. Bu \u00f6zellik, belirtilen dosyalardan veya de\u011fi\u015fmez de\u011ferlerden Secret&#8217;lar olu\u015fturur ve her de\u011fi\u015fiklikte yeni bir hash ile isimlerini g\u00fcnceller. Ancak, hassas verileri do\u011frudan YAML dosyalar\u0131na yazmak yerine, bunlar\u0131 harici bir sistemden (\u00f6rne\u011fin Vault, KMS) al\u0131p SecretGenerator&#8217;a beslemek daha g\u00fcvenli bir yakla\u015f\u0131md\u0131r.<\/p>\n<h4>Kustomize ile d\u0131\u015far\u0131dan bir Git reposundaki base&#8217;i kullanabilir miyim?<\/h4>\n<p>Evet, Kustomize uzak (remote) base&#8217;leri destekler. <code>kustomization.yaml<\/code> dosyan\u0131zda <code>bases<\/code> veya <code>resources<\/code> alan\u0131nda bir Git URL&#8217;si belirterek uzak bir depodan konfig\u00fcrasyonlar\u0131 \u00e7ekebilirsiniz:<\/p>\n<pre><code class=\"language-yaml\">\nbases:\n  - github.com\/kubernetes-sigs\/kustomize\/examples\/helloWorld?ref=master\n    <\/code><\/pre>\n<h4>Kustomize&#8217;\u0131 CI\/CD pipeline&#8217;\u0131ma nas\u0131l entegre edebilirim?<\/h4>\n<p>CI\/CD pipeline&#8217;\u0131n\u0131zda Kustomize&#8217;\u0131 kullanmak olduk\u00e7a basittir. \u00d6rne\u011fin, bir Jenkinsfile veya GitHub Actions i\u015f ak\u0131\u015f\u0131nda, ilgili ortama ait Kustomize dizinine gidip <code>kubectl apply -k <overlay-dizini><\/code> komutunu \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu, Kustomize taraf\u0131ndan olu\u015fturulan nihai YAML&#8217;i do\u011frudan Kubernetes k\u00fcmenize uygulayacakt\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131\n    Kubernetes, modern uygulama da\u011f\u0131t\u0131m\u0131nda standart haline gelmi\u015f olsa da, y\u00fczl","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1328],"tags":[],"class_list":{"0":"post-32543","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-bash","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131 - 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\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131   Kubernetes, modern uygulama da\u011f\u0131t\u0131m\u0131nda standart haline gelmi\u015f olsa da, y\u00fczl\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-23T00:41:46+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=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131\",\"datePublished\":\"2025-10-23T00:41:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\"},\"wordCount\":1552,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Bash\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\",\"name\":\"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-23T00:41:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131\"}]},{\"@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":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131 - 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\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131","og_description":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131   Kubernetes, modern uygulama da\u011f\u0131t\u0131m\u0131nda standart haline gelmi\u015f olsa da, y\u00fczl","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-23T00:41:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131","datePublished":"2025-10-23T00:41:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/"},"wordCount":1552,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Bash"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/","name":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-23T00:41:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-kubernetes-konfigurasyon-yonetiminin-zorluklari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: Kubernetes Konfig\u00fcrasyon Y\u00f6netiminin Zorluklar\u0131"}]},{"@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\/32543","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=32543"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32543\/revisions"}],"predecessor-version":[{"id":32544,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32543\/revisions\/32544"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}