{"id":33961,"date":"2025-11-09T10:01:03","date_gmt":"2025-11-09T07:01:03","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/"},"modified":"2025-11-09T10:01:03","modified_gmt":"2025-11-09T07:01:03","slug":"kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/","title":{"rendered":"Kubernetes&#8217;te Pod&#8217;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?"},"content":{"rendered":"<p><meta name=\"description\" content=\"Kubernetes uygulamalar\u0131n\u0131zda ConfigMap kullanarak Pod'lar\u0131n\u0131za ortam de\u011fi\u015fkenlerini nas\u0131l g\u00fcvenli ve verimli bir \u015fekilde aktaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frenin. Esnek ve dinamik uygulama yap\u0131land\u0131rmas\u0131 i\u00e7in en iyi y\u00f6ntemleri ke\u015ffedin.\"><br \/>\n<body><\/p>\n<style>\n    \/* Basit responsive kod blo\u011fu stili *\/\n    @media (max-width: 768px) {\n      pre {\n        white-space: pre-wrap;\n        word-wrap: break-word;\n        overflow-x: auto;\n      }\n    }<\/p>\n<p>    \/* Uzman \u0130pucu stili *\/\n    .expert-tip {\n      background-color: #e0f7fa;\n      border-left: 5px solid #00bcd4;\n      padding: 15px;\n      margin: 20px 0;\n      font-style: italic;\n      color: #00796b;\n    }<\/p>\n<p>    \/* Genel kod blo\u011fu stili *\/\n    pre {\n      background-color: #272822;\n      color: #f8f8f2;\n      padding: 15px;\n      border-radius: 5px;\n      overflow-x: auto;\n      font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n      line-height: 1.4;\n      font-size: 0.9em;\n    }\n  <\/style>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani &#8220;hardcode&#8221; etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.<\/p>\n<p>\u0130\u015fte tam bu noktada, uygulaman\u0131n yap\u0131land\u0131rmas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortamdan ay\u0131rmak, modern bulut yerel (cloud-native) yakla\u015f\u0131mlar\u0131n temel ta\u015flar\u0131ndan biri haline gelir. Konteyner tabanl\u0131 mimariler ve \u00f6zellikle Kubernetes gibi orkestrasyon ara\u00e7lar\u0131, bu ayr\u0131m\u0131 daha da kolayla\u015ft\u0131r\u0131r. Bir konteynerin kendisi de\u011fi\u015fmez bir yap\u0131ya sahip olmal\u0131, yani bir kere olu\u015fturulduktan sonra farkl\u0131 ortamlar i\u00e7in yeniden derlenmemelidir. Uygulaman\u0131n ihtiyac\u0131 olan t\u00fcm ayarlar, \u00e7al\u0131\u015ft\u0131\u011f\u0131 anda d\u0131\u015far\u0131dan verilmelidir. Bu y\u00f6ntem, uygulamalar\u0131n daha ta\u015f\u0131nabilir, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, g\u00fcvenlik a\u00e7\u0131s\u0131ndan da \u00f6nemli avantajlar sunar, zira hassas olmayan yap\u0131land\u0131rma bilgilerinin kod taban\u0131ndan ayr\u0131 tutulmas\u0131na olanak tan\u0131r. B\u00f6ylece, uygulama geli\u015ftiricileri sadece i\u015f mant\u0131\u011f\u0131na odaklan\u0131rken, operasyon ekipleri yap\u0131land\u0131rma y\u00f6netimini daha verimli bir \u015fekilde yapabilirler.<\/p>\n<p>Peki, Kubernetes ekosisteminde bu yap\u0131land\u0131rma bilgilerini konteynerlere (ve dolay\u0131s\u0131yla Pod&#8217;lara) nas\u0131l ula\u015ft\u0131r\u0131r\u0131z? Bunun en yayg\u0131n ve etkili yollar\u0131ndan biri, ortam de\u011fi\u015fkenlerini (environment variables) kullanmakt\u0131r. Ortam de\u011fi\u015fkenleri, i\u015fletim sisteminin veya \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u00fcrecin \u00f6zelliklerini tan\u0131mlayan dinamik adland\u0131r\u0131lm\u0131\u015f de\u011ferlerdir. Uygulamalar genellikle ba\u015flat\u0131ld\u0131klar\u0131nda bu de\u011fi\u015fkenleri okuyarak kendilerini yap\u0131land\u0131r\u0131rlar. Ancak Kubernetes ortam\u0131nda, bu ortam de\u011fi\u015fkenlerini her Pod i\u00e7in ayr\u0131 ayr\u0131 y\u00f6netmek yerine, merkezi bir yap\u0131land\u0131rma nesnesi kullanarak daha d\u00fczenli ve \u00f6l\u00e7eklenebilir bir yakla\u015f\u0131m benimseyebiliriz. Bu yaz\u0131da, tam da bu amaca hizmet eden Kubernetes ConfigMap nesnesini kullanarak, Pod&#8217;lar\u0131n\u0131za ortam de\u011fi\u015fkenlerini nas\u0131l aktaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Bu sayede, uygulamalar\u0131n\u0131z\u0131n yap\u0131land\u0131rmas\u0131n\u0131 esnek, g\u00fcvenli ve y\u00f6netilebilir bir \u015fekilde yapabileceksiniz.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: Uygulama yap\u0131land\u0131rmas\u0131n\u0131 koddan ay\u0131rmak, 12 Fakt\u00f6r Uygulama (12 Factor App) prensiplerinden &#8220;III. Yap\u0131land\u0131rma&#8221; maddesinin temelini olu\u015fturur. Bu prensibi benimsemek, bulut yerel mimarilerde uygulamalar\u0131n\u0131z\u0131n dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 ve esnekli\u011fini art\u0131r\u0131r.\n  <\/div>\n<h2>Temel Kavramlar: ConfigMap ve Ortam De\u011fi\u015fkenleri Ne Anlama Geliyor?<\/h2>\n<p>Kubernetes&#8217;te ConfigMap&#8217;lerin ve ortam de\u011fi\u015fkenlerinin g\u00fcc\u00fcn\u00fc tam olarak anlamak i\u00e7in, \u00f6ncelikle bu iki temel kavram\u0131n ne anlama geldi\u011fini ve Kubernetes ba\u011flam\u0131nda nas\u0131l bir araya geldiklerini iyi kavramam\u0131z gerekiyor. Bu b\u00f6l\u00fcmde, konuya tamamen yabanc\u0131 olan okuyucular\u0131m\u0131z i\u00e7in her iki kavram\u0131 da derinlemesine inceleyece\u011fiz.<\/p>\n<h3>ConfigMap Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Kubernetes, da\u011f\u0131t\u0131k sistemler i\u00e7in bir orkestrasyon platformu olman\u0131n \u00f6tesinde, uygulama ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn bir\u00e7ok y\u00f6n\u00fcn\u00fc y\u00f6netmek i\u00e7in \u00e7e\u015fitli nesneler sunar. ConfigMap, bu nesnelerden biridir ve ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, yap\u0131land\u0131rma haritas\u0131 anlam\u0131na gelir. Basit\u00e7e ifade etmek gerekirse, ConfigMap&#8217;ler hassas olmayan yap\u0131land\u0131rma verilerini anahtar-de\u011fer (key-value) \u00e7iftleri \u015feklinde depolamak i\u00e7in kullan\u0131lan bir API nesnesidir. Bu veriler, tek tek \u00f6zellikler, \u00e7ok sat\u0131rl\u0131 metinler veya hatta t\u00fcm yap\u0131land\u0131rma dosyalar\u0131 olabilir. Temel amac\u0131, uygulama kodunuzu ve konteyner imajlar\u0131n\u0131z\u0131 yap\u0131land\u0131rma verilerinden ay\u0131rmakt\u0131r.<\/p>\n<p>Bu ayr\u0131m, \u00f6zellikle mikroservis mimarilerinde ve bulut yerel uygulamalarda hayati \u00f6neme sahiptir. Bir uygulaman\u0131n imaj\u0131, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda de\u011fi\u015fmeden kalmal\u0131d\u0131r. E\u011fer yap\u0131land\u0131rma imaj\u0131n i\u00e7ine g\u00f6m\u00fclseydi, her ortam i\u00e7in farkl\u0131 bir imaj olu\u015fturmak zorunda kal\u0131rd\u0131k ki bu da s\u00fcrd\u00fcr\u00fclebilir bir yakla\u015f\u0131m olmazd\u0131. ConfigMap&#8217;ler sayesinde, ayn\u0131 konteyner imaj\u0131n\u0131 farkl\u0131 ConfigMap&#8217;lerle farkl\u0131 \u015fekillerde yap\u0131land\u0131rabiliriz. \u00d6rne\u011fin, bir geli\u015ftirme ortam\u0131nda \u00e7al\u0131\u015fan bir Pod i\u00e7in test veritaban\u0131 adresini i\u00e7eren bir ConfigMap kullanabilirken, \u00fcretim ortam\u0131ndaki ayn\u0131 Pod i\u00e7in \u00fcretim veritaban\u0131 adresini i\u00e7eren ba\u015fka bir ConfigMap kullanabiliriz. Bu durum, CI\/CD boru hatlar\u0131n\u0131 basitle\u015ftirir, \u00e7\u00fcnk\u00fc imaj olu\u015fturma s\u00fcreci yap\u0131land\u0131rmadan ba\u011f\u0131ms\u0131z hale gelir. ConfigMap&#8217;ler, genellikle YAML format\u0131nda tan\u0131mlan\u0131r ve <code>kubectl<\/code> komutlar\u0131 ile Kubernetes k\u00fcmesine uygulan\u0131r.<\/p>\n<h3>Ortam De\u011fi\u015fkenleri Neden \u00d6nemlidir?<\/h3>\n<p>Ortam de\u011fi\u015fkenleri (Environment Variables), bir i\u015fletim sistemi veya \u00e7al\u0131\u015fan bir s\u00fcre\u00e7 i\u00e7in yap\u0131land\u0131rma ayarlar\u0131n\u0131 tutman\u0131n en eski ve en yayg\u0131n y\u00f6ntemlerinden biridir. Bir uygulaman\u0131n ba\u015flat\u0131lmas\u0131ndan \u00f6nce belirlenen bu de\u011fi\u015fkenler, uygulaman\u0131n davran\u0131\u015f\u0131n\u0131 d\u0131\u015far\u0131dan kontrol etmesine olanak tan\u0131r. Modern konteyner tabanl\u0131 uygulamalar, \u00f6zellikle 12 Fakt\u00f6r Uygulama prensiplerini takip edenler, yap\u0131land\u0131rmay\u0131 ortama \u00f6zg\u00fc de\u011fi\u015fkenler arac\u0131l\u0131\u011f\u0131yla almay\u0131 \u015fiddetle tavsiye eder. Bu yakla\u015f\u0131m, uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortamdan tamamen ba\u011f\u0131ms\u0131z kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>\u00d6rne\u011fin, bir Node.js veya Python uygulamas\u0131n\u0131n bir veritaban\u0131na ba\u011flanmas\u0131 gerekti\u011finde, veritaban\u0131 adresi, kullan\u0131c\u0131 ad\u0131 ve \u015fifre gibi bilgileri ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla alabilir. Uygulama kodu, <code>process.env.DATABASE_URL<\/code> gibi komutlarla bu de\u011fi\u015fkenlere eri\u015fir. Bu y\u00f6ntem, hassas olmayan verilerin (\u00f6rn: veritaban\u0131 URL&#8217;si) kodda saklanmamas\u0131n\u0131 sa\u011flar ve farkl\u0131 ortamlar i\u00e7in ayn\u0131 kodu kullanarak farkl\u0131 veritabanlar\u0131na ba\u011flanma esnekli\u011fi sunar. Ayr\u0131ca, ortam de\u011fi\u015fkenleri genellikle \u015fifre veya API anahtar\u0131 gibi hassas bilgileri aktarmak i\u00e7in de kullan\u0131l\u0131r, ancak Kubernetes&#8217;te bunun i\u00e7in daha g\u00fcvenli olan Secret nesneleri tercih edilmelidir. Ortam de\u011fi\u015fkenleri, uygulaman\u0131z\u0131n da\u011f\u0131t\u0131ld\u0131\u011f\u0131 her yerde sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi i\u00e7in kritik bir yap\u0131land\u0131rma mekanizmas\u0131d\u0131r. Bu ba\u011flamda, Kubernetes&#8217;teki Pod&#8217;lar\u0131n konteynerlerine d\u0131\u015far\u0131dan ortam de\u011fi\u015fkeni sa\u011flamak, uygulaman\u0131n dinamik yap\u0131land\u0131rmas\u0131 i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir. ConfigMap&#8217;ler ise bu ortam de\u011fi\u015fkenlerini merkezi ve y\u00f6netilebilir bir \u015fekilde Pod&#8217;lara iletmek i\u00e7in m\u00fckemmel bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h3>Pod&#8217;lar ve Yap\u0131land\u0131rma \u0130li\u015fkisi: Neden ConfigMap Kullanmal\u0131y\u0131z?<\/h3>\n<p>Kubernetes&#8217;te temel da\u011f\u0131t\u0131m birimi olan Pod&#8217;lar, bir veya daha fazla konteyneri bar\u0131nd\u0131r\u0131r ve bu konteynerlerin a\u011f, depolama ve yap\u0131land\u0131rma gibi kaynaklar\u0131 payla\u015fmas\u0131n\u0131 sa\u011flar. Pod&#8217;lar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca do\u011fru bir \u015fekilde \u00e7al\u0131\u015fabilmeleri i\u00e7in, genellikle baz\u0131 yap\u0131land\u0131rma bilgilerine ihtiya\u00e7 duyarlar. Bu bilgiler, bir Pod&#8217;u olu\u015fturan konteynerlerin ortam de\u011fi\u015fkenleri olarak, volume mount olarak veya komut arg\u00fcmanlar\u0131 olarak sa\u011flanabilir. Peki, neden do\u011frudan Pod tan\u0131m\u0131nda ortam de\u011fi\u015fkenlerini belirtmek yerine ConfigMap kullanmal\u0131y\u0131z?<\/p>\n<p>Do\u011frudan Pod tan\u0131m\u0131nda ortam de\u011fi\u015fkenlerini belirtmek, k\u00fc\u00e7\u00fck ve basit senaryolar i\u00e7in uygun olabilir. Ancak, uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, birden fazla Pod ayn\u0131 yap\u0131land\u0131rmay\u0131 kulland\u0131\u011f\u0131nda veya ayn\u0131 Pod&#8217;un farkl\u0131 ortamlar i\u00e7in farkl\u0131 yap\u0131land\u0131rmalara sahip olmas\u0131 gerekti\u011finde, bu yakla\u015f\u0131m h\u0131zla y\u00f6netilemez hale gelir. Her Pod tan\u0131m\u0131nda yap\u0131land\u0131rma detaylar\u0131n\u0131 tekrar etmek, YAML dosyalar\u0131n\u0131n \u015fi\u015fmesine, hatalara ve yap\u0131land\u0131rma de\u011fi\u015fikliklerinin zorla\u015fmas\u0131na neden olur. ConfigMap&#8217;ler ise bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Yap\u0131land\u0131rma verilerini Pod&#8217;dan ayr\u0131 bir Kubernetes nesnesi olarak tan\u0131mlayarak, merkezi bir y\u00f6netim noktas\u0131 olu\u015ftururuz. Bu, ayn\u0131 ConfigMap&#8217;in birden fazla Pod taraf\u0131ndan payla\u015f\u0131labilmesini, yap\u0131land\u0131rma de\u011fi\u015fikliklerinin tek bir yerden yap\u0131labilmesini ve Pod tan\u0131mlamalar\u0131n\u0131n daha temiz ve okunabilir kalmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, hassas olmayan verileri ConfigMap&#8217;ler arac\u0131l\u0131\u011f\u0131yla aktarmak, g\u00fcvenlik ve y\u00f6netilebilirlik a\u00e7\u0131s\u0131ndan da \u00f6nemli avantajlar sunar. Uygulamalar\u0131n\u0131z\u0131n esnekli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131rmak i\u00e7in ConfigMap kullanarak Pod&#8217;lara ortam de\u011fi\u015fkeni sa\u011flamak, Kubernetes&#8217;teki en iyi uygulamalardan biridir.<\/p>\n<h2>Ad\u0131m Ad\u0131m Uygulama: ConfigMap Olu\u015fturma ve Pod&#8217;a Atama<\/h2>\n<p>Art\u0131k ConfigMap ve ortam de\u011fi\u015fkenlerinin temel mant\u0131\u011f\u0131n\u0131 anlad\u0131\u011f\u0131m\u0131za g\u00f6re, bu bilgileri pratik bir senaryo \u00fczerinde uygulaman\u0131n zaman\u0131 geldi. Bu b\u00f6l\u00fcmde, basit bir web uygulamas\u0131 i\u00e7in ConfigMap olu\u015fturma ve bu ConfigMap&#8217;ten gelen de\u011ferleri bir Pod&#8217;daki konteynerin ortam de\u011fi\u015fkenleri olarak nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6rece\u011fiz. Bu \u00f6rnek, Kubernetes&#8217;te yap\u0131land\u0131rma y\u00f6netiminin temel ta\u015flar\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Senaryo: Basit Bir Web Uygulamas\u0131 Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Hayal edin ki, temel bir Node.js veya Python tabanl\u0131 web uygulaman\u0131z var. Bu uygulama, kullan\u0131c\u0131 aray\u00fcz\u00fcnde &#8220;Ho\u015f geldiniz!&#8221; mesaj\u0131 g\u00f6stermenin yan\u0131 s\u0131ra, bir arka u\u00e7 servisine (\u00f6rne\u011fin bir veritaban\u0131 veya API) ba\u011flanmak i\u00e7in bir URL&#8217;ye ve bir de yap\u0131land\u0131rma ba\u015fl\u0131\u011f\u0131na (\u00f6rne\u011fin &#8220;Uygulama Ad\u0131&#8221;) ihtiya\u00e7 duyuyor. Bu bilgileri do\u011frudan uygulama koduna yazmak yerine, onlar\u0131 d\u0131\u015far\u0131dan ConfigMap arac\u0131l\u0131\u011f\u0131yla sa\u011flamak istiyoruz. \u0130\u015fte bu senaryo i\u00e7in ad\u0131mlar\u0131m\u0131z\u0131 izleyelim.<\/p>\n<p>\u0130lk olarak, uygulamam\u0131z\u0131n bekledi\u011fi baz\u0131 yap\u0131land\u0131rma de\u011ferlerini belirleyelim:<\/p>\n<ul>\n<li><code>APP_TITLE<\/code>: Web uygulamas\u0131n\u0131n ba\u015fl\u0131\u011f\u0131 (\u00f6rn: &#8220;Benim Harika Uygulamam&#8221;)<\/li>\n<li><code>API_BASE_URL<\/code>: Arka u\u00e7 API&#8217;sinin temel URL&#8217;si (\u00f6rn: &#8220;http:\/\/api-service.my-namespace.svc.cluster.local:8080\/v1&#8221;)<\/li>\n<\/ul>\n<p>Bu de\u011ferler, farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in de\u011fi\u015fiklik g\u00f6sterebilir. \u015eimdi bu de\u011ferleri bir ConfigMap i\u00e7inde saklayal\u0131m.<\/p>\n<h3>ConfigMap Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Kubernetes&#8217;te ConfigMap olu\u015fturman\u0131n iki ana yolu vard\u0131r: <code>kubectl create configmap<\/code> komutunu kullanmak veya bir YAML dosyas\u0131 tan\u0131mlay\u0131p <code>kubectl apply -f<\/code> ile uygulamak. B\u00fcy\u00fck ve karma\u015f\u0131k yap\u0131land\u0131rmalar i\u00e7in YAML dosyas\u0131 kullanmak daha s\u00fcrd\u00fcr\u00fclebilir ve versiyon kontrol\u00fcne uygun bir yakla\u015f\u0131md\u0131r. Biz de bu yakla\u015f\u0131m\u0131 benimseyece\u011fiz.<\/p>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fe sahip <code>app-configmap.yaml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code>\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: my-app-config\ndata:\n  APP_TITLE: \"Kubernetes Web Uygulamam\"\n  API_BASE_URL: \"http:\/\/my-api-service:8080\/api\/v1\"\n  # Daha fazla yap\u0131land\u0131rma eklenebilir\n  LOG_LEVEL: \"INFO\"\n  FEATURE_TOGGLE_X: \"true\"\n  # \u00c7ok sat\u0131rl\u0131 bir yap\u0131land\u0131rma dosyas\u0131 da eklenebilir\n  nginx.conf: |\n    server {\n      listen 80;\n      location \/ {\n        root \/usr\/share\/nginx\/html;\n        index index.html index.htm;\n      }\n    }\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu YAML dosyas\u0131, <code>my-app-config<\/code> ad\u0131nda bir ConfigMap tan\u0131mlar. <code>data<\/code> b\u00f6l\u00fcm\u00fc alt\u0131nda, uygulamam\u0131z\u0131n ihtiya\u00e7 duydu\u011fu anahtar-de\u011fer \u00e7iftlerini g\u00f6r\u00fcyoruz. Ayr\u0131ca, <code>nginx.conf<\/code> \u00f6rne\u011finde oldu\u011fu gibi, \u00e7ok sat\u0131rl\u0131 verileri de ConfigMap i\u00e7inde saklayabiliriz. Bu, genellikle t\u00fcm yap\u0131land\u0131rma dosyalar\u0131n\u0131 (\u00f6rne\u011fin bir Nginx veya Redis yap\u0131land\u0131rma dosyas\u0131) Pod'a bir volume olarak ba\u011flamak istedi\u011fimizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>\u015eimdi bu ConfigMap'i Kubernetes k\u00fcmemize uygulayal\u0131m:<\/p>\n<pre><code>\nkubectl apply -f app-configmap.yaml\n  <\/pre>\n<p><\/code><\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, ConfigMap'in ba\u015far\u0131yla olu\u015fturuldu\u011funu do\u011frulamak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabiliriz:<\/p>\n<pre><code>\nkubectl get configmaps my-app-config -o yaml\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, olu\u015fturdu\u011fumuz ConfigMap'in tam YAML tan\u0131m\u0131n\u0131 g\u00f6sterecek ve verilerin do\u011fru bir \u015fekilde depoland\u0131\u011f\u0131n\u0131 teyit edecektir.<\/p>\n<h3>Pod Tan\u0131mlamas\u0131 ve Ortam De\u011fi\u015fkenleri ile ConfigMap Kullan\u0131m\u0131<\/h3>\n<p>ConfigMap'imiz haz\u0131r oldu\u011funa g\u00f6re, \u015fimdi bir Pod tan\u0131mlamas\u0131 olu\u015fturup bu ConfigMap'teki de\u011ferleri Pod i\u00e7indeki konteynerimize ortam de\u011fi\u015fkenleri olarak nas\u0131l atayaca\u011f\u0131m\u0131z\u0131 g\u00f6relim. <code>app-pod.yaml<\/code> ad\u0131nda yeni bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code>\napiVersion: v1\nkind: Pod\nmetadata:\n  name: my-web-app-pod\nspec:\n  containers:\n  - name: web-app-container\n    image: nginx:latest # \u00d6rnek olmas\u0131 i\u00e7in nginx kullan\u0131yoruz, kendi uygulaman\u0131z\u0131n imaj\u0131n\u0131 kullanabilirsiniz\n    ports:\n    - containerPort: 80\n    env:\n    - name: APP_TITLE # Ortam de\u011fi\u015fkeninin ad\u0131\n      valueFrom:\n        configMapKeyRef:\n          name: my-app-config # Kullan\u0131lacak ConfigMap'in ad\u0131\n          key: APP_TITLE # ConfigMap'teki anahtar\u0131n ad\u0131\n    - name: API_URL # Ortam de\u011fi\u015fkeninin ad\u0131\n      valueFrom:\n        configMapKeyRef:\n          name: my-app-config\n          key: API_BASE_URL\n    - name: APPLICATION_LOG_LEVEL\n      valueFrom:\n        configMapKeyRef:\n          name: my-app-config\n          key: LOG_LEVEL\n    envFrom: # T\u00fcm ConfigMap anahtarlar\u0131n\u0131 ortam de\u011fi\u015fkeni olarak atamak i\u00e7in\n    - configMapRef:\n        name: my-app-config\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu Pod tan\u0131m\u0131nda dikkat etmemiz gereken birka\u00e7 \u00f6nemli nokta var:<\/p>\n<ul>\n<li><code>env<\/code> b\u00f6l\u00fcm\u00fc: Burada, bireysel ortam de\u011fi\u015fkenlerini tan\u0131ml\u0131yoruz. <code>valueFrom<\/code> alan\u0131, de\u011ferin do\u011frudan sabit bir de\u011fer yerine ba\u015fka bir kaynaktan (bu durumda bir ConfigMap anahtar\u0131ndan) al\u0131naca\u011f\u0131n\u0131 belirtir. <code>configMapKeyRef<\/code> alt\u0131nda, hangi ConfigMap'ten ve o ConfigMap'in hangi anahtar\u0131ndan de\u011ferin al\u0131naca\u011f\u0131n\u0131 belirtiyoruz. Bu y\u00f6ntem, ConfigMap'teki belirli anahtarlar\u0131 se\u00e7ici olarak Pod'a aktarmak istedi\u011fimizde kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<li><code>envFrom<\/code> b\u00f6l\u00fcm\u00fc: Bu alan, bir ConfigMap'teki t\u00fcm anahtar-de\u011fer \u00e7iftlerini, anahtar isimlerini koruyarak do\u011frudan Pod'un ortam de\u011fi\u015fkenleri olarak atar. \u00d6rne\u011fin, <code>my-app-config<\/code> ConfigMap'inde <code>LOG_LEVEL<\/code> ve <code>FEATURE_TOGGLE_X<\/code> gibi anahtarlar varsa, <code>envFrom<\/code> sayesinde bunlar otomatik olarak Pod'da <code>LOG_LEVEL<\/code> ve <code>FEATURE_TOGGLE_X<\/code> adlar\u0131yla ortam de\u011fi\u015fkenleri olarak ayarlan\u0131r. Bu, \u00f6zellikle \u00e7ok say\u0131da yap\u0131land\u0131rma de\u011fi\u015fkeni oldu\u011funda Pod tan\u0131mlamas\u0131n\u0131 daha k\u0131sa ve okunabilir hale getirir. Ancak, bu durumda \u00e7ak\u0131\u015fma riski olabilece\u011fini unutmamak \u00f6nemlidir (ilerleyen b\u00f6l\u00fcmlerde de\u011finece\u011fiz).<\/li>\n<\/ul>\n<p>\u015eimdi Pod'umuzu olu\u015ftural\u0131m:<\/p>\n<pre><code>\nkubectl apply -f app-pod.yaml\n  <\/pre>\n<p><\/code><\/p>\n<h3>Do\u011frulama: Pod \u0130\u00e7inde De\u011fi\u015fkenleri Kontrol Etme<\/h3>\n<p>Pod'umuzun ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve ortam de\u011fi\u015fkenlerinin do\u011fru bir \u015fekilde ayarland\u0131\u011f\u0131ndan emin olmak i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 uygulayabiliriz:<\/p>\n<p>\u00d6ncelikle Pod'umuzun durumunu kontrol edelim:<\/p>\n<pre><code>\nkubectl get pods my-web-app-pod\n  <\/pre>\n<p><\/code><\/p>\n<p>E\u011fer Pod <code>Running<\/code> durumundaysa, i\u00e7ine ba\u011flan\u0131p ortam de\u011fi\u015fkenlerini kontrol edebiliriz:<\/p>\n<pre><code>\nkubectl exec -it my-web-app-pod -- env | grep -E \"APP_TITLE|API_URL|APPLICATION_LOG_LEVEL|FEATURE_TOGGLE_X\"\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Pod i\u00e7indeki <code>env<\/code> komutunun \u00e7\u0131kt\u0131s\u0131n\u0131 filtreleyerek ConfigMap'ten bekledi\u011fimiz ortam de\u011fi\u015fkenlerini bize g\u00f6sterecektir. \u00c7\u0131kt\u0131da \u015funa benzer bir sonu\u00e7 g\u00f6rmelisiniz:<\/p>\n<pre><code>\nAPP_TITLE=Kubernetes Web Uygulamam\nAPI_URL=http:\/\/my-api-service:8080\/api\/v1\nAPPLICATION_LOG_LEVEL=INFO\nFEATURE_TOGGLE_X=true\n  <\/pre>\n<p><\/code><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, ConfigMap'ten gelen de\u011ferler ba\u015far\u0131yla Pod'un ortam de\u011fi\u015fkenlerine aktar\u0131lm\u0131\u015f durumda. Bu, uygulaman\u0131z\u0131n bu de\u011ferleri kendi i\u00e7 mant\u0131\u011f\u0131nda kullanabilece\u011fi anlam\u0131na gelir. Bu basit ama g\u00fc\u00e7l\u00fc mekanizma sayesinde, uygulama yap\u0131land\u0131rman\u0131z\u0131 Kubernetes ortam\u0131nda merkezi ve dinamik bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<h2>Geli\u015fmi\u015f Yap\u0131land\u0131rma Teknikleri: Daha Karma\u015f\u0131k Senaryolar \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h2>\n<p>Yukar\u0131daki temel uygulama ad\u0131mlar\u0131, ConfigMap'lerin ve ortam de\u011fi\u015fkenlerinin g\u00fcc\u00fcn\u00fc anlamak i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ancak ger\u00e7ek d\u00fcnya senaryolar\u0131 genellikle daha karma\u015f\u0131k yap\u0131land\u0131rma ihtiya\u00e7lar\u0131n\u0131 beraberinde getirir. Bu b\u00f6l\u00fcmde, daha geli\u015fmi\u015f tekniklere odaklanarak, Kubernetes ortam\u0131nda yap\u0131land\u0131rma y\u00f6netimini bir \u00fcst seviyeye ta\u015f\u0131yacak ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131 sunaca\u011f\u0131z.<\/p>\n<h3>Birden Fazla ConfigMap Kullan\u0131m\u0131 ve \u00d6nceliklendirme<\/h3>\n<p>B\u00fcy\u00fck mikroservis ortamlar\u0131nda, bir uygulama birden fazla ConfigMap'ten yap\u0131land\u0131rma alabilir. \u00d6rne\u011fin, bir genel (global) ConfigMap t\u00fcm uygulamalar i\u00e7in ortak ayarlar\u0131 tutarken, belirli bir servis i\u00e7in \u00f6zel ayarlar ayr\u0131 bir ConfigMap'te saklanabilir. Bir Pod'a birden fazla ConfigMap'ten ortam de\u011fi\u015fkeni atand\u0131\u011f\u0131nda veya ayn\u0131 anahtar farkl\u0131 ConfigMap'lerde tan\u0131mland\u0131\u011f\u0131nda, Kubernetes'in bir \u00f6nceliklendirme mekanizmas\u0131 vard\u0131r. E\u011fer ayn\u0131 isimli bir ortam de\u011fi\u015fkeni hem <code>env<\/code> blo\u011funda do\u011frudan tan\u0131mlan\u0131r hem de <code>envFrom<\/code> ile bir ConfigMap'ten gelirse, <code>env<\/code> blo\u011fundaki tan\u0131mlama \u00f6ncelikli olacakt\u0131r. Benzer \u015fekilde, e\u011fer birden fazla <code>envFrom<\/code> blo\u011fu ayn\u0131 isimde bir ortam de\u011fi\u015fkeni sa\u011flamaya \u00e7al\u0131\u015f\u0131rsa, Kubernetes belirsiz bir davran\u0131\u015f sergileyebilir veya ilk tan\u0131mlanan\u0131 kullanabilir. Bu nedenle, ortam de\u011fi\u015fkeni isimlerinde \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemek i\u00e7in dikkatli bir isimlendirme stratejisi izlemek ve genellikle \u00f6zel yap\u0131land\u0131rmalar\u0131 do\u011frudan <code>env<\/code> blo\u011funda <code>valueFrom<\/code> ile belirtmek, genel yap\u0131land\u0131rmalar\u0131 ise <code>envFrom<\/code> ile almak en iyi uygulamad\u0131r. Bu, \u00f6zellikle ortak k\u00fct\u00fcphaneler veya temel altyap\u0131 hizmetleri taraf\u0131ndan kullan\u0131lan yap\u0131land\u0131rmalar\u0131 y\u00f6netirken esneklik sa\u011flar.<\/p>\n<h3>T\u00fcm ConfigMap Verilerini Ortam De\u011fi\u015fkeni Olarak Atama: <code>envFrom<\/code><\/h3>\n<p>Daha \u00f6nce de bahsetti\u011fimiz gibi, <code>envFrom<\/code> \u00f6zelli\u011fi, bir ConfigMap'teki t\u00fcm anahtar-de\u011fer \u00e7iftlerini Pod'daki konteynerin ortam de\u011fi\u015fkenleri olarak otomatik olarak eklemenizi sa\u011flar. Bu, \u00e7ok say\u0131da yap\u0131land\u0131rma de\u011fi\u015fkeni olan durumlarda Pod tan\u0131m\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftirir. \u00d6rne\u011fin, bir ConfigMap'iniz varsa:<\/p>\n<pre><code>\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: app-feature-flags\ndata:\n  FEATURE_A_ENABLED: \"true\"\n  FEATURE_B_ENABLED: \"false\"\n  FEATURE_C_MESSAGE: \"Merhaba!\"\n  <\/pre>\n<p><\/code><\/p>\n<p>Pod'unuzda bunu \u015fu \u015fekilde kullanabilirsiniz:<\/p>\n<pre><code>\n...\nspec:\n  containers:\n  - name: my-container\n    image: my-app:latest\n    envFrom:\n    - configMapRef:\n        name: app-feature-flags\n...\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu Pod \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, <code>FEATURE_A_ENABLED<\/code>, <code>FEATURE_B_ENABLED<\/code> ve <code>FEATURE_C_MESSAGE<\/code> ortam de\u011fi\u015fkenleri otomatik olarak konteynerde mevcut olacakt\u0131r. <code>envFrom<\/code> kullan\u0131rken dikkatli olmak gerekir; ConfigMap'teki anahtar isimleri do\u011frudan ortam de\u011fi\u015fkeni isimleri olarak kullan\u0131laca\u011f\u0131ndan, ge\u00e7erli ortam de\u011fi\u015fkeni isim kurallar\u0131na uygun olduklar\u0131ndan emin olmal\u0131s\u0131n\u0131z (\u00f6rne\u011fin, b\u00fcy\u00fck harf, say\u0131 ve alt \u00e7izgi kullan\u0131m\u0131). Ayr\u0131ca, ConfigMap'te \u00e7ok say\u0131da gereksiz anahtar varsa, bunlar\u0131n hepsinin ortam de\u011fi\u015fkeni olarak eklenmesi beklenmeyen davran\u0131\u015flara veya Pod ba\u015flatma s\u00fcrelerinde hafif bir art\u0131\u015fa neden olabilir.<\/p>\n<h3>S\u0131rlar\u0131n Y\u00f6netimi: ConfigMap vs. Secret<\/h3>\n<p>ConfigMap'ler hassas olmayan yap\u0131land\u0131rma verileri i\u00e7in m\u00fckemmeldir. Ancak veritaban\u0131 \u015fifreleri, API anahtarlar\u0131, \u00f6zel anahtarlar gibi hassas bilgileri asla ConfigMap i\u00e7inde saklamamal\u0131s\u0131n\u0131z. Bu t\u00fcr veriler i\u00e7in Kubernetes Secret nesneleri kullan\u0131lmal\u0131d\u0131r. Secret'lar, ConfigMap'lere benzer \u015fekilde \u00e7al\u0131\u015f\u0131r ancak verileri Base64 ile encode eder (\u015fifrelemez!) ve Kubernetes API sunucusunda, etcd'de ve Pod'lara aktar\u0131l\u0131rken daha g\u00fcvenli bir \u015fekilde ele al\u0131n\u0131r. Secret'lar\u0131 da ortam de\u011fi\u015fkeni olarak veya volume mount olarak Pod'lara aktarabilirsiniz, ayn\u0131 ConfigMap'lerde oldu\u011fu gibi. G\u00fcvenlik en y\u00fcksek \u00f6ncelik oldu\u011fundan, her zaman hassas olmayan veriler i\u00e7in ConfigMap, hassas veriler i\u00e7in Secret kullanma ayr\u0131m\u0131na dikkat etmek \u00f6nemlidir. Bu ayr\u0131m, g\u00fcvenlik duru\u015funuzu \u00f6nemli \u00f6l\u00e7\u00fcde g\u00fc\u00e7lendirir.<\/p>\n<pre><code>\n# ConfigMap vs Secret ayr\u0131m\u0131 i\u00e7in \u00f6rnek bir Pod tan\u0131m\u0131\napiVersion: v1\nkind: Pod\nmetadata:\n  name: secure-app-pod\nspec:\n  containers:\n  - name: app-with-secrets\n    image: my-secure-app:latest\n    env:\n    - name: DB_HOST\n      valueFrom:\n        configMapKeyRef:\n          name: app-db-config\n          key: host\n    - name: DB_USERNAME\n      valueFrom:\n        secretKeyRef: # Secret'tan gelen de\u011fer\n          name: app-db-secret\n          key: username\n    - name: DB_PASSWORD\n      valueFrom:\n        secretKeyRef: # Secret'tan gelen de\u011fer\n          name: app-db-secret\n          key: password\n  <\/pre>\n<p><\/code><\/p>\n<h3>Yap\u0131land\u0131rma De\u011fi\u015fikliklerini G\u00fcncelleme<\/h3>\n<p>ConfigMap'i de\u011fi\u015ftirdi\u011finizde, ilgili Pod'lar\u0131n bu de\u011fi\u015fiklikleri otomatik olarak almad\u0131\u011f\u0131n\u0131 bilmek \u00f6nemlidir. Ortam de\u011fi\u015fkenleri olarak aktar\u0131lan ConfigMap de\u011ferleri, Pod olu\u015fturuldu\u011fu anda okunur ve Pod'un ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca de\u011fi\u015fmez. E\u011fer bir ConfigMap'i g\u00fcncellerseniz ve Pod'lar\u0131n\u0131z\u0131n yeni de\u011ferleri almas\u0131n\u0131 istiyorsan\u0131z, Pod'lar\u0131 yeniden ba\u015flatman\u0131z gerekir. Genellikle bu, bir Deployment veya StatefulSet gibi bir \u00fcst d\u00fczey denetleyiciyi tetikleyerek ger\u00e7ekle\u015ftirilir. \u00d6rne\u011fin, bir Deployment kullan\u0131yorsan\u0131z, Deployment'\u0131n Pod \u015fablonundaki (Pod template) bir de\u011fi\u015fikli\u011fi zorlayarak (\u00f6rne\u011fin, bir annotation ekleyerek veya bir konteyner imaj\u0131n\u0131 g\u00fcncelleyerek), Kubernetes'in eski Pod'lar\u0131 sonland\u0131r\u0131p yeni yap\u0131land\u0131rmayla yeni Pod'lar ba\u015flatmas\u0131n\u0131 sa\u011flayabilirsiniz. Otomatik yenileme mekanizmalar\u0131 i\u00e7in baz\u0131 \u00e7\u00f6z\u00fcmler (\u00f6rne\u011fin, ConfigMap'lerdeki de\u011fi\u015fiklikleri izleyen ve Deployment'lar\u0131 tetikleyen operat\u00f6rler) mevcut olsa da, standart Kubernetes davran\u0131\u015f\u0131n\u0131n bu olmad\u0131\u011f\u0131n\u0131 unutmamak gerekir.<\/p>\n<h3>Vaka Analizi: Mikroservis Ortam\u0131nda Dinamik Yap\u0131land\u0131rma<\/h3>\n<p>B\u00fcy\u00fck \u00f6l\u00e7ekli bir e-ticaret platformunuz oldu\u011funu d\u00fc\u015f\u00fcn\u00fcn. Bu platform, \u00fcr\u00fcn katalo\u011fu, sipari\u015f y\u00f6netimi, kullan\u0131c\u0131 profilleri ve \u00f6deme i\u015fleme gibi bir\u00e7ok mikroservisten olu\u015fuyor. Her mikroservisin kendi \u00f6zel ayarlar\u0131 (\u00f6rne\u011fin, ba\u011fl\u0131 oldu\u011fu veritaban\u0131n\u0131n \u015femas\u0131, cache s\u00fcreleri, loglama seviyeleri) ve ayn\u0131 zamanda t\u00fcm platform genelinde ge\u00e7erli olan ortak ayarlar\u0131 (\u00f6rne\u011fin, API Gateway adresi, bulut depolama kova ad\u0131) vard\u0131r. ConfigMap'ler, bu senaryoda hayati bir rol oynar.<\/p>\n<p>Ortak ayarlar i\u00e7in <code>platform-global-config<\/code> ad\u0131nda bir ConfigMap olu\u015fturulur. Her mikroservis Pod'u bu ConfigMap'i <code>envFrom<\/code> ile al\u0131r. B\u00f6ylece, API Gateway URL'si de\u011fi\u015fti\u011finde, sadece <code>platform-global-config<\/code> g\u00fcncellenir ve ilgili Deployment'lar tetiklenerek t\u00fcm servisler yeni URL'yi al\u0131r. Her mikroservisin kendi \u00f6zel ayarlar\u0131 (<code>product-service-config<\/code>, <code>order-service-config<\/code> vb.) ayr\u0131 ConfigMap'lerde tutulur ve ilgili Pod'lar bunlar\u0131 <code>env<\/code> veya <code>envFrom<\/code> ile kullan\u0131r. \u00d6rne\u011fin, \u00fcr\u00fcn servisinin resimlerini depolad\u0131\u011f\u0131 S3 kovas\u0131n\u0131n ad\u0131 <code>product-service-config<\/code> i\u00e7inde <code>S3_BUCKET_NAME_PRODUCTS<\/code> olarak saklanabilir. Bu yap\u0131land\u0131rma yakla\u015f\u0131m\u0131, her servisin kendi ba\u011f\u0131ms\u0131z ya\u015fam d\u00f6ng\u00fcs\u00fcne sahip olmas\u0131na ve yap\u0131land\u0131rma de\u011fi\u015fikliklerinin izole bir \u015fekilde y\u00f6netilmesine olanak tan\u0131r. Ayr\u0131ca, yeni bir \u00f6zellik (feature flag) kullan\u0131ma sunuldu\u011funda, ilgili ConfigMap'e <code>FEATURE_NEW_RECOMMENDATIONS_ENABLED: \"true\"<\/code> gibi bir anahtar eklenerek, uygulaman\u0131n dinamik olarak yeni \u00f6zelli\u011fi etkinle\u015ftirmesi sa\u011flanabilir. Bu esneklik, CI\/CD s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r ve operasyonel karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: Karma\u015f\u0131k yap\u0131land\u0131rma hiyerar\u015fileri i\u00e7in Kustomize veya Helm gibi ara\u00e7lar\u0131 kullanarak ConfigMap ve Secret'lar\u0131n\u0131z\u0131 daha y\u00f6netilebilir hale getirebilirsiniz. Bu ara\u00e7lar, ortamlar aras\u0131 farkl\u0131l\u0131klar\u0131 \u015fablonlama ve yamalama (patching) yoluyla ele alman\u0131za yard\u0131mc\u0131 olur.\n  <\/div>\n<h2>En \u0130yi Uygulamalar ve G\u00fcvenlik \u0130pu\u00e7lar\u0131: Hatalardan Ka\u00e7\u0131nmak \u0130\u00e7in Neler Yapmal\u0131?<\/h2>\n<p>ConfigMap'ler, Kubernetes'te yap\u0131land\u0131rma y\u00f6netiminin temel ta\u015flar\u0131ndan biri olsa da, yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda potansiyel g\u00fcvenlik riskleri veya operasyonel zorluklar yaratabilir. Bu b\u00f6l\u00fcmde, ConfigMap'leri kullan\u0131rken dikkat etmeniz gereken en iyi uygulamalar\u0131 ve g\u00fcvenlik ipu\u00e7lar\u0131n\u0131 ele alaca\u011f\u0131z. Bu sayede, uygulamalar\u0131n\u0131z\u0131n hem g\u00fcvenli hem de s\u00fcrd\u00fcr\u00fclebilir bir \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<h3>Versiyonlama ve GitOps Entegrasyonu<\/h3>\n<p>Kubernetes kaynaklar\u0131n\u0131z, t\u0131pk\u0131 uygulama kodunuz gibi, versiyon kontrol sistemlerinde (\u00f6rne\u011fin Git) saklanmal\u0131d\u0131r. Bu prensip, \"Altyap\u0131 Kod Olarak\" (Infrastructure as Code - IaC) ve GitOps yakla\u015f\u0131m\u0131n\u0131n temelini olu\u015fturur. ConfigMap YAML dosyalar\u0131n\u0131z\u0131 Git deposunda tutmak, de\u011fi\u015fiklik ge\u00e7mi\u015fini izlemenizi, geri alma (rollback) i\u015flemlerini kolayla\u015ft\u0131rman\u0131z\u0131 ve de\u011fi\u015fiklikleri kod incelemesi s\u00fcre\u00e7lerine dahil etmenizi sa\u011flar. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011fi, bir Pull Request (PR) arac\u0131l\u0131\u011f\u0131yla incelenmeli, test edilmeli ve ard\u0131ndan Kubernetes k\u00fcmesine uygulanmal\u0131d\u0131r. Bu yakla\u015f\u0131m, insan hatas\u0131n\u0131 en aza indirir ve ortamlar aras\u0131nda yap\u0131land\u0131rma tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flar. Bir ConfigMap'te bir hata oldu\u011funda, Git ge\u00e7mi\u015fine bakarak hatan\u0131n ne zaman ve kim taraf\u0131ndan yap\u0131ld\u0131\u011f\u0131n\u0131 h\u0131zl\u0131ca tespit edebilir ve \u00f6nceki stabil versiyona geri d\u00f6nebilirsiniz.<\/p>\n<h3>Sensitive Veriler \u0130\u00e7in Secret Kullan\u0131m\u0131<\/h3>\n<p>Bu konuyu daha \u00f6nce vurgulam\u0131\u015ft\u0131k, ancak tekrar etmekte fayda var: Asla hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131, SSL\/TLS sertifikalar\u0131, kullan\u0131c\u0131 kimlik bilgileri vb.) ConfigMap i\u00e7inde saklamay\u0131n. ConfigMap verileri Base64 ile kodlanmam\u0131\u015f ve Kubernetes API'si taraf\u0131ndan okunabilir durumdad\u0131r. Bu durum, yanl\u0131\u015f yetkilendirilmi\u015f bir kullan\u0131c\u0131n\u0131n veya bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 nedeniyle ele ge\u00e7irilmi\u015f bir Pod'un bu verilere kolayca eri\u015febilece\u011fi anlam\u0131na gelir. Bunun yerine, Kubernetes Secret nesnelerini kullan\u0131n. Secret'lar, varsay\u0131lan olarak Base64 ile encode edilse de, bu bir \u015fifreleme de\u011fildir. Ancak, Secret'lar eri\u015fim kontrolleri (RBAC) ve di\u011fer g\u00fcvenlik mekanizmalar\u0131yla daha s\u0131k\u0131 bir \u015fekilde korunur. En iyi uygulama, Secret'lar\u0131 Kubernetes k\u00fcmesinde olu\u015fturup y\u00f6netmek ve Git deposunda (\u015fifrelenmemi\u015f olarak) tutmaktan ka\u00e7\u0131nmakt\u0131r. E\u011fer Git'te tutmak zorundaysan\u0131z, sops, Sealed Secrets veya HashiCorp Vault gibi ara\u00e7lar\u0131 kullanarak bunlar\u0131 \u015fifrelemelisiniz.<\/p>\n<h3>Minimum Yetki Prensibi (RBAC)<\/h3>\n<p>Kubernetes'te, kimin hangi kaynaklara eri\u015febilece\u011fini ve hangi eylemleri ger\u00e7ekle\u015ftirebilece\u011fini Role-Based Access Control (RBAC) ile s\u0131k\u0131 bir \u015fekilde kontrol etmelisiniz. ConfigMap'ler i\u00e7in de bu prensip ge\u00e7erlidir. Yaln\u0131zca ConfigMap'leri okumas\u0131 veya de\u011fi\u015ftirmesi gereken kullan\u0131c\u0131lara ve servis hesaplar\u0131na (Service Accounts) gerekli minimum yetkileri verin. \u00d6rne\u011fin, bir uygulama Pod'unun sadece belirli bir ConfigMap'i okuma yetkisi olmal\u0131, di\u011fer ConfigMap'lere veya Secret'lara eri\u015fimi olmamal\u0131d\u0131r. Bu, bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 durumunda sald\u0131rgan\u0131n eri\u015fimini s\u0131n\u0131rlayarak potansiyel zarar\u0131 azalt\u0131r. RBAC kurallar\u0131n\u0131z\u0131 d\u00fczenli olarak g\u00f6zden ge\u00e7irmek ve \"ayr\u0131cal\u0131k eskalasyonu\" risklerini ortadan kald\u0131rmak i\u00e7in dikkatli olmak kritik \u00f6nem ta\u015f\u0131r.<\/p>\n<h3>Uygulama \u0130\u00e7i Yeniden Y\u00fckleme ve Dinamik Yap\u0131land\u0131rma<\/h3>\n<p>ConfigMap'ler genellikle Pod ba\u015flat\u0131ld\u0131\u011f\u0131nda okunur ve konteynerlere ortam de\u011fi\u015fkenleri veya dosya olarak iletilir. ConfigMap g\u00fcncellendi\u011finde, Pod'lar\u0131n yeni yap\u0131land\u0131rmay\u0131 otomatik olarak almad\u0131\u011f\u0131n\u0131 belirtmi\u015ftik. Ancak, baz\u0131 senaryolarda uygulaman\u0131z\u0131n \u00e7al\u0131\u015f\u0131rken yap\u0131land\u0131rma de\u011fi\u015fikliklerine tepki vermesini isteyebilirsiniz. Bunun i\u00e7in birka\u00e7 yakla\u015f\u0131m mevcuttur:<\/p>\n<ul>\n<li><strong>Periyodik Yoklama (Polling)<\/strong>: Uygulama, d\u00fczenli aral\u0131klarla ConfigMap'in ba\u011fl\u0131 oldu\u011fu dosya sistemini yoklayarak (volume mount olarak ba\u011flanm\u0131\u015fsa) de\u011fi\u015fiklikleri kontrol edebilir. E\u011fer bir de\u011fi\u015fiklik alg\u0131larsa, yap\u0131land\u0131rmas\u0131n\u0131 yeniden y\u00fckleyebilir. Bu, ek kodlama gerektirir ve an\u0131nda tepki vermez, ancak basit senaryolar i\u00e7in yeterli olabilir.<\/li>\n<li><strong>Sidecar Konteynerler<\/strong>: ConfigMap de\u011fi\u015fikliklerini izleyen ve ana uygulama konteynerine bir sinyal (\u00f6rne\u011fin bir HUP sinyali) g\u00f6nderen veya API arac\u0131l\u0131\u011f\u0131yla yeniden yap\u0131land\u0131rma talep eden \u00f6zel bir sidecar konteyner kullanabilirsiniz. Bu, daha karma\u015f\u0131k ama daha sa\u011flam bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/li>\n<li><strong>Operat\u00f6rler<\/strong>: Kubernetes Operat\u00f6rleri, daha geli\u015fmi\u015f dinamik yap\u0131land\u0131rma y\u00f6netimi sa\u011flayabilir. \u00d6rne\u011fin, baz\u0131 operat\u00f6rler bir ConfigMap de\u011fi\u015fti\u011finde ilgili Deployment'\u0131 otomatik olarak tetikleyerek Pod'lar\u0131n yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flayabilir.<\/li>\n<\/ul>\n<p>Bu y\u00f6ntemler, uygulaman\u0131z\u0131n daha esnek olmas\u0131n\u0131 sa\u011flar ve yap\u0131land\u0131rma de\u011fi\u015fiklikleri i\u00e7in manuel m\u00fcdahaleye olan ihtiyac\u0131 azalt\u0131r.<\/p>\n<h3>Mobil Uyumlu Tasar\u0131m \u0130\u00e7in Notlar<\/h3>\n<p>Bu makale, Kubernetes'te sunucu taraf\u0131 yap\u0131land\u0131rma y\u00f6netimiyle ilgili olsa da, olu\u015fturdu\u011funuz i\u00e7eri\u011fin mobil cihazlarda da okunabilir ve kullan\u0131labilir olmas\u0131 genel bir web standart\u0131d\u0131r. Makale i\u00e7eri\u011fi HTML olarak sunuldu\u011fu i\u00e7in, genel sayfa d\u00fczeninin mobil cihazlara uyumlu olmas\u0131 \u00f6nemlidir. Kod bloklar\u0131, uzun metinler veya tablolar mobil ekranlarda ta\u015fabilir. Bu durumu engellemek i\u00e7in CSS'in <code>@media<\/code> sorgular\u0131n\u0131 kullanarak farkl\u0131 ekran boyutlar\u0131 i\u00e7in farkl\u0131 stiller tan\u0131mlayabilirsiniz. \u00d6rne\u011fin, kod bloklar\u0131n\u0131n yatay kayd\u0131rma \u00e7ubuklar\u0131 yerine metni sarmalamas\u0131n\u0131 sa\u011flamak (<code>white-space: pre-wrap; word-wrap: break-word;<\/code>) mobil deneyimi iyile\u015ftirecektir. Ayr\u0131ca, paragraflar aras\u0131 bo\u015fluklar, font boyutlar\u0131 ve sat\u0131r y\u00fckseklikleri gibi tipografik detaylara dikkat etmek, mobil okuyucular i\u00e7in konforlu bir deneyim sunar. Yukar\u0131daki <code>style<\/code> blo\u011funda minimalist bir \u00f6rnek mevcuttur.<\/p>\n<h2>Sonu\u00e7: Daha Verimli ve Esnek Uygulama Yap\u0131land\u0131rmas\u0131na Do\u011fru<\/h2>\n<p>Kubernetes ekosisteminde uygulama yap\u0131land\u0131rmas\u0131, \u00e7o\u011fu zaman g\u00f6z ard\u0131 edilen ancak uygulamalar\u0131n kararl\u0131l\u0131\u011f\u0131, g\u00fcvenli\u011fi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi i\u00e7in kritik bir unsurdur. Bu makalede, ConfigMap'lerin Pod'lara ortam de\u011fi\u015fkenleri sa\u011flamak i\u00e7in nas\u0131l kullan\u0131labilece\u011fini temel kavramlardan ba\u015flayarak ad\u0131m ad\u0131m uygulamal\u0131 \u00f6rneklerle ele ald\u0131k. G\u00f6rd\u00fck ki, ConfigMap'ler sayesinde uygulama kodunu ve konteyner imajlar\u0131n\u0131 yap\u0131land\u0131rma verilerinden ay\u0131rmak, bulut yerel prensiplerine uygun, esnek ve y\u00f6netilebilir bir da\u011f\u0131t\u0131m stratejisinin temelini olu\u015fturur.<\/p>\n<p>ConfigMap'ler, ister basit anahtar-de\u011fer \u00e7iftleri olsun isterse t\u00fcm yap\u0131land\u0131rma dosyalar\u0131 olsun, hassas olmayan verileri merkezi bir yerde tutma ve bunlar\u0131 Pod'lara ortam de\u011fi\u015fkenleri veya volume mount olarak aktarma esnekli\u011fi sunar. <code>env<\/code> ve <code>envFrom<\/code> gibi mekanizmalarla, Pod tan\u0131mlamalar\u0131m\u0131z\u0131 daha temiz tutabilir, ayn\u0131 ConfigMap'i birden fazla Pod veya ortam aras\u0131nda payla\u015fabiliriz. Ancak, bu g\u00fcc\u00fcn yan\u0131 s\u0131ra, Secret'lar ile hassas veri ayr\u0131m\u0131, RBAC ile yetkilendirme kontrol\u00fc ve GitOps ile versiyonlama gibi en iyi uygulamalar\u0131n da \u00f6nemi b\u00fcy\u00fckt\u00fcr. Yap\u0131land\u0131rma de\u011fi\u015fikliklerinin Pod'lara nas\u0131l iletilece\u011fi ve dinamik yap\u0131land\u0131rma ihtiya\u00e7lar\u0131 i\u00e7in hangi y\u00f6ntemlerin kullan\u0131labilece\u011fi gibi ileri d\u00fczey konulara da de\u011finerek, okuyucular\u0131m\u0131z\u0131n karma\u015f\u0131k senaryolara haz\u0131rl\u0131kl\u0131 olmalar\u0131n\u0131 hedefledik.<\/p>\n<p>Sonu\u00e7 olarak, ConfigMap'ler Kubernetes'te modern uygulama geli\u015ftirmenin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. Bu ara\u00e7lar\u0131 do\u011fru bir \u015fekilde kullanarak, uygulamalar\u0131n\u0131z\u0131n farkl\u0131 ortamlar aras\u0131nda sorunsuz bir \u015fekilde ge\u00e7i\u015f yapmas\u0131n\u0131 sa\u011flayabilir, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi h\u0131zland\u0131rabilir ve operasyonel y\u00fck\u00fc azaltabilirsiniz. G\u00fcvenlik ve s\u00fcrd\u00fcr\u00fclebilirlik odakl\u0131 yakla\u015f\u0131mlar\u0131 benimseyerek, Kubernetes \u00fczerinde \u00e7al\u0131\u015fan uygulamalar\u0131n\u0131z\u0131n potansiyelini tam olarak ortaya \u00e7\u0131karabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<h4>ConfigMap'ler neden Secret'lar yerine kullan\u0131lmal\u0131?<\/h4>\n<p>ConfigMap'ler, hassas olmayan yap\u0131land\u0131rma verileri (\u00f6rne\u011fin veritaban\u0131 adresi, loglama seviyesi, API URL'si) i\u00e7in kullan\u0131l\u0131rken, Secret'lar hassas veriler (\u00f6rne\u011fin \u015fifreler, API anahtarlar\u0131, sertifikalar) i\u00e7in kullan\u0131lmal\u0131d\u0131r. ConfigMap verileri \u015fifrelenmez ve d\u00fcz metin olarak depolan\u0131r; Secret verileri ise Base64 ile kodlan\u0131r (\u015fifreleme de\u011fildir!) ve Kubernetes i\u00e7inde daha s\u0131k\u0131 g\u00fcvenlik kontrolleriyle y\u00f6netilir. G\u00fcvenlik nedeniyle bu ayr\u0131m \u00e7ok \u00f6nemlidir.<\/p>\n<h4>ConfigMap'i de\u011fi\u015ftirdi\u011fimde Pod'um otomatik g\u00fcncellenir mi?<\/h4>\n<p>Hay\u0131r, ConfigMap'i de\u011fi\u015ftirdi\u011finizde, ortam de\u011fi\u015fkenleri olarak bu ConfigMap'ten de\u011fer alan Pod'lar otomatik olarak g\u00fcncellenmez. Pod'lar, olu\u015fturulduklar\u0131 anda ortam de\u011fi\u015fkenlerini okur. Yeni yap\u0131land\u0131rmay\u0131 almalar\u0131 i\u00e7in ilgili Pod'lar\u0131n yeniden ba\u015flat\u0131lmas\u0131 gerekir. Genellikle bu, bir Deployment veya StatefulSet'in Pod \u015fablonundaki bir de\u011fi\u015fikli\u011fi tetikleyerek (\u00f6rne\u011fin bir annotation ekleyerek) sa\u011flan\u0131r.<\/p>\n<h4>ConfigMap'ler ne kadar veri depolayabilir?<\/h4>\n<p>Varsay\u0131lan olarak, bir ConfigMap 1MB'a kadar veri depolayabilir. Bu limit, Kubernetes'in temel veri deposu olan etcd'nin performans\u0131n\u0131 korumak i\u00e7in belirlenmi\u015ftir. E\u011fer 1MB'tan daha fazla yap\u0131land\u0131rma veriniz varsa, bu verileri birden fazla ConfigMap'e b\u00f6lmeyi veya harici bir yap\u0131land\u0131rma servisi (\u00f6rne\u011fin HashiCorp Vault, Consul) kullanmay\u0131 d\u00fc\u015f\u00fcnmelisiniz.<\/p>\n<h4>Birden fazla ConfigMap'ten ayn\u0131 isimde bir ortam de\u011fi\u015fkeni gelirse ne olur?<\/h4>\n<p>E\u011fer bir Pod tan\u0131mlamas\u0131nda birden fazla ConfigMap'ten (\u00f6zellikle <code>envFrom<\/code> kullan\u0131ld\u0131\u011f\u0131nda) veya ayn\u0131 Pod tan\u0131m\u0131nda hem <code>env<\/code> hem de <code>envFrom<\/code> bloklar\u0131ndan ayn\u0131 isimde bir ortam de\u011fi\u015fkeni gelirse, Kubernetes'in bir \u00f6ncelik s\u0131ras\u0131 vard\u0131r. <code>env<\/code> blo\u011funda do\u011frudan tan\u0131mlanan ortam de\u011fi\u015fkenleri, <code>envFrom<\/code> ile gelen de\u011fi\u015fkenlere g\u00f6re \u00f6nceliklidir. Birden fazla <code>envFrom<\/code> blo\u011fu aras\u0131nda ayn\u0131 isme sahip bir \u00e7ak\u0131\u015fma olursa, Kubernetes genellikle ilk tan\u0131mlanan ConfigMap'teki de\u011feri kullan\u0131r, ancak bu davran\u0131\u015f belirsiz olabilir. Bu nedenle, isimlendirme \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nlemek i\u00e7in dikkatli olmak \u00f6nemlidir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1491],"tags":[],"class_list":{"0":"post-33961","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-kubernetes","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>Kubernetes&#039;te Pod&#039;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?<\/title>\n<meta name=\"description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani &quot;hardcode&quot; etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.\" \/>\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\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes&#039;te Pod&#039;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani &quot;hardcode&quot; etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-09T07:01:03+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=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kubernetes&#8217;te Pod&#8217;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?\",\"datePublished\":\"2025-11-09T07:01:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\"},\"wordCount\":4916,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Kubernetes\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\",\"name\":\"Kubernetes'te Pod'larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-09T07:01:03+00:00\",\"description\":\"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani \\\"hardcode\\\" etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes&#8217;te Pod&#8217;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes'te Pod'larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?","description":"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani \"hardcode\" etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.","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\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubernetes'te Pod'larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?","og_description":"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani \"hardcode\" etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-09T07:01:03+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kubernetes&#8217;te Pod&#8217;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?","datePublished":"2025-11-09T07:01:03+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/"},"wordCount":4916,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Kubernetes"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/","url":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/","name":"Kubernetes'te Pod'larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-09T07:01:03+00:00","description":"Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131m\u0131z\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilmesi kritik bir \u00f6neme sahiptir. Bir uygulaman\u0131n veritaban\u0131 ba\u011flant\u0131 adresi, API anahtarlar\u0131, loglama seviyeleri veya herhangi bir \u00f6zel ayar\u0131, \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortama g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. Bu yap\u0131land\u0131rma bilgilerini do\u011frudan uygulama koduna yazmak, yani \"hardcode\" etmek, esnekli\u011fi azaltan ve bak\u0131m\u0131 zorla\u015ft\u0131ran yayg\u0131n bir hatad\u0131r. Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finde uygulaman\u0131n yeniden derlenmesi ve da\u011f\u0131t\u0131lmas\u0131 gerekti\u011fi anlam\u0131na gelir ki bu da CI\/CD s\u00fcre\u00e7lerini yava\u015flat\u0131r ve hata potansiyelini art\u0131r\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-podlarda-configmap-ile-ortam-degiskenleri-nasil-yapilandirilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes&#8217;te Pod&#8217;larda ConfigMap ile Ortam De\u011fi\u015fkenleri Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33961","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=33961"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33961\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}