{"id":35111,"date":"2025-11-25T19:41:06","date_gmt":"2025-11-25T16:41:06","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35111"},"modified":"2025-11-25T19:41:06","modified_gmt":"2025-11-25T16:41:06","slug":"kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/","title":{"rendered":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma"},"content":{"rendered":"<p><body><\/p>\n<h2>Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma<\/h2>\n<p>Kubernetes, konteynerize edilmi\u015f uygulamalar\u0131 da\u011f\u0131tmak, \u00f6l\u00e7eklendirmek ve y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir platform sunar. Ancak, Kubernetes manifest dosyalar\u0131n\u0131n (Deployment, Service, Ingress, ConfigMap vb.) say\u0131s\u0131 ve karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve y\u00f6netimi zorla\u015fabilir. \u00d6zellikle birden fazla ortamda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 da\u011f\u0131t\u0131mlar sa\u011flamak, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmek ve uygulama ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc (kurulum, y\u00fckseltme, geri alma, silme) kontrol etmek b\u00fcy\u00fck bir meydan okuma haline gelir. \u0130\u015fte tam bu noktada Helm devreye girer.<\/p>\n<p>Helm, Kubernetes i\u00e7in bir paket y\u00f6neticisidir. Linux da\u011f\u0131t\u0131mlar\u0131nda apt, yum veya brew ne ise, Kubernetes i\u00e7in de Helm odur. Helm, Kubernetes uygulamalar\u0131n\u0131 paketlemek, da\u011f\u0131tmak ve y\u00f6netmek i\u00e7in standart bir y\u00f6ntem sunar. Bu makalede, Helm&#8217;in ikinci b\u00fcy\u00fck s\u00fcr\u00fcm\u00fc olan Helm 2&#8217;ye odaklanaca\u011f\u0131z. Helm 3 daha g\u00fcncel ve g\u00fcvenlik a\u00e7\u0131s\u0131ndan daha geli\u015fmi\u015f olsa da, d\u00fcnya genelinde hala bir\u00e7ok eski sistem ve proje Helm 2 kullanmaya devam etmektedir. Bu nedenle, Helm 2&#8217;yi anlamak ve onunla \u00e7al\u0131\u015fabilmek, mevcut Kubernetes altyap\u0131lar\u0131yla ilgilenen geli\u015ftiriciler ve operasyon ekipleri i\u00e7in kritik bir beceridir.<\/p>\n<h3>Helm Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Helm, Kubernetes uygulamalar\u0131n\u0131 &#8220;Chart&#8221; ad\u0131 verilen paketler halinde grupland\u0131rarak, bu uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 ve y\u00f6netimini kolayla\u015ft\u0131r\u0131r. Bir Chart, bir uygulaman\u0131n veya hizmetin Kubernetes&#8217;te \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken t\u00fcm kaynaklar\u0131 (manifest dosyalar\u0131, yap\u0131land\u0131rma, ba\u011f\u0131ml\u0131l\u0131klar vb.) i\u00e7eren bir koleksiyondur.<\/p>\n<p>Helm&#8217;in temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Helm CLI (Client):<\/strong> Geli\u015ftiricilerin ve operat\u00f6rlerin Chart&#8217;lar\u0131 olu\u015fturmak, y\u00f6netmek, depolamak ve Kubernetes k\u00fcmelerine da\u011f\u0131tmak i\u00e7in kulland\u0131\u011f\u0131 komut sat\u0131r\u0131 arac\u0131d\u0131r.<br \/>\n*   <strong>Tiller (Server):<\/strong> Helm 2&#8217;ye \u00f6zg\u00fc bir bile\u015fendir. Kubernetes k\u00fcmesi i\u00e7inde \u00e7al\u0131\u015fan bir sunucu taraf\u0131 bile\u015fenidir. Helm CLI&#8217;dan gelen komutlar\u0131 al\u0131r, Chart&#8217;lar\u0131 i\u015fler ve Kubernetes API&#8217;si arac\u0131l\u0131\u011f\u0131yla kaynaklar\u0131 olu\u015fturur\/g\u00fcnceller\/siler. Tiller, release&#8217;lerin (y\u00fcklenmi\u015f Chart \u00f6rnekleri) durumunu ve ge\u00e7mi\u015fini de y\u00f6netir.<br \/>\n*   <strong>Chart:<\/strong> Bir Kubernetes uygulamas\u0131n\u0131 tan\u0131mlayan ve Helm taraf\u0131ndan y\u00f6netilen bir pakettir. Bir Chart, uygulaman\u0131n t\u00fcm Kubernetes manifestlerini, yap\u0131land\u0131rma dosyalar\u0131n\u0131, \u015fablonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7erir.<br \/>\n*   <strong>Repository:<\/strong> Helm Chart&#8217;lar\u0131n\u0131n depoland\u0131\u011f\u0131 ve payla\u015f\u0131ld\u0131\u011f\u0131 yerdir. Genellikle bir HTTP sunucusu olarak \u00e7al\u0131\u015f\u0131r ve Chart&#8217;lar\u0131 indeksler.<br \/>\n*   <strong>Release:<\/strong> Bir Kubernetes k\u00fcmesine y\u00fcklenmi\u015f bir Chart&#8217;\u0131n belirli bir \u00f6rne\u011fidir. Her release benzersiz bir ada sahiptir ve Helm taraf\u0131ndan izlenir.<\/p>\n<p>Helm kullanman\u0131n ba\u015fl\u0131ca avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Uygulama Ya\u015fam D\u00f6ng\u00fcs\u00fc Y\u00f6netimi:<\/strong> Uygulamalar\u0131 tek bir komutla kurabilir, y\u00fckseltebilir, geri alabilir ve silebilirsiniz. Bu, karma\u015f\u0131k \u00e7oklu mikro hizmet uygulamalar\u0131 i\u00e7in \u00f6zellikle de\u011ferlidir.<br \/>\n*   <strong>Yeniden Kullan\u0131labilirlik ve Payla\u015f\u0131labilirlik:<\/strong> Bir kez olu\u015fturulan Chart&#8217;lar, farkl\u0131 ekipler veya projeler aras\u0131nda kolayca payla\u015f\u0131labilir ve yeniden kullan\u0131labilir. Bu, standartla\u015ft\u0131r\u0131lm\u0131\u015f da\u011f\u0131t\u0131mlar sa\u011flar.<br \/>\n*   <strong>Basitle\u015ftirilmi\u015f Karma\u015f\u0131k Da\u011f\u0131t\u0131mlar:<\/strong> Helm Chart&#8217;lar\u0131, birden fazla Kubernetes kayna\u011f\u0131n\u0131 (Deployment, Service, PersistentVolumeClaim, Ingress vb.) tek bir mant\u0131ksal birim alt\u0131nda birle\u015ftirerek karma\u015f\u0131k uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirir.<br \/>\n*   <strong>Ortamlar Aras\u0131 Tutarl\u0131l\u0131k:<\/strong> Geli\u015ftirme, test ve \u00fcretim gibi farkl\u0131 ortamlarda ayn\u0131 Chart&#8217;\u0131 farkl\u0131 yap\u0131land\u0131rma de\u011ferleriyle kullanarak tutarl\u0131 da\u011f\u0131t\u0131mlar sa\u011flayabilirsiniz.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi:<\/strong> Bir uygulaman\u0131n birden fazla alt bile\u015fene veya ba\u015fka uygulamalara ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 varsa, Helm bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 kolayca y\u00f6netebilir.<br \/>\n*   <strong>\u015eablonlama (Templating):<\/strong> Chart&#8217;lar, Go \u015fablonlama dilini kullanarak dinamik de\u011ferler ve ko\u015fullu mant\u0131k i\u00e7erebilir. Bu, Chart&#8217;lar\u0131n farkl\u0131 ortamlar veya kullan\u0131m durumlar\u0131 i\u00e7in \u00f6zelle\u015ftirilmesini sa\u011flar.<\/p>\n<h3>Helm 2 ve Helm 3 Aras\u0131ndaki Temel Farklar<\/h3>\n<p>Helm 2, Kubernetes ekosistemine paket y\u00f6netimini getirerek b\u00fcy\u00fck bir bo\u015flu\u011fu doldurmu\u015f olsa da, \u00f6zellikle g\u00fcvenlik ve mimari a\u00e7\u0131s\u0131ndan baz\u0131 ele\u015ftiriler alm\u0131\u015ft\u0131r. Helm 3, bu sorunlar\u0131 gidermek ve daha modern bir yakla\u015f\u0131m sunmak \u00fczere tasarlanm\u0131\u015ft\u0131r. Helm 2 ve Helm 3 aras\u0131ndaki temel farklar\u0131 anlamak, neden hala Helm 2&#8217;ye ihtiya\u00e7 duyulabilece\u011fini veya neden Helm 3&#8217;e ge\u00e7i\u015fin te\u015fvik edildi\u011fini kavramak a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<p>*   <strong>Tiller Bile\u015feni:<\/strong><br \/>\n    *   <strong>Helm 2:<\/strong> En b\u00fcy\u00fck fark, Helm 2&#8217;nin Kubernetes k\u00fcmesi i\u00e7inde \u00e7al\u0131\u015fan bir sunucu taraf\u0131 bile\u015feni olan Tiller&#8217;a sahip olmas\u0131d\u0131r. Tiller, Chart&#8217;lar\u0131 yorumlar, Kubernetes API&#8217;si ile etkile\u015fime girer ve release&#8217;leri y\u00f6netir.<br \/>\n    *   <strong>Helm 3:<\/strong> Tiller tamamen kald\u0131r\u0131lm\u0131\u015ft\u0131r. Helm 3 CLI, do\u011frudan Kubernetes API&#8217;si ile etkile\u015fime girer. Bu, mimariyi basitle\u015ftirir ve g\u00fcvenlik risklerini azalt\u0131r.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong><br \/>\n    *   <strong>Helm 2:<\/strong> Tiller&#8217;\u0131n k\u00fcmede \u00e7al\u0131\u015fmas\u0131, genellikle k\u00fcme y\u00f6neticisi (cluster-admin) yetkilerine sahip olmas\u0131 gerekti\u011fi anlam\u0131na geliyordu. Bu durum, Tiller&#8217;\u0131n ele ge\u00e7irilmesi durumunda t\u00fcm k\u00fcmeye eri\u015fim sa\u011flanabilece\u011fi ciddi bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olu\u015fturuyordu. RBAC (Role-Based Access Control) ile Tiller&#8217;a daha k\u0131s\u0131tl\u0131 yetkiler vermek m\u00fcmk\u00fcn olsa da, yap\u0131land\u0131rmas\u0131 karma\u015f\u0131kt\u0131 ve \u00e7o\u011fu zaman g\u00f6z ard\u0131 ediliyordu.<br \/>\n    *   <strong>Helm 3:<\/strong> Tiller&#8217;\u0131n olmamas\u0131 nedeniyle bu g\u00fcvenlik endi\u015feleri ortadan kalkm\u0131\u015ft\u0131r. Helm 3, kullan\u0131c\u0131lar\u0131n <code>kubectl<\/code> i\u00e7in sahip oldu\u011fu yetkileri kullan\u0131r. Bu, Helm operasyonlar\u0131n\u0131n, kullan\u0131c\u0131n\u0131n Kubernetes RBAC izinleriyle s\u0131n\u0131rl\u0131 oldu\u011fu anlam\u0131na gelir.<br \/>\n*   <strong>Release Y\u00f6netimi:<\/strong><br \/>\n    *   <strong>Helm 2:<\/strong> Release bilgilerini ve ge\u00e7mi\u015fini Kubernetes <code>ConfigMaps<\/code> i\u00e7inde saklard\u0131.<br \/>\n    *   <strong>Helm 3:<\/strong> Release bilgilerini <code>Secrets<\/code> i\u00e7inde saklar. Bu, hassas bilgilerin daha g\u00fcvenli bir \u015fekilde saklanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Chart API S\u00fcr\u00fcm\u00fc:<\/strong><br \/>\n    *   <strong>Helm 2:<\/strong> <code>Chart.yaml<\/code> dosyalar\u0131nda <code>apiVersion: v1<\/code> kullan\u0131r.<br \/>\n    *   <strong>Helm 3:<\/strong> <code>Chart.yaml<\/code> dosyalar\u0131nda <code>apiVersion: v2<\/code> kullan\u0131r ve baz\u0131 metadata alanlar\u0131nda de\u011fi\u015fiklikler yap\u0131lm\u0131\u015ft\u0131r.<br \/>\n*   <strong>Namespace Deste\u011fi:<\/strong><br \/>\n    *   <strong>Helm 2:<\/strong> <code>helm install<\/code> komutu varsay\u0131lan olarak Tiller&#8217;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 namespace&#8217;e y\u00fcklerdi veya <code>--namespace<\/code> ile belirtilen namespace&#8217;e y\u00fckleyebilirdi. Ancak, release&#8217;ler genellikle k\u00fcme genelinde izleniyordu.<br \/>\n    *   <strong>Helm 3:<\/strong> Release&#8217;ler art\u0131k belirli bir namespace&#8217;e ba\u011fl\u0131d\u0131r ve release adlar\u0131 namespace i\u00e7inde benzersiz olmak zorundad\u0131r.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi:<\/strong><br \/>\n    *   <strong>Helm 2:<\/strong> <code>requirements.yaml<\/code> dosyas\u0131 kullan\u0131l\u0131rd\u0131.<br \/>\n    *   <strong>Helm 3:<\/strong> <code>Chart.yaml<\/code> dosyas\u0131 i\u00e7indeki <code>dependencies<\/code> alan\u0131 kullan\u0131larak ba\u011f\u0131ml\u0131l\u0131klar y\u00f6netilir.<\/p>\n<p>Helm 2&#8217;nin hala \u00f6\u011frenilmesi veya kullan\u0131lmas\u0131 gereken durumlar \u015funlard\u0131r:<\/p>\n<p>*   <strong>Mevcut Eski Projeler:<\/strong> Bir\u00e7ok \u015firket ve proje, Helm 3&#8217;e ge\u00e7i\u015f yapmam\u0131\u015f veya yapmay\u0131 planlamayan eski Kubernetes k\u00fcmelerinde Helm 2 kullanmaya devam etmektedir.<br \/>\n*   <strong>Belirli Ortam K\u0131s\u0131tlamalar\u0131:<\/strong> Nadiren de olsa, belirli kurumsal veya g\u00fcvenlik politikalar\u0131 Helm 3&#8217;\u00fcn getirdi\u011fi de\u011fi\u015fikliklerle uyumlu olmayabilir (ancak bu \u00e7ok istisnai bir durumdur).<br \/>\n*   <strong>Anlay\u0131\u015f Geli\u015ftirme:<\/strong> Helm&#8217;in evrimini ve Tiller gibi bir bile\u015fenin neden var oldu\u011funu anlamak, Kubernetes paket y\u00f6netiminin derinlemesine kavranmas\u0131na yard\u0131mc\u0131 olabilir.<\/p>\n<p>Bu makalenin geri kalan\u0131nda, Helm 2&#8217;nin kurulumu, yap\u0131land\u0131rmas\u0131 ve kullan\u0131m\u0131 detayl\u0131 olarak ele al\u0131nacakt\u0131r.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Helm 2 ile Kubernetes k\u00fcmelerinde yaz\u0131l\u0131m kurmaya ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n ko\u015fullar\u0131n yerine getirildi\u011finden emin olmal\u0131s\u0131n\u0131z:<\/p>\n<p>1.  <strong>Kubernetes K\u00fcmesi:<\/strong> \u00c7al\u0131\u015f\u0131r durumda bir Kubernetes k\u00fcmesine sahip olmal\u0131s\u0131n\u0131z. Bu bir yerel geli\u015ftirme k\u00fcmesi (Minikube, Kind, Docker Desktop&#8217;taki Kubernetes), bir bulut sa\u011flay\u0131c\u0131s\u0131 k\u00fcmesi (Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS), Azure Kubernetes Service (AKS)) veya kendi bar\u0131nd\u0131rd\u0131\u011f\u0131n\u0131z bir k\u00fcme olabilir.<br \/>\n2.  <strong><code>kubectl<\/code> Y\u00fckl\u00fc ve Yap\u0131land\u0131r\u0131lm\u0131\u015f:<\/strong> Kubernetes k\u00fcmenizle etkile\u015fim kurmak i\u00e7in <code>kubectl<\/code> komut sat\u0131r\u0131 arac\u0131 y\u00fckl\u00fc ve do\u011fru \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015f olmal\u0131d\u0131r. <code>kubectl get nodes<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda k\u00fcmenizdeki d\u00fc\u011f\u00fcmleri g\u00f6rebilmelisiniz.<br \/>\n3.  <strong>\u0130nternet Ba\u011flant\u0131s\u0131:<\/strong> Helm Chart depolar\u0131na eri\u015fmek ve Docker imajlar\u0131n\u0131 \u00e7ekmek i\u00e7in internet ba\u011flant\u0131s\u0131 gereklidir.<\/p>\n<h3>Helm 2 Kurulumu<\/h3>\n<p>Helm 2&#8217;yi kullanmak i\u00e7in hem Helm CLI&#8217;y\u0131 yerel makinenize kurman\u0131z hem de Kubernetes k\u00fcmenize Tiller&#8217;\u0131 da\u011f\u0131tman\u0131z gerekir.<\/p>\n<h4>Helm CLI Kurulumu<\/h4>\n<p>Helm CLI, Chart&#8217;lar\u0131 y\u00f6netmek ve Tiller ile ileti\u015fim kurmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p><strong>Linux ve macOS i\u00e7in:<\/strong><\/p>\n<p>*   <strong>Homebrew (macOS i\u00e7in \u00f6nerilir):<\/strong><\/p>\n<pre><code class=\"language-bash\">brew install helm@2<\/code><\/pre>\n<p>    Not: <code>helm@2<\/code> paketi, Helm 2&#8217;yi kurar. E\u011fer <code>helm<\/code> yazarsan\u0131z Helm 3&#8217;\u00fc kuracakt\u0131r. Helm 2&#8217;yi kurduktan sonra <code>helm<\/code> komutunu kullanmak i\u00e7in genellikle sembolik bir ba\u011flant\u0131 olu\u015fturulur veya PATH&#8217;e eklenir. E\u011fer hem Helm 2 hem de Helm 3&#8217;\u00fc ayn\u0131 anda kullanmak isterseniz, Helm 2 i\u00e7in <code>helm2<\/code> gibi bir alias veya farkl\u0131 bir PATH ayar\u0131 yapman\u0131z gerekebilir. Bu makale boyunca <code>helm<\/code> komutunun Helm 2&#8217;yi i\u015faret etti\u011fini varsayaca\u011f\u0131z.<\/p>\n<p>*   <strong><code>curl<\/code> Script ile:<\/strong><\/p>\n<pre><code class=\"language-bash\">curl https:\/\/raw.githubusercontent.com\/helm\/helm\/master\/scripts\/get-helm-3 | sed 's\/get_latest_version\/get_stable_version\/g' | bash\n    # Bu script varsay\u0131lan olarak Helm 3'\u00fc indirir. Helm 2'yi indirmek i\u00e7in a\u015fa\u011f\u0131daki gibi belirli bir s\u00fcr\u00fcm\u00fc belirtmeniz gerekebilir:\n    curl -L https:\/\/git.io\/get_helm.sh | bash -s -- --version v2.16.1 --no-sudo<\/code><\/pre>\n<p>    <code>v2.16.1<\/code> yerine istedi\u011finiz Helm 2 s\u00fcr\u00fcm\u00fcn\u00fc yazabilirsiniz. <code>get_helm.sh<\/code> scripti art\u0131k Helm 3&#8217;\u00fc varsay\u0131lan olarak indirdi\u011fi i\u00e7in Helm 2 i\u00e7in \u00f6zel bir s\u00fcr\u00fcm belirtmek \u00f6nemlidir.<\/p>\n<p><strong>Windows i\u00e7in:<\/strong><\/p>\n<p>*   <strong>Chocolatey (\u00f6nerilir):<\/strong><\/p>\n<pre><code class=\"language-bash\">choco install kubernetes-helm --version 2.16.1<\/code><\/pre>\n<p>    Yine, <code>2.16.1<\/code> yerine istedi\u011finiz Helm 2 s\u00fcr\u00fcm\u00fcn\u00fc belirtmelisiniz. Varsay\u0131lan olarak Helm 3 y\u00fcklenebilir.<\/p>\n<p>*   <strong>Scoop:<\/strong><\/p>\n<pre><code class=\"language-bash\">scoop install helm@2<\/code><\/pre>\n<p>*   <strong>\u0130kili \u0130ndirme:<\/strong><br \/>\n    Helm&#8217;in GitHub releases sayfas\u0131ndan (https:\/\/github.com\/helm\/helm\/releases) istedi\u011finiz Helm 2 s\u00fcr\u00fcm\u00fcn\u00fcn (\u00f6rne\u011fin <code>helm-v2.16.1-windows-amd64.zip<\/code>) ikili dosyas\u0131n\u0131 indirin. \u0130\u00e7indeki <code>helm.exe<\/code> dosyas\u0131n\u0131 sistem PATH&#8217;inize ekli bir dizine (\u00f6rne\u011fin <code>C:\\Program Files\\Helm<\/code>) kopyalay\u0131n.<\/p>\n<p><strong>Kurulumu Do\u011frulama:<\/strong><br \/>\nHelm CLI&#8217;n\u0131n do\u011fru y\u00fcklendi\u011finden emin olmak i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">helm version --client<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>Client: &version.Version{SemVer:\"v2.x.x\", ...}<\/code> gibi bir ifade g\u00f6rmelisiniz.<\/p>\n<h4>Tiller Kurulumu<\/h4>\n<p>Helm 2&#8217;nin \u00e7al\u0131\u015fmas\u0131 i\u00e7in Kubernetes k\u00fcmenizde Tiller&#8217;\u0131n y\u00fckl\u00fc olmas\u0131 gerekir. Tiller, varsay\u0131lan olarak <code>kube-system<\/code> namespace&#8217;inde \u00e7al\u0131\u015f\u0131r. Ancak g\u00fcvenlik nedeniyle, Tiller&#8217;a k\u00fcme y\u00f6neticisi yetkileri vermek yerine, ona \u00f6zel bir <code>ServiceAccount<\/code> ve k\u0131s\u0131tl\u0131 <code>ClusterRoleBinding<\/code> atamak en iyi uygulamad\u0131r.<\/p>\n<p><strong>1. Tiller i\u00e7in ServiceAccount ve ClusterRoleBinding Olu\u015fturma:<\/strong><\/p>\n<p>Tiller&#8217;a yaln\u0131zca ihtiyac\u0131 olan yetkileri vermek i\u00e7in bir <code>ServiceAccount<\/code> ve ona ba\u011fl\u0131 bir <code>ClusterRoleBinding<\/code> olu\u015fturaca\u011f\u0131z. Bu, Tiller&#8217;\u0131n k\u00fcme genelinde herhangi bir kayna\u011f\u0131 olu\u015fturmas\u0131na, g\u00fcncellemesine ve silmesine izin veren <code>cluster-admin<\/code> rol\u00fcn\u00fc atar. Ger\u00e7ek bir \u00fcretim ortam\u0131nda, bu yetkileri daha da k\u0131s\u0131tlamay\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<p><code>tiller-rbac.yaml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: tiller\n  namespace: kube-system # Tiller'\u0131n \u00e7al\u0131\u015faca\u011f\u0131 namespace\n---\napiVersion: rbac.authorization.k8s.io\/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: tiller-cluster-rule\nsubjects:\n  - kind: ServiceAccount\n    name: tiller\n    namespace: kube-system\nroleRef:\n  kind: ClusterRole\n  name: cluster-admin # Tiller'a cluster-admin yetkileri veriyoruz\n  apiGroup: rbac.authorization.k8s.io<\/code><\/pre>\n<p>Bu dosyay\u0131 k\u00fcmenize uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f tiller-rbac.yaml<\/code><\/pre>\n<p><strong>2. Tiller&#8217;\u0131 Kurma:<\/strong><\/p>\n<p>\u015eimdi Helm CLI&#8217;y\u0131 kullanarak Tiller&#8217;\u0131 k\u00fcmenize kurabilirsiniz. <code>--service-account tiller<\/code> parametresi, Tiller&#8217;\u0131n yukar\u0131da olu\u015fturdu\u011fumuz <code>tiller<\/code> ServiceAccount&#8217;\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar. <code>--history-max<\/code> ise release ge\u00e7mi\u015fi i\u00e7in tutulacak revizyon say\u0131s\u0131n\u0131 belirler.<\/p>\n<pre><code class=\"language-bash\">helm init --service-account tiller --history-max 20<\/code><\/pre>\n<p>Bu komut, Tiller&#8217;\u0131 <code>kube-system<\/code> namespace&#8217;ine da\u011f\u0131tacak ve varsay\u0131lan Helm Chart deposunu (stable) ekleyecektir.<\/p>\n<p><strong>3. Tiller Kurulumunu Do\u011frulama:<\/strong><\/p>\n<p>Tiller&#8217;\u0131n ba\u015far\u0131yla kuruldu\u011funu ve \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n kube-system -l app=helm<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>tiller-deploy-xxxxxxxxxx-xxxxx<\/code> gibi bir pod g\u00f6rmelisiniz ve durumu <code>Running<\/code> olmal\u0131d\u0131r.<\/p>\n<p>Ard\u0131ndan, Helm CLI&#8217;n\u0131n Tiller ile ileti\u015fim kurabildi\u011fini do\u011frulamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm version<\/code><\/pre>\n<p>Bu komutun \u00e7\u0131kt\u0131s\u0131nda hem <code>Client<\/code> hem de <code>Server<\/code> (Tiller) versiyon bilgilerini g\u00f6rmelisiniz. E\u011fer sadece <code>Client<\/code> versiyonunu g\u00f6r\u00fcyorsan\u0131z veya <code>Error: ...<\/code> mesaj\u0131 al\u0131yorsan\u0131z, Tiller kurulumunda bir sorun var demektir.<\/p>\n<h3>Helm Chart&#8217;lar\u0131 Anlamak<\/h3>\n<p>Helm Chart&#8217;lar\u0131, Kubernetes uygulamalar\u0131n\u0131 paketlemenin temel birimidir. Bir Chart&#8217;\u0131n yap\u0131s\u0131n\u0131 ve nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak, uygulamalar\u0131 etkili bir \u015fekilde da\u011f\u0131tmak ve y\u00f6netmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>Chart Yap\u0131s\u0131<\/h4>\n<p>Bir Chart, belirli bir dizin yap\u0131s\u0131na sahiptir:<\/p>\n<pre><code class=\"language-\">my-app\/\n  Chart.yaml          # Chart hakk\u0131nda meta bilgiler\n  values.yaml         # Chart i\u00e7in varsay\u0131lan yap\u0131land\u0131rma de\u011ferleri\n  charts\/             # Ba\u011f\u0131ml\u0131 Chart'lar\n  templates\/          # Kubernetes manifest \u015fablonlar\u0131\n    deployment.yaml\n    service.yaml\n    ingress.yaml\n    _helpers.tpl      # Yeniden kullan\u0131labilir \u015fablon par\u00e7ac\u0131klar\u0131\n  NOTES.txt           # Kurulum sonras\u0131 bilgiler<\/code><\/pre>\n<p>*   <strong><code>Chart.yaml<\/code>:<\/strong> Chart&#8217;\u0131n ad\u0131, versiyonu, a\u00e7\u0131klamas\u0131, API versiyonu (<code>v1<\/code> for Helm 2), maintainer bilgileri ve ba\u011f\u0131ml\u0131l\u0131klar gibi meta verilerini i\u00e7erir.<\/p>\n<pre><code class=\"language-yaml\">apiVersion: v1\n    name: my-app\n    version: 0.1.0\n    appVersion: \"1.0\"\n    description: A Helm chart for my application.<\/code><\/pre>\n<p>*   <strong><code>values.yaml<\/code>:<\/strong> Chart&#8217;\u0131n da\u011f\u0131t\u0131m s\u0131ras\u0131nda \u00f6zelle\u015ftirilebilen varsay\u0131lan yap\u0131land\u0131rma de\u011ferlerini i\u00e7erir. Bu de\u011ferler, <code>templates\/<\/code> dizinindeki \u015fablonlarda kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-yaml\">replicaCount: 1\n    image:\n      repository: nginx\n      tag: stable\n      pullPolicy: IfNotPresent\n    service:\n      type: ClusterIP\n      port: 80<\/code><\/pre>\n<p>*   <strong><code>templates\/<\/code>:<\/strong> Bu dizin, Kubernetes kaynak manifestlerinin \u015fablonlar\u0131n\u0131 i\u00e7erir. Helm, bu \u015fablonlar\u0131 <code>values.yaml<\/code>&#8216;daki de\u011ferlerle birle\u015ftirerek nihai Kubernetes manifestlerini olu\u015fturur.<br \/>\n    *   <strong><code>_helpers.tpl<\/code>:<\/strong> Genellikle s\u0131k kullan\u0131lan fonksiyonlar\u0131, etiketleri veya adland\u0131rma mant\u0131\u011f\u0131n\u0131 i\u00e7eren yard\u0131mc\u0131 \u015fablonlar\u0131 bar\u0131nd\u0131r\u0131r. Bu dosyalar do\u011frudan Kubernetes&#8217;e g\u00f6nderilmez.<br \/>\n*   <strong><code>charts\/<\/code>:<\/strong> E\u011fer Chart&#8217;\u0131n\u0131z ba\u015fka Chart&#8217;lara ba\u011f\u0131ml\u0131ysa (\u00f6rne\u011fin, bir uygulama MySQL veritaban\u0131na ihtiya\u00e7 duyuyorsa ve MySQL i\u00e7in ayr\u0131 bir Chart varsa), bu ba\u011f\u0131ml\u0131 Chart&#8217;lar buraya yerle\u015ftirilebilir. Ba\u011f\u0131ml\u0131l\u0131klar <code>Chart.yaml<\/code> dosyas\u0131nda da belirtilir ve <code>helm dependency update<\/code> ile indirilir.<br \/>\n*   <strong><code>NOTES.txt<\/code>:<\/strong> Chart ba\u015far\u0131yla kurulduktan sonra kullan\u0131c\u0131ya g\u00f6sterilen bilgilendirme mesajlar\u0131n\u0131 i\u00e7erir. Bu genellikle uygulaman\u0131n nas\u0131l eri\u015filece\u011fi veya sonraki ad\u0131mlar hakk\u0131nda talimatlar i\u00e7erir.<\/p>\n<h4>\u015eablonlama (Templating)<\/h4>\n<p>Helm&#8217;in g\u00fcc\u00fcn\u00fcn b\u00fcy\u00fck bir k\u0131sm\u0131, Go \u015fablonlama dilini kullanarak Kubernetes manifestlerini dinamik olarak olu\u015fturma yetene\u011finden gelir. <code>templates\/<\/code> dizinindeki dosyalar asl\u0131nda Go \u015fablonlar\u0131d\u0131r.<\/p>\n<p>*   <strong>De\u011ferleri Kullanma:<\/strong> <code>values.yaml<\/code> dosyas\u0131ndaki de\u011ferlere <code>{{ .Values.anahtar.altanahtar }}<\/code> syntax&#8217;\u0131 ile eri\u015filir. \u00d6rne\u011fin, <code>values.yaml<\/code>&#8216;daki <code>replicaCount: 1<\/code> de\u011ferine <code>{{ .Values.replicaCount }}<\/code> ile eri\u015filir.<br \/>\n*   <strong>Yerle\u015fik Fonksiyonlar ve Borular (Pipes):<\/strong> Helm, \u015fablonlarda kullan\u0131labilecek bir\u00e7ok yerle\u015fik fonksiyon sunar (\u00f6rne\u011fin, <code>quote<\/code>, <code>default<\/code>, <code>indent<\/code>). Borular (<code>|<\/code>) ile bu fonksiyonlar zincirlenebilir.<\/p>\n<pre><code class=\"language-go\"># \u00d6rnek: values.yaml'daki image.tag de\u011ferini al ve t\u0131rnak i\u00e7ine al\n    image: \"{{ .Values.image.repository }}:{{ .Values.image.tag | quote }}\"<\/code><\/pre>\n<p>*   <strong>Ko\u015fullu Mant\u0131k (<code>if\/else<\/code>):<\/strong> Belirli ko\u015fullara ba\u011fl\u0131 olarak kaynaklar\u0131n olu\u015fturulmas\u0131n\u0131 veya de\u011ferlerin ayarlanmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-go\">{{ if .Values.ingress.enabled }}\n    apiVersion: networking.k8s.io\/v1\n    kind: Ingress\n    # ... Ingress tan\u0131m\u0131 ...\n    {{ end }}<\/code><\/pre>\n<p>*   <strong>D\u00f6ng\u00fcler (<code>range<\/code>):<\/strong> Bir liste veya harita \u00fczerindeki \u00f6\u011feleri yinelemek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-go\"># \u00d6rnek: Birden fazla container portunu tan\u0131mlama\n    ports:\n    {{- range .Values.service.ports }}\n      - name: {{ .name }}\n        port: {{ .port }}\n        targetPort: {{ .targetPort }}\n    {{- end }}<\/code><\/pre>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar<\/h4>\n<p>Bir Chart, ba\u015fka Chart&#8217;lara ba\u011f\u0131ml\u0131 olabilir. Bu ba\u011f\u0131ml\u0131l\u0131klar, <code>Chart.yaml<\/code> dosyas\u0131nda <code>dependencies<\/code> b\u00f6l\u00fcm\u00fcnde belirtilir:<\/p>\n<pre><code class=\"language-yaml\">apiVersion: v1\nname: my-app\nversion: 0.1.0\ndependencies:\n  - name: mysql\n    version: 8.x.x\n    repository: \"https:\/\/charts.bitnami.com\/bitnami\" # Veya ba\u015fka bir depo\n    condition: mysql.enabled # Sadece mysql.enabled true ise y\u00fckle<\/code><\/pre>\n<p>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 indirmek ve g\u00fcncellemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm dependency update my-app\/ # veya Chart dizinindeyken 'helm dependency update .'<\/code><\/pre>\n<h3>Uygulama Y\u00fckleme (Release Olu\u015fturma)<\/h3>\n<p>Helm ile bir uygulamay\u0131 Kubernetes k\u00fcmenize y\u00fcklemek, bir Chart&#8217;tan bir &#8220;release&#8221; olu\u015fturmak anlam\u0131na gelir.<\/p>\n<h4>Chart Bulma<\/h4>\n<p>Helm Chart&#8217;lar\u0131n\u0131 bulman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<p>*   <strong>Helm Hub (eski):<\/strong> Helm Hub, \u00e7e\u015fitli Chart depolar\u0131ndan Chart&#8217;lar\u0131 aramak i\u00e7in merkezi bir yerdi. Art\u0131k yerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde Artifact Hub&#8217;a b\u0131rakm\u0131\u015ft\u0131r.<br \/>\n*   <strong>Artifact Hub:<\/strong> Hem Helm 2 hem de Helm 3 Chart&#8217;lar\u0131 i\u00e7in pop\u00fcler bir Chart deposu ve arama motorudur.<br \/>\n*   <strong>Resmi Helm Chart Depolar\u0131:<\/strong> Ge\u00e7mi\u015fte <code>stable<\/code> ve <code>incubator<\/code> gibi resmi depolar vard\u0131, ancak bunlar ar\u015fivlenmi\u015ftir. Art\u0131k \u00e7o\u011fu Chart sa\u011flay\u0131c\u0131n\u0131n kendi deposu bulunmaktad\u0131r (\u00f6rne\u011fin Bitnami, Prometheus).<br \/>\n*   <strong>\u00d6zel Depolar:<\/strong> Kendi \u00f6zel Chart depolar\u0131n\u0131z\u0131 kurabilir veya ba\u015fkalar\u0131n\u0131n depolar\u0131n\u0131 ekleyebilirsiniz.<\/p>\n<pre><code class=\"language-bash\">helm repo add bitnami https:\/\/charts.bitnami.com\/bitnami\n    helm repo update # Depolar\u0131 g\u00fcnceller\n    helm search bitnami\/nginx # Bitnami deposundaki Nginx Chart'\u0131n\u0131 arar<\/code><\/pre>\n<p>*   <strong>Yerel Chart&#8217;lar:<\/strong> Kendi olu\u015fturdu\u011funuz veya indirdi\u011finiz Chart&#8217;lar\u0131 do\u011frudan dosya sisteminden y\u00fckleyebilirsiniz.<\/p>\n<h4>Bir Chart Kurma<\/h4>\n<p>Bir Chart&#8217;\u0131 kurmak i\u00e7in <code>helm install<\/code> komutu kullan\u0131l\u0131r. Bu komut bir Chart&#8217;\u0131 al\u0131r, \u015fablonlar\u0131 i\u015fler ve Kubernetes API&#8217;si arac\u0131l\u0131\u011f\u0131yla kaynaklar\u0131 k\u00fcmenize da\u011f\u0131t\u0131r.<\/p>\n<pre><code class=\"language-bash\">helm install [CHART_ADI | CHART_YOLU] --name [RELEASE_ADI] [OPS\u0130YONLAR]<\/code><\/pre>\n<p>*   <code>[CHART_ADI | CHART_YOLU]<\/code>: Kurulacak Chart&#8217;\u0131n ad\u0131 (\u00f6rne\u011fin <code>stable\/nginx-ingress<\/code>) veya yerel dosya yolu (\u00f6rne\u011fin <code>.\/my-app<\/code>).<br \/>\n*   <code>--name [RELEASE_ADI]<\/code>: Bu release i\u00e7in benzersiz bir ad atar. Bu ad, release&#8217;i tan\u0131mlamak, y\u00fckseltmek veya silmek i\u00e7in kullan\u0131l\u0131r. <strong>Helm 2&#8217;de bu parametre zorunludur.<\/strong><br \/>\n*   <code>--set<\/code>: <code>values.yaml<\/code> dosyas\u0131ndaki belirli de\u011ferleri komut sat\u0131r\u0131ndan ge\u00e7ersiz k\u0131lmak i\u00e7in kullan\u0131l\u0131r. Birden fazla <code>--set<\/code> parametresi kullan\u0131labilir.<\/p>\n<pre><code class=\"language-bash\">helm install stable\/nginx-ingress --name my-nginx --set controller.replicaCount=2,defaultBackend.enabled=false<\/code><\/pre>\n<p>*   <code>-f<\/code> veya <code>--values<\/code>: Bir veya daha fazla \u00f6zel <code>values.yaml<\/code> dosyas\u0131n\u0131 belirtmek i\u00e7in kullan\u0131l\u0131r. Bu dosyalar, Chart&#8217;\u0131n kendi <code>values.yaml<\/code> dosyas\u0131ndaki de\u011ferleri ge\u00e7ersiz k\u0131lar.<\/p>\n<pre><code class=\"language-bash\">helm install stable\/mysql --name my-db -f my-custom-values.yaml<\/code><\/pre>\n<p>*   <code>--namespace<\/code>: Release&#8217;in kurulaca\u011f\u0131 Kubernetes namespace&#8217;ini belirtir. E\u011fer belirtilmezse, Tiller&#8217;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 namespace&#8217;e veya <code>kubectl<\/code>&#8216;\u0131n varsay\u0131lan namespace&#8217;ine kurulabilir.<br \/>\n*   <code>--version<\/code>: Chart&#8217;\u0131n belirli bir s\u00fcr\u00fcm\u00fcn\u00fc kurmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">helm install stable\/nginx-ingress --name my-nginx --version 1.24.3<\/code><\/pre>\n<p><strong>\u00d6rnek: Nginx Kurulumu<\/strong><\/p>\n<p>Varsay\u0131lan <code>stable<\/code> deposu ar\u015fivlenmi\u015f olsa da, \u00e7o\u011fu Helm 2 kurulumunda hala yap\u0131land\u0131r\u0131lm\u0131\u015f olabilir. Bir \u00f6rnek olarak <code>stable\/nginx-ingress<\/code> Chart&#8217;\u0131n\u0131 kullanal\u0131m:<\/p>\n<pre><code class=\"language-bash\"># Nginx Ingress Controller'\u0131 kur\nhelm install stable\/nginx-ingress --name my-nginx-ingress --namespace default \\\n  --set controller.replicaCount=2 \\\n  --set controller.service.type=NodePort \\\n  --set controller.publishService.enabled=true<\/code><\/pre>\n<p>Bu komut, <code>my-nginx-ingress<\/code> ad\u0131nda bir release olu\u015fturacak, Nginx Ingress Controller&#8217;\u0131 <code>default<\/code> namespace&#8217;ine 2 replika ile kuracak ve Service&#8217;i NodePort olarak ayarlayacakt\u0131r.<\/p>\n<h4>Release&#8217;leri Listeleme<\/h4>\n<p>K\u00fcmenizde y\u00fckl\u00fc olan t\u00fcm Helm release&#8217;lerini g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm ls # veya helm list<\/code><\/pre>\n<p>Bu komut, release ad\u0131n\u0131, Chart&#8217;\u0131, s\u00fcr\u00fcm\u00fcn\u00fc, durumunu ve son g\u00fcncelleme zaman\u0131n\u0131 g\u00f6sterir.<\/p>\n<h4>Release Bilgilerini G\u00f6r\u00fcnt\u00fcleme<\/h4>\n<p>Belirli bir release hakk\u0131nda detayl\u0131 bilgi almak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm status [RELEASE_ADI]<\/code><\/pre>\n<p>Bu komut, release&#8217;in durumunu, da\u011f\u0131t\u0131lan Kubernetes kaynaklar\u0131n\u0131, <code>NOTES.txt<\/code> i\u00e7eri\u011fini ve daha fazlas\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>Bir release i\u00e7in kullan\u0131lan de\u011ferleri g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm get values [RELEASE_ADI]<\/code><\/pre>\n<p>Bir release taraf\u0131ndan da\u011f\u0131t\u0131lan t\u00fcm Kubernetes manifestlerini g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm get manifest [RELEASE_ADI]<\/code><\/pre>\n<h3>Uygulama G\u00fcncelleme ve Geri Alma<\/h3>\n<p>Helm, kurulu uygulamalar\u0131n g\u00fcncellenmesi ve gerekirse \u00f6nceki bir s\u00fcr\u00fcme geri al\u0131nmas\u0131 s\u00fcre\u00e7lerini de kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Uygulama G\u00fcncelleme<\/h4>\n<p>Bir release&#8217;i g\u00fcncellemek i\u00e7in <code>helm upgrade<\/code> komutu kullan\u0131l\u0131r. Bu, Chart&#8217;\u0131n yeni bir s\u00fcr\u00fcm\u00fcn\u00fc da\u011f\u0131tmak veya mevcut Chart&#8217;\u0131n yap\u0131land\u0131rma de\u011ferlerini de\u011fi\u015ftirmek i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code class=\"language-bash\">helm upgrade [RELEASE_ADI] [CHART_ADI | CHART_YOLU] [OPS\u0130YONLAR]<\/code><\/pre>\n<p>*   <code>[RELEASE_ADI]<\/code>: G\u00fcncellenecek release&#8217;in ad\u0131.<br \/>\n*   <code>[CHART_ADI | CHART_YOLU]<\/code>: Yeni Chart&#8217;\u0131n ad\u0131 veya yolu. Bu, ayn\u0131 Chart&#8217;\u0131n yeni bir s\u00fcr\u00fcm\u00fc veya tamamen farkl\u0131 bir Chart olabilir (ancak genellikle ayn\u0131 Chart&#8217;\u0131n yeni s\u00fcr\u00fcm\u00fc tercih edilir).<br \/>\n*   <code>--set<\/code> veya <code>-f<\/code>: G\u00fcncelleme s\u0131ras\u0131nda yeni yap\u0131land\u0131rma de\u011ferlerini ge\u00e7ersiz k\u0131lmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p><strong>\u00d6rnek: Nginx Replikalar\u0131n\u0131 G\u00fcncelleme<\/strong><\/p>\n<p>Yukar\u0131da kurdu\u011fumuz <code>my-nginx-ingress<\/code> release&#8217;inin replika say\u0131s\u0131n\u0131 2&#8217;den 3&#8217;e \u00e7\u0131karmak istedi\u011fimizi varsayal\u0131m:<\/p>\n<pre><code class=\"language-bash\">helm upgrade my-nginx-ingress stable\/nginx-ingress --set controller.replicaCount=3<\/code><\/pre>\n<p>Bu komut, <code>my-nginx-ingress<\/code> release&#8217;ini g\u00fcncelleyecek ve Nginx Ingress Controller&#8217;\u0131n replika say\u0131s\u0131n\u0131 3&#8217;e \u00e7\u0131karacakt\u0131r. Helm, mevcut kaynaklar\u0131 ak\u0131ll\u0131ca g\u00fcnceller (\u00f6rne\u011fin, Deployment&#8217;\u0131 g\u00fcnceller, mevcut Pod&#8217;lar\u0131 kapat\u0131p yenilerini ba\u015flat\u0131r).<\/p>\n<h4>Geri Alma (Rollback)<\/h4>\n<p>Bir g\u00fcncelleme sonras\u0131 sorun ya\u015fand\u0131\u011f\u0131nda, Helm, uygulamay\u0131 \u00f6nceki bir kararl\u0131 duruma geri alman\u0131z\u0131 sa\u011flar. Her <code>install<\/code> ve <code>upgrade<\/code> i\u015flemi bir revizyon numaras\u0131 olu\u015fturur.<\/p>\n<p>\u00d6nceki revizyonlar\u0131 g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm history [RELEASE_ADI]<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da, her bir revizyonun numaras\u0131, durumu ve a\u00e7\u0131klamas\u0131 yer al\u0131r.<\/p>\n<p>Bir release&#8217;i belirli bir revizyona geri almak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">helm rollback [RELEASE_ADI] [REV\u0130ZYON_NUMARASI]<\/code><\/pre>\n<p><strong>\u00d6rnek: Nginx&#8217;i \u00d6nceki Revizyona Geri Alma<\/strong><\/p>\n<p><code>my-nginx-ingress<\/code> release&#8217;ini bir \u00f6nceki revizyona geri almak istedi\u011fimizi varsayal\u0131m (\u00f6rne\u011fin, replika say\u0131s\u0131n\u0131 3&#8217;e \u00e7\u0131kard\u0131\u011f\u0131m\u0131z g\u00fcncellemeden \u00f6nceki duruma):<\/p>\n<pre><code class=\"language-bash\">helm rollback my-nginx-ingress 1 # Revizyon numaras\u0131 'helm history' \u00e7\u0131kt\u0131s\u0131ndan al\u0131n\u0131r.<\/code><\/pre>\n<p>Bu komut, release&#8217;i belirtilen revizyonun yap\u0131land\u0131rma ve Chart durumuna geri d\u00f6nd\u00fcrecektir.<\/p>\n<h3>Uygulama Kald\u0131rma<\/h3>\n<p>Bir Kubernetes k\u00fcmesinden Helm ile kurulmu\u015f bir uygulamay\u0131 kald\u0131rmak da olduk\u00e7a basittir.<\/p>\n<pre><code class=\"language-bash\">helm delete [RELEASE_ADI] [OPS\u0130YONLAR]<\/code><\/pre>\n<p>*   <code>[RELEASE_ADI]<\/code>: Kald\u0131r\u0131lacak release&#8217;in ad\u0131.<br \/>\n*   <code>--purge<\/code>: Bu opsiyon, release&#8217;in t\u00fcm ge\u00e7mi\u015fini ve ili\u015fkili t\u00fcm Kubernetes kaynaklar\u0131n\u0131 (Deployment, Service, PVC vb.) siler. <code>--purge<\/code> olmadan silindi\u011finde, release ge\u00e7mi\u015fi saklan\u0131r ve gelecekte geri al\u0131nabilir.<\/p>\n<p><strong>\u00d6rnek: Nginx Ingress Controller&#8217;\u0131 Kald\u0131rma<\/strong><\/p>\n<pre><code class=\"language-bash\">helm delete my-nginx-ingress --purge<\/code><\/pre>\n<p>Bu komut, <code>my-nginx-ingress<\/code> release&#8217;ini ve onunla ili\u015fkili t\u00fcm Kubernetes kaynaklar\u0131n\u0131 (Deployment, Service, Pod&#8217;lar vb.) k\u00fcmeden tamamen silecektir.<\/p>\n<h3>Kendi Chart&#8217;\u0131n\u0131z\u0131 Olu\u015fturma<\/h3>\n<p>Helm ile mevcut Chart&#8217;lar\u0131 kullanmak harika olsa da, kendi uygulamalar\u0131n\u0131z i\u00e7in \u00f6zel Chart&#8217;lar olu\u015fturmak, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi otomatikle\u015ftirmek i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fc bir y\u00f6ntemdir.<\/p>\n<p><strong>1. Yeni Bir Chart Olu\u015fturma:<\/strong><\/p>\n<p>Helm, yeni bir Chart yap\u0131s\u0131 olu\u015fturmak i\u00e7in bir komut sa\u011flar:<\/p>\n<pre><code class=\"language-bash\">helm create my-custom-app<\/code><\/pre>\n<p>Bu komut, <code>my-custom-app<\/code> ad\u0131nda bir dizin olu\u015fturur ve i\u00e7ine temel bir Chart yap\u0131s\u0131 ekler. Bu yap\u0131, Nginx gibi basit bir web uygulamas\u0131n\u0131 da\u011f\u0131tmak i\u00e7in varsay\u0131lan \u015fablonlar (Deployment, Service, Ingress) ve <code>values.yaml<\/code> dosyas\u0131 i\u00e7erir.<\/p>\n<p><strong>2. Olu\u015fturulan Dizini \u0130nceleme:<\/strong><\/p>\n<pre><code class=\"language-\">my-custom-app\/\n  Chart.yaml\n  values.yaml\n  charts\/\n  templates\/\n    NOTES.txt\n    _helpers.tpl\n    deployment.yaml\n    ingress.yaml\n    service.yaml\n    tests\/\n      test-connection.yaml<\/code><\/pre>\n<p>Bu temel yap\u0131, \u00e7o\u011fu uygulama i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<p><strong>3. Chart&#8217;\u0131 \u00d6zelle\u015ftirme:<\/strong><\/p>\n<p>*   <strong><code>Chart.yaml<\/code>:<\/strong> Uygulaman\u0131z\u0131n ad\u0131n\u0131, s\u00fcr\u00fcm\u00fcn\u00fc ve a\u00e7\u0131klamas\u0131n\u0131 g\u00fcncelleyin.<br \/>\n*   <strong><code>values.yaml<\/code>:<\/strong> Uygulaman\u0131z\u0131n yap\u0131land\u0131rma se\u00e7eneklerini (\u00f6rne\u011fin, imaj ad\u0131, portlar, ortam de\u011fi\u015fkenleri, kaynak limitleri) tan\u0131mlay\u0131n.<br \/>\n*   <strong><code>templates\/<\/code>:<\/strong><br \/>\n    *   <code>deployment.yaml<\/code>: Uygulaman\u0131z\u0131n konteyner imaj\u0131n\u0131, portlar\u0131n\u0131, ortam de\u011fi\u015fkenlerini ve di\u011fer da\u011f\u0131t\u0131m ayarlar\u0131n\u0131 belirleyin. <code>values.yaml<\/code>&#8216;daki de\u011ferleri kullanarak \u015fablonlar\u0131 dinamik hale getirin.<br \/>\n    *   <code>service.yaml<\/code>: Uygulaman\u0131z\u0131n Kubernetes i\u00e7indeki a\u011f eri\u015fimini tan\u0131mlay\u0131n.<br \/>\n    *   <code>ingress.yaml<\/code>: E\u011fer uygulaman\u0131z\u0131n d\u0131\u015far\u0131dan eri\u015filmesi gerekiyorsa, Ingress kaynaklar\u0131n\u0131 yap\u0131land\u0131r\u0131n. <code>ingress.enabled<\/code> gibi bir de\u011ferle Ingress&#8217;i a\u00e7\u0131p kapatmay\u0131 sa\u011flayabilirsiniz.<br \/>\n    *   Yeni kaynaklara ihtiyac\u0131n\u0131z varsa (\u00f6rne\u011fin, <code>ConfigMap<\/code>, <code>Secret<\/code>, <code>PersistentVolumeClaim<\/code>), <code>templates\/<\/code> dizinine yeni <code>.yaml<\/code> dosyalar\u0131 ekleyin.<br \/>\n    *   <code>_helpers.tpl<\/code> dosyas\u0131n\u0131, tekrar eden kod par\u00e7ac\u0131klar\u0131n\u0131 veya karma\u015f\u0131k adland\u0131rma mant\u0131\u011f\u0131n\u0131 soyutlamak i\u00e7in kullanabilirsiniz.<\/p>\n<p><strong>4. Chart&#8217;\u0131 Yerel Olarak Test Etme:<\/strong><\/p>\n<p>Chart&#8217;\u0131n\u0131z\u0131 k\u00fcmenize kurmadan \u00f6nce, Helm&#8217;in olu\u015fturaca\u011f\u0131 Kubernetes manifestlerini g\u00f6rmek ve olas\u0131 hatalar\u0131 tespit etmek i\u00e7in <code>helm install --dry-run --debug<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">helm install .\/my-custom-app --name my-test-release --dry-run --debug<\/code><\/pre>\n<p>Bu komut, Chart&#8217;\u0131n\u0131z\u0131 Tiller&#8217;a g\u00f6nderir, \u015fablonlar\u0131 i\u015fler, ancak kaynaklar\u0131 Kubernetes API&#8217;sine g\u00f6ndermez. Bunun yerine, olu\u015fturulan t\u00fcm manifestleri ve hata ay\u0131klama bilgilerini konsola yazd\u0131r\u0131r. Bu, Chart&#8217;\u0131n\u0131z\u0131n do\u011fru \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olmak i\u00e7in \u00e7ok de\u011ferli bir ad\u0131md\u0131r.<\/p>\n<p><strong>5. Chart&#8217;\u0131 Paketleme:<\/strong><\/p>\n<p>Chart&#8217;\u0131n\u0131z\u0131 di\u011ferleriyle payla\u015fmak veya bir depoya y\u00fcklemek i\u00e7in onu bir <code>.tgz<\/code> paketi halinde s\u0131k\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">helm package my-custom-app\/<\/code><\/pre>\n<p>Bu komut, <code>my-custom-app-0.1.0.tgz<\/code> gibi bir dosya olu\u015fturur.<\/p>\n<h3>G\u00fcvenlik Hususlar\u0131 ve En \u0130yi Uygulamalar (Helm 2 i\u00e7in)<\/h3>\n<p>Helm 2 kullan\u0131rken, \u00f6zellikle Tiller&#8217;\u0131n varl\u0131\u011f\u0131 nedeniyle g\u00fcvenlik konusunda dikkatli olmak \u00f6nemlidir. \u0130\u015fte baz\u0131 en iyi uygulamalar:<\/p>\n<h4>Tiller G\u00fcvenli\u011fi<\/h4>\n<p>*   <strong>RBAC ile Minimum Yetki:<\/strong> Tiller&#8217;a <code>cluster-admin<\/code> rol\u00fc vermek en kolay yol olsa da, en g\u00fcvenli yol de\u011fildir. Yukar\u0131da g\u00f6sterildi\u011fi gibi, Tiller i\u00e7in \u00f6zel bir <code>ServiceAccount<\/code> olu\u015fturun ve ona yaln\u0131zca ihtiya\u00e7 duydu\u011fu yetkileri veren k\u0131s\u0131tl\u0131 bir <code>ClusterRole<\/code> veya <code>Role<\/code> atay\u0131n. \u00d6rne\u011fin, Tiller&#8217;\u0131n sadece belirli bir namespace&#8217;te kaynaklar\u0131 y\u00f6netmesine izin verebilirsiniz.<br \/>\n*   <strong>Ayr\u0131 Namespace:<\/strong> Tiller&#8217;\u0131 <code>kube-system<\/code> yerine \u00f6zel bir <code>helm-tiller<\/code> gibi ayr\u0131 bir namespace&#8217;e kurmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<br \/>\n*   <strong>TLS ile G\u00fcvenli \u0130leti\u015fim:<\/strong> Helm CLI ve Tiller aras\u0131nda TLS (Transport Layer Security) kullanarak ileti\u015fimi \u015fifrelemek m\u00fcmk\u00fcnd\u00fcr. Bu, ileti\u015fimin dinlenmesini veya manip\u00fcle edilmesini \u00f6nler. Ancak, bu yap\u0131land\u0131rma daha karma\u015f\u0131kt\u0131r ve sertifika y\u00f6netimi gerektirir. \u00dcretim ortamlar\u0131nda ciddi g\u00fcvenlik gereksinimleri olan durumlarda d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n<h4>Chart Kaynaklar\u0131<\/h4>\n<p>*   <strong>G\u00fcvenilir Chart Depolar\u0131:<\/strong> Yaln\u0131zca g\u00fcvenilir ve bilinen Chart depolar\u0131ndan Chart&#8217;lar\u0131 kullan\u0131n. Bilinmeyen kaynaklardan indirilen Chart&#8217;lar k\u00f6t\u00fc ama\u00e7l\u0131 kod i\u00e7erebilir.<br \/>\n*   <strong>Chart&#8217;lar\u0131 \u0130nceleme:<\/strong> Bir Chart&#8217;\u0131 kurmadan \u00f6nce, \u00f6zellikle \u00fc\u00e7\u00fcnc\u00fc taraf Chart&#8217;lar\u0131 i\u00e7in, <code>templates\/<\/code> dizinindeki manifestleri ve <code>values.yaml<\/code> dosyas\u0131n\u0131 inceleyin. Neler da\u011f\u0131t\u0131ld\u0131\u011f\u0131n\u0131 ve hangi yap\u0131land\u0131rma se\u00e7eneklerinin oldu\u011funu anlay\u0131n.<br \/>\n*   <strong><code>--dry-run --debug<\/code> Kullan\u0131m\u0131:<\/strong> Herhangi bir Chart&#8217;\u0131 kurmadan \u00f6nce <code>helm install --dry-run --debug<\/code> komutunu kullanarak olu\u015fturulacak t\u00fcm Kubernetes kaynaklar\u0131n\u0131 g\u00f6zden ge\u00e7irin.<\/p>\n<h4><code>values.yaml<\/code> Y\u00f6netimi<\/h4>\n<p>*   <strong>Hassas Bilgilerden Ka\u00e7\u0131nma:<\/strong> <code>values.yaml<\/code> dosyalar\u0131nda veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 gibi hassas bilgileri do\u011frudan saklamaktan ka\u00e7\u0131n\u0131n. Bunun yerine, Kubernetes <code>Secret<\/code> kaynaklar\u0131n\u0131 kullan\u0131n. Chart&#8217;\u0131n\u0131z\u0131n <code>Secret<\/code> kaynaklar\u0131n\u0131 olu\u015fturmas\u0131n\u0131 sa\u011flayabilir veya bunlar\u0131 manuel olarak olu\u015fturup Chart&#8217;\u0131n bu Secret&#8217;lar\u0131 referans almas\u0131n\u0131 sa\u011flayabilirsiniz.<br \/>\n*   <strong>GitOps Yakla\u015f\u0131m\u0131:<\/strong> <code>values.yaml<\/code> dosyalar\u0131n\u0131z\u0131 versiyon kontrol sistemlerinde (Git) saklay\u0131n. Bu, yap\u0131land\u0131rma de\u011fi\u015fikliklerinin izlenmesini ve denetlenmesini sa\u011flar.<br \/>\n*   <strong>CI\/CD Entegrasyonu:<\/strong> Helm&#8217;i CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) i\u015flem hatlar\u0131n\u0131za entegre edin. Bu, otomatik test ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri sa\u011flar.<\/p>\n<h4>Versiyonlama ve Geri Alma<\/h4>\n<p>*   <strong>Chart Versiyonlama:<\/strong> Chart&#8217;lar\u0131n\u0131z i\u00e7in anlaml\u0131 versiyon numaralar\u0131 kullan\u0131n (Semantic Versioning). Bu, de\u011fi\u015fiklikleri izlemeyi ve uyumlulu\u011fu y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Geri Alma Stratejileri:<\/strong> Uygulama g\u00fcncellemeleri sonras\u0131 sorunlar i\u00e7in her zaman bir geri alma plan\u0131n\u0131z oldu\u011fundan emin olun. Helm&#8217;in <code>rollback<\/code> \u00f6zelli\u011fi bu konuda b\u00fcy\u00fck kolayl\u0131k sa\u011flar. <code>helm history<\/code> komutuyla revizyonlar\u0131 takip edin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Helm 2, Kubernetes k\u00fcmelerinde yaz\u0131l\u0131m da\u011f\u0131t\u0131m\u0131n\u0131 ve y\u00f6netimini basitle\u015ftiren devrim niteli\u011finde bir ara\u00e7 olmu\u015ftur. Tiller mimarisi nedeniyle baz\u0131 g\u00fcvenlik endi\u015feleri bar\u0131nd\u0131rsa da, uygulama ya\u015fam d\u00f6ng\u00fcs\u00fc y\u00f6netimi, \u015fablonlama yetenekleri ve Chart&#8217;lar arac\u0131l\u0131\u011f\u0131yla yeniden kullan\u0131labilirlik gibi sa\u011flad\u0131\u011f\u0131 avantajlar, onu uzun s\u00fcre Kubernetes ekosisteminin vazge\u00e7ilmez bir par\u00e7as\u0131 haline getirmi\u015ftir.<\/p>\n<p>Bu makale boyunca, Helm 2&#8217;nin temel kavramlar\u0131n\u0131, kurulumunu, Chart yap\u0131s\u0131n\u0131, uygulama y\u00fckleme, g\u00fcncelleme, geri alma ve kald\u0131rma i\u015flemlerini detayl\u0131 bir \u015fekilde ele ald\u0131k. Kendi Chart&#8217;\u0131n\u0131z\u0131 olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 ve Helm 2 kullan\u0131rken dikkat edilmesi gereken g\u00fcvenlik hususlar\u0131n\u0131 da inceledik.<\/p>\n<p>Her ne kadar Helm 3, Tiller&#8217;\u0131 kald\u0131rarak ve g\u00fcvenlik mimarisini iyile\u015ftirerek daha modern bir yakla\u015f\u0131m sunsa da, d\u00fcnya genelinde hala bir\u00e7ok eski proje ve altyap\u0131 Helm 2&#8217;yi kullanmaktad\u0131r. Bu nedenle, Helm 2&#8217;yi anlamak ve onunla \u00e7al\u0131\u015fabilmek, mevcut sistemlerle etkile\u015fim kurmak zorunda kalan geli\u015ftiriciler ve operasyon ekipleri i\u00e7in paha bi\u00e7ilmez bir beceridir.<\/p>\n<p>Kubernetes ekosistemi s\u00fcrekli geli\u015fti\u011fi i\u00e7in, Helm&#8217;in en son s\u00fcr\u00fcm\u00fcn\u00fc (Helm 3) ve onun sundu\u011fu yeni \u00f6zellikleri takip etmek her zaman \u00f6nemlidir. Ancak, Helm 2&#8217;nin temel prensiplerini kavramak, genel olarak Kubernetes&#8217;teki uygulama paketleme ve y\u00f6netim mant\u0131\u011f\u0131n\u0131 anlamak i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r. Uygulama da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi otomatikle\u015ftirmek, standartla\u015ft\u0131rmak ve y\u00f6netmek i\u00e7in Helm&#8217;in g\u00fcc\u00fcnden tam olarak yararlanmak, modern bulut yerel geli\u015ftirme ve operasyon pratiklerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma\nKubernetes, konteynerize edilmi\u015f uygulamalar\u0131 da\u011f\u0131tmak, \u00f6l\u00e7eklendirmek v","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-35111","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>Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma - 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\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma\" \/>\n<meta property=\"og:description\" content=\"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma Kubernetes, konteynerize edilmi\u015f uygulamalar\u0131 da\u011f\u0131tmak, \u00f6l\u00e7eklendirmek v\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-25T16:41:06+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma\",\"datePublished\":\"2025-11-25T16:41:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\"},\"wordCount\":4137,\"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\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\",\"name\":\"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-25T16:41:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma\"}]},{\"@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 K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma - 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\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma","og_description":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma Kubernetes, konteynerize edilmi\u015f uygulamalar\u0131 da\u011f\u0131tmak, \u00f6l\u00e7eklendirmek v","og_url":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-25T16:41:06+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma","datePublished":"2025-11-25T16:41:06+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/"},"wordCount":4137,"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\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/","url":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/","name":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-25T16:41:06+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-kumelerinde-yazilimi-helm-2-paket-yoneticisi-ile-kurma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes K\u00fcmelerinde Yaz\u0131l\u0131m\u0131 Helm 2 Paket Y\u00f6neticisi ile Kurma"}]},{"@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\/35111","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=35111"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35111\/revisions"}],"predecessor-version":[{"id":35112,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35111\/revisions\/35112"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}