{"id":44537,"date":"2026-09-06T09:02:53","date_gmt":"2026-09-06T06:02:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/"},"modified":"2026-09-06T09:02:53","modified_gmt":"2026-09-06T06:02:53","slug":"ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/","title":{"rendered":"EKS&#8217;te Karpenter&#8217;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r?"},"content":{"rendered":"<h2>EKS&#8217;te Karpenter&#8217;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Kubernetes k\u00fcmelerinde kaynak y\u00f6netimi ve maliyet optimizasyonu, modern bulut altyap\u0131lar\u0131n\u0131n en kritik bile\u015fenlerinden biri haline geldi. Amazon EKS (Elastic Kubernetes Service) \u00fczerinde dinamik ve verimli bir node sa\u011flama mekanizmas\u0131 arayanlar i\u00e7in Karpenter, Terraform ile entegre edildi\u011finde g\u00fc\u00e7l\u00fc ve d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc bir \u00e7\u00f6z\u00fcm sunar. Bu makalede, Karpenter&#8217;\u0131n ne oldu\u011funu, EKS ortam\u0131nda neden bu kadar \u00f6nemli oldu\u011funu ve altyap\u0131y\u0131 kod olarak y\u00f6netme (Infrastructure as Code &#8211; IaC) yakla\u015f\u0131m\u0131n\u0131n bir par\u00e7as\u0131 olarak Terraform kullanarak ad\u0131m ad\u0131m nas\u0131l kurulaca\u011f\u0131n\u0131 derinlemesine inceleyece\u011fiz. Amac\u0131m\u0131z, hem yeni ba\u015flayanlar\u0131n konuyu temelden anlamas\u0131n\u0131 sa\u011flamak hem de deneyimli kullan\u0131c\u0131lar i\u00e7in pratik kurulum ad\u0131mlar\u0131 ve geli\u015fmi\u015f ipu\u00e7lar\u0131 sunmakt\u0131r.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, uygulamalar\u0131n anl\u0131k taleplere g\u00f6re \u00f6l\u00e7eklenebilmesi hayati \u00f6nem ta\u015f\u0131r. Geleneksel y\u00f6ntemlerle bu \u00f6l\u00e7eklenebilirli\u011fi sa\u011flamak hem maliyetli hem de operasyonel olarak karma\u015f\u0131k olabilir. \u0130\u015fte tam da bu noktada Karpenter gibi ak\u0131ll\u0131 bir node sa\u011flay\u0131c\u0131 devreye giriyor. \u00d6zellikle AWS ekosisteminde, EKS k\u00fcmelerinizdeki pod&#8217;lar\u0131n ihtiya\u00e7lar\u0131na g\u00f6re en uygun EC2 instance&#8217;lar\u0131n\u0131 otomatik ve h\u0131zl\u0131 bir \u015fekilde temin ederek, hem performans art\u0131\u015f\u0131 hem de \u00f6nemli \u00f6l\u00e7\u00fcde maliyet tasarrufu vaat ediyor. Terraform ile bu kurulumu otomatize etmek ise, altyap\u0131n\u0131z\u0131n tutarl\u0131l\u0131\u011f\u0131n\u0131 ve y\u00f6netilebilirli\u011fini art\u0131rarak size b\u00fcy\u00fck bir kolayl\u0131k sunar.<\/p>\n<h2>Karpenter Nedir ve Geleneksel Otomatik \u00d6l\u00e7eklendirmeden Fark\u0131 Ne?<\/h2>\n<p>Karpenter, AWS taraf\u0131ndan geli\u015ftirilen, Kubernetes k\u00fcmeleri i\u00e7in y\u00fcksek performansl\u0131, esnek ve maliyet optimize edilmi\u015f bir node sa\u011flay\u0131c\u0131d\u0131r. Geleneksel Kubernetes Cluster Autoscaler (K\u00fcme Otomatik \u00d6l\u00e7eklendiricisi) ile kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, Karpenter&#8217;\u0131n \u00e7al\u0131\u015fma mant\u0131\u011f\u0131 ve sundu\u011fu avantajlar onu \u00f6ne \u00e7\u0131kar\u0131r. Cluster Autoscaler, pod&#8217;lar\u0131n planlanamad\u0131\u011f\u0131 durumlarda mevcut node gruplar\u0131ndaki node say\u0131s\u0131n\u0131 art\u0131rarak \u00e7al\u0131\u015f\u0131r. Bu, genellikle \u00f6nceden tan\u0131mlanm\u0131\u015f node gruplar\u0131na ba\u011fl\u0131d\u0131r ve yeni bir node&#8217;un ba\u015flat\u0131lmas\u0131 i\u00e7in belirli bir bekleme s\u00fcresi gerektirebilir. Ayr\u0131ca, farkl\u0131 i\u015f y\u00fckleri i\u00e7in farkl\u0131 node gruplar\u0131 tan\u0131mlamak operasyonel karma\u015f\u0131kl\u0131\u011f\u0131 art\u0131r\u0131r. Karpenter ise bu s\u00fcreci \u00e7ok daha dinamik ve verimli bir \u015fekilde ele al\u0131r.<\/p>\n<p>Karpenter&#8217;\u0131n temel fark\u0131, pod&#8217;lar\u0131n bekleyen durumlar\u0131n\u0131 do\u011frudan g\u00f6zlemlemesi ve bu pod&#8217;lar\u0131n gereksinimlerini (CPU, bellek, GPU, depolama, mimari vb.) kar\u015f\u0131layacak en uygun EC2 instance&#8217;\u0131n\u0131 AWS API&#8217;leri arac\u0131l\u0131\u011f\u0131yla an\u0131nda sa\u011flamas\u0131d\u0131r. Bu &#8220;tam zaman\u0131nda (just-in-time)&#8221; provisioning (kaynak sa\u011flama) yakla\u015f\u0131m\u0131, node&#8217;lar\u0131n gereksiz yere bekletilmesinin veya yanl\u0131\u015f boyutland\u0131r\u0131lmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7er. \u00d6rne\u011fin, bir pod sadece 1 CPU ve 2GB bellek istiyorsa, Karpenter tam da bu gereksinimleri kar\u015f\u0131layacak en k\u00fc\u00e7\u00fck ve uygun maliyetli instance&#8217;\u0131 bulmaya \u00e7al\u0131\u015f\u0131r. Bu, \u00f6zellikle Spot Instance&#8217;lar (kesintiye u\u011frayabilen, daha uygun maliyetli EC2 instance&#8217;lar\u0131) ve farkl\u0131 mimariler (Graviton gibi) kullan\u0131ld\u0131\u011f\u0131nda b\u00fcy\u00fck maliyet avantajlar\u0131 sa\u011flar.<\/p>\n<p>Karpenter&#8217;\u0131n sundu\u011fu ba\u015fl\u0131ca faydalar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Daha H\u0131zl\u0131 \u00d6l\u00e7eklenme:<\/strong> Pod&#8217;lar\u0131n bekleyen durumlar\u0131n\u0131 an\u0131nda alg\u0131lar ve saniyeler i\u00e7inde yeni node&#8217;lar\u0131 devreye al\u0131r. Bu, uygulamalar\u0131n ani y\u00fck art\u0131\u015flar\u0131na \u00e7ok daha h\u0131zl\u0131 yan\u0131t vermesini sa\u011flar.<\/li>\n<li><strong>Geli\u015fmi\u015f Maliyet Optimizasyonu:<\/strong> En uygun instance tipini, Spot Instance&#8217;lar\u0131 ve farkl\u0131 Availability Zone&#8217;lar\u0131 (Eri\u015fim Alanlar\u0131) ak\u0131ll\u0131ca se\u00e7erek maliyetleri \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr. Gereksiz kaynaklar\u0131n \u00f6n\u00fcne ge\u00e7er.<\/li>\n<li><strong>Basitle\u015ftirilmi\u015f Y\u00f6netim:<\/strong> \u00d6nceden tan\u0131mlanm\u0131\u015f node gruplar\u0131 (Managed Node Groups veya Self-Managed Node Groups) y\u00f6netme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r. T\u00fcm node provisioning s\u00fcreci tek bir kontrol d\u00fczlemi \u00fczerinden y\u00f6netilir.<\/li>\n<li><strong>Ak\u0131ll\u0131 Konsolidasyon:<\/strong> Kullan\u0131lmayan veya d\u00fc\u015f\u00fck kullan\u0131lan node&#8217;lar\u0131 otomatik olarak tespit eder, \u00fczerindeki pod&#8217;lar\u0131 ba\u015fka node&#8217;lara ta\u015f\u0131yarak gereksiz node&#8217;lar\u0131 sonland\u0131r\u0131r. Bu da s\u00fcrekli maliyet optimizasyonu sa\u011flar.<\/li>\n<li><strong>Esneklik:<\/strong> \u0130\u015f y\u00fcklerinizin gereksinimlerine g\u00f6re farkl\u0131 instance tipleri, mimariler ve Availability Zone&#8217;lar aras\u0131nda sorunsuz ge\u00e7i\u015f yapabilir.<\/li>\n<\/ul>\n<p>\u00d6zetle, Karpenter, EKS k\u00fcmelerinizde otomasyonu bir ad\u0131m \u00f6teye ta\u015f\u0131yarak, daha \u00e7evik, daha maliyet-etkin ve daha az operasyonel y\u00fckle y\u00f6netilebilir bir altyap\u0131 sunar. Geleneksel Cluster Autoscaler&#8217;\u0131n aksine, node gruplar\u0131na ba\u011fl\u0131 kalmadan do\u011frudan pod taleplerine yan\u0131t vermesi, onu modern Kubernetes ortamlar\u0131 i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getirir.<\/p>\n<h2>EKS Ortam\u0131nda Karpenter Neden Bu Kadar De\u011ferli?<\/h2>\n<p>Amazon EKS, i\u015fletmelere esneklik ve \u00f6l\u00e7eklenebilirlik sunsa da, kaynak y\u00f6netimi ve maliyet kontrol\u00fc her zaman bir meydan okuma olmu\u015ftur. Karpenter, EKS ortam\u0131n\u0131n do\u011fas\u0131nda bulunan bu zorluklara do\u011frudan yan\u0131t vererek, bulut altyap\u0131n\u0131zdan en iyi \u015fekilde yararlanman\u0131z\u0131 sa\u011flar. \u00d6zellikle dinamik i\u015f y\u00fcklerine sahip uygulamalar i\u00e7in Karpenter&#8217;\u0131n sa\u011flad\u0131\u011f\u0131 avantajlar paha bi\u00e7ilmezdir.<\/p>\n<h3>Maliyet Optimizasyonu Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Karpenter&#8217;\u0131n EKS&#8217;teki en b\u00fcy\u00fck de\u011fer \u00f6nerilerinden biri, maliyet optimizasyonudur. Geleneksel y\u00f6ntemlerde, genellikle en k\u00f6t\u00fc senaryoyu d\u00fc\u015f\u00fcnerek fazla kaynak ay\u0131rma e\u011filimi vard\u0131r. Karpenter ise bu israf\u0131 ortadan kald\u0131r\u0131r:<\/p>\n<ul>\n<li><strong>Spot Instance&#8217;lardan Maksimum Fayda:<\/strong> Karpenter, uygun maliyetli Spot Instance&#8217;lar\u0131 ak\u0131ll\u0131ca kullanma yetene\u011fine sahiptir. Pod&#8217;lar\u0131n\u0131z\u0131n toleranslar\u0131na ve kesinti tolerans\u0131na g\u00f6re Spot Instance&#8217;lar\u0131 tercih ederek, On-Demand (\u0130ste\u011fe Ba\u011fl\u0131) fiyatlar\u0131na k\u0131yasla %70-90&#8217;a varan tasarruflar sa\u011flayabilir. Spot Instance&#8217;lar kesintiye u\u011frad\u0131\u011f\u0131nda, Karpenter pod&#8217;lar\u0131 otomatik olarak ba\u015fka bir node&#8217;a ta\u015f\u0131r ve yeni bir Spot veya On-Demand node sa\u011flar.<\/li>\n<li><strong>Do\u011fru Instance Tipi Se\u00e7imi:<\/strong> \u0130\u015f y\u00fcklerinizin CPU, bellek ve di\u011fer kaynak gereksinimlerine en uygun EC2 instance tipini dinamik olarak se\u00e7er. \u00d6rne\u011fin, yo\u011fun i\u015flem g\u00fcc\u00fc gerektirmeyen uygulamalar i\u00e7in daha k\u00fc\u00e7\u00fck, daha uygun maliyetli instance&#8217;lar\u0131 tercih edebilir. Ayr\u0131ca, ARM tabanl\u0131 Graviton i\u015flemcili instance&#8217;lar\u0131 kullanarak ek maliyet avantajlar\u0131 sunabilir.<\/li>\n<li><strong>H\u0131zl\u0131 \u00d6l\u00e7eklenme ile Gereksiz Kaynaklar\u0131n \u00d6n\u00fcne Ge\u00e7me:<\/strong> Uygulamalar\u0131n\u0131z\u0131n anl\u0131k taleplerine g\u00f6re h\u0131zl\u0131ca \u00f6l\u00e7eklenmesi, bo\u015fta duran veya d\u00fc\u015f\u00fck kullan\u0131lan node&#8217;lar\u0131n say\u0131s\u0131n\u0131 minimize eder. Talep d\u00fc\u015ft\u00fc\u011f\u00fcnde ise Karpenter, node&#8217;lar\u0131 h\u0131zla konsolide eder ve gereksiz olanlar\u0131 sonland\u0131r\u0131r, b\u00f6ylece s\u00fcrekli bir maliyet optimizasyonu d\u00f6ng\u00fcs\u00fc sa\u011flar.<\/li>\n<\/ul>\n<h3>Performans ve H\u0131z Avantajlar\u0131 Nelerdir?<\/h3>\n<p>Maliyetin yan\u0131 s\u0131ra, performans ve h\u0131z da Karpenter&#8217;\u0131n EKS&#8217;e katt\u0131\u011f\u0131 \u00f6nemli de\u011ferlerdir:<\/p>\n<ul>\n<li><strong>Pod&#8217;lar\u0131n H\u0131zl\u0131ca Planlanmas\u0131:<\/strong> Cluster Autoscaler&#8217;\u0131n node gruplar\u0131n\u0131 \u00f6l\u00e7eklendirme ve yeni node&#8217;lar\u0131n devreye girmesi i\u00e7in ge\u00e7en s\u00fcreyi \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r. Karpenter, pod&#8217;lar\u0131n bekleyen durumunu g\u00f6r\u00fcr g\u00f6rmez, do\u011frudan AWS API&#8217;leri ile ileti\u015fime ge\u00e7erek saniyeler i\u00e7inde yeni bir EC2 instance&#8217;\u0131 ba\u015flat\u0131r ve Kubernetes k\u00fcmesine dahil eder.<\/li>\n<li><strong>Talebe G\u00f6re An\u0131nda Node Sa\u011flama:<\/strong> Yo\u011fun trafik d\u00f6nemlerinde veya anl\u0131k i\u015f y\u00fck\u00fc art\u0131\u015flar\u0131nda, uygulamalar\u0131n\u0131z\u0131n kesintisiz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Yeni pod&#8217;lar i\u00e7in node beklemek zorunda kalmazs\u0131n\u0131z, bu da kullan\u0131c\u0131 deneyimini iyile\u015ftirir ve i\u015f s\u00fcreklili\u011fini art\u0131r\u0131r.<\/li>\n<li><strong>Uygulama Ba\u015flatma S\u00fcrelerinin K\u0131salmas\u0131:<\/strong> Yeni node&#8217;lar\u0131n h\u0131zla devreye al\u0131nmas\u0131, yeni uygulamalar\u0131n veya mikroservislerin daha h\u0131zl\u0131 ba\u015flat\u0131lmas\u0131na olanak tan\u0131r. Bu, \u00f6zellikle CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Teslimat) s\u00fcre\u00e7lerinde ve k\u0131sa \u00f6m\u00fcrl\u00fc i\u015f y\u00fcklerinde (\u00f6rne\u011fin, batch processing) b\u00fcy\u00fck avantaj sa\u011flar.<\/li>\n<\/ul>\n<h3>Operasyonel Y\u00fck\u00fc Nas\u0131l Azalt\u0131r?<\/h3>\n<p>Karpenter, EKS&#8217;teki operasyonel karma\u015f\u0131kl\u0131\u011f\u0131 azaltarak DevOps ekiplerinin hayat\u0131n\u0131 kolayla\u015ft\u0131r\u0131r:<\/p>\n<ul>\n<li><strong>Node Group Y\u00f6netimi Karma\u015fas\u0131n\u0131 Ortadan Kald\u0131rma:<\/strong> Geleneksel EKS kurulumlar\u0131nda, farkl\u0131 i\u015f y\u00fckleri i\u00e7in farkl\u0131 node gruplar\u0131 olu\u015fturmak, bunlar\u0131 manuel olarak veya Cluster Autoscaler ile y\u00f6netmek operasyonel bir y\u00fck getirir. Karpenter, tek bir kontrol d\u00fczlemiyle t\u00fcm node provisioning&#8217;i y\u00f6neterek bu karma\u015fay\u0131 ortadan kald\u0131r\u0131r. Art\u0131k node gruplar\u0131n\u0131n boyutunu, instance tiplerini veya AMI&#8217;lerini (Amazon Machine Image) s\u00fcrekli olarak g\u00fcncellemenize gerek kalmaz.<\/li>\n<li><strong>Basitle\u015ftirilmi\u015f Konfig\u00fcrasyon:<\/strong> Karpenter, Custom Resource Definition (CRD) olarak tan\u0131mlanan Provisioner kaynaklar\u0131 arac\u0131l\u0131\u011f\u0131yla basit ve deklaratif bir konfig\u00fcrasyon sunar. Bu, node sa\u011flama politikalar\u0131n\u0131z\u0131 kod olarak y\u00f6netmenizi ve s\u00fcr\u00fcm kontrol\u00fcne alman\u0131z\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu: E-ticaret Sitesinin Anl\u0131k Kampanya D\u00f6nemleri<\/strong><\/p>\n<p>Bir e-ticaret sitesinin Kara Cuma veya Sevgililer G\u00fcn\u00fc gibi \u00f6zel kampanya d\u00f6nemlerinde trafik yo\u011funlu\u011funda %500&#8217;e varan art\u0131\u015flar ya\u015fad\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnelim. Geleneksel bir EKS kurulumunda, bu ani y\u00fck art\u0131\u015f\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in ya \u00f6nceden \u00e7ok fazla kaynak ay\u0131rmak (ve kampanya d\u0131\u015f\u0131nda bo\u015fta b\u0131rakmak) ya da Cluster Autoscaler&#8217;\u0131n yava\u015f \u00f6l\u00e7eklenmesi nedeniyle performans sorunlar\u0131 ya\u015famak gerekebilir. Karpenter ile bu sorun ortadan kalkar. Kampanya ba\u015flad\u0131\u011f\u0131nda, yeni gelen pod&#8217;lar i\u00e7in Karpenter an\u0131nda uygun Spot Instance&#8217;lar\u0131 sa\u011flayarak, sitenin kesintisiz ve y\u00fcksek performansla \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder. Kampanya bitti\u011finde ise, kullan\u0131lmayan node&#8217;lar\u0131 otomatik olarak sonland\u0131rarak maliyetleri optimize eder. Bu sayede, hem m\u00fc\u015fteri memnuniyeti artar hem de gereksiz bulut harcamalar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7ilir.<\/p>\n<h2>Karpenter&#8217;\u0131 EKS&#8217;e Kurmadan \u00d6nce Neleri Bilmelisiniz?<\/h2>\n<p>Karpenter&#8217;\u0131 Amazon EKS k\u00fcmenize entegre etmek, do\u011fru bir planlama ve \u00f6n haz\u0131rl\u0131k gerektirir. Kuruluma ba\u015flamadan \u00f6nce belirli \u00f6n ko\u015fullar\u0131 anlamak ve gerekli ara\u00e7lar\u0131 haz\u0131rlamak, sorunsuz bir ge\u00e7i\u015f i\u00e7in kritik \u00f6neme sahiptir. Terraform ile bu s\u00fcreci otomatize etmek, altyap\u0131n\u0131z\u0131n tutarl\u0131l\u0131\u011f\u0131n\u0131 ve y\u00f6netilebilirli\u011fini sa\u011flarken, ayn\u0131 zamanda tekrarlanabilir bir da\u011f\u0131t\u0131m modeli sunar.<\/p>\n<h3>\u00d6n Ko\u015fullar ve Gerekli AWS \u0130zinleri<\/h3>\n<p>Karpenter&#8217;\u0131n EKS \u00fczerinde verimli bir \u015fekilde \u00e7al\u0131\u015fabilmesi i\u00e7in baz\u0131 temel gereksinimler bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>Mevcut Bir EKS K\u00fcmesi:<\/strong> Karpenter, \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131 bir EKS k\u00fcmesine ihtiya\u00e7 duyar. Bu k\u00fcme, <code>kubectl<\/code> ile eri\u015filebilir durumda olmal\u0131d\u0131r.<\/li>\n<li><strong>IAM Rolleri ve Politikalar\u0131:<\/strong> Karpenter&#8217;\u0131n AWS kaynaklar\u0131n\u0131 (EC2 instance&#8217;lar\u0131, Launch Template&#8217;ler, Spot Fleet&#8217;ler vb.) y\u00f6netebilmesi i\u00e7in belirli AWS IAM (Identity and Access Management) izinlerine sahip olmas\u0131 gerekir. Bu izinler, Karpenter Controller i\u00e7in bir IAM rol\u00fc ve Karpenter taraf\u0131ndan ba\u015flat\u0131lacak EC2 node&#8217;lar\u0131 i\u00e7in bir IAM instance profili arac\u0131l\u0131\u011f\u0131yla sa\u011flan\u0131r. \u00d6zellikle, Karpenter&#8217;\u0131n EC2 instance&#8217;lar\u0131n\u0131 ba\u015flatma, sonland\u0131rma, etiketleme ve y\u00f6netme yetkisine sahip olmas\u0131 \u015fartt\u0131r.<\/li>\n<li><strong>VPC ve Subnet Etiketleme:<\/strong> Karpenter, node&#8217;lar\u0131 ba\u015flat\u0131rken hangi VPC (Virtual Private Cloud) ve subnet&#8217;leri kullanaca\u011f\u0131n\u0131 anlamak i\u00e7in belirli etiketlere ihtiya\u00e7 duyar. Bu etiketler, Karpenter&#8217;\u0131n do\u011fru a\u011f kaynaklar\u0131n\u0131 hedeflemesini sa\u011flar. Genellikle <code>kubernetes.io\/cluster\/&lt;cluster-ad\u0131&gt;: owned<\/code> ve <code>karpenter.sh\/discovery: &lt;cluster-ad\u0131&gt;<\/code> gibi etiketler kullan\u0131l\u0131r.<\/li>\n<li><strong>EKS OIDC Sa\u011flay\u0131c\u0131s\u0131:<\/strong> Karpenter Controller&#8217;\u0131n AWS API&#8217;leriyle g\u00fcvenli bir \u015fekilde ileti\u015fim kurabilmesi i\u00e7in EKS k\u00fcmenizin bir OpenID Connect (OIDC) sa\u011flay\u0131c\u0131s\u0131na sahip olmas\u0131 gerekir. Bu, Kubernetes Service Account&#8217;lar\u0131na AWS IAM rol\u00fc atamay\u0131 (IRSA &#8211; IAM Roles for Service Accounts) m\u00fcmk\u00fcn k\u0131lar.<\/li>\n<li><strong>Kubeconfig Eri\u015fimi:<\/strong> Terraform&#8217;un Kubernetes kaynaklar\u0131n\u0131 y\u00f6netebilmesi i\u00e7in EKS k\u00fcmenize eri\u015fim sa\u011flayan bir <code>kubeconfig<\/code> dosyas\u0131na veya uygun kimlik do\u011frulama mekanizmalar\u0131na sahip olmas\u0131 gerekir.<\/li>\n<\/ul>\n<h3>Terraform&#8217;un Rol\u00fc ve Avantajlar\u0131<\/h3>\n<p>Terraform, Karpenter&#8217;\u0131n EKS \u00fczerindeki kurulumunu otomatize etmek i\u00e7in ideal bir ara\u00e7t\u0131r. Altyap\u0131y\u0131 Kod Olarak (IaC) y\u00f6netme yakla\u015f\u0131m\u0131n\u0131 benimseyerek bir\u00e7ok avantaj sunar:<\/p>\n<ul>\n<li><strong>Tekrarlanabilirlik ve Tutarl\u0131l\u0131k:<\/strong> Terraform kodunuzu kullanarak Karpenter&#8217;\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 birden fazla EKS k\u00fcmesinde veya farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde da\u011f\u0131tabilirsiniz. Bu, manuel yap\u0131land\u0131rma hatalar\u0131n\u0131 en aza indirir.<\/li>\n<li><strong>Versiyonlama ve Denetlenebilirlik:<\/strong> T\u00fcm altyap\u0131 yap\u0131land\u0131rman\u0131z kod olarak sakland\u0131\u011f\u0131 i\u00e7in, versiyon kontrol sistemleriyle (Git gibi) y\u00f6netilebilir. Bu, de\u011fi\u015fiklikleri izlemenizi, geri alman\u0131z\u0131 ve kimin ne zaman hangi de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131 denetlemenizi sa\u011flar.<\/li>\n<li><strong>Hata Azaltma:<\/strong> Manuel kurulum ad\u0131mlar\u0131 s\u0131ras\u0131nda olu\u015fabilecek insan hatalar\u0131n\u0131 ortadan kald\u0131r\u0131r. Terraform, tan\u0131mlad\u0131\u011f\u0131n\u0131z nihai duruma ula\u015fmak i\u00e7in en uygun yolu otomatik olarak planlar ve uygular.<\/li>\n<li><strong>T\u00fcm Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Tek Bir Yerden Y\u00f6netme:<\/strong> Karpenter&#8217;\u0131n kendisi, IAM rolleri, politikalar, VPC etiketlemeleri ve Helm chart da\u011f\u0131t\u0131m\u0131 gibi t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 tek bir Terraform projesi i\u00e7inde y\u00f6netebilirsiniz. Bu, kurulum ve bak\u0131m s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/li>\n<\/ul>\n<h3>Gerekli Ara\u00e7lar<\/h3>\n<p>Kuruluma ba\u015flamadan \u00f6nce sisteminizde a\u015fa\u011f\u0131daki ara\u00e7lar\u0131n y\u00fckl\u00fc ve yap\u0131land\u0131r\u0131lm\u0131\u015f oldu\u011fundan emin olun:<\/p>\n<ul>\n<li><strong>AWS CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc):<\/strong> AWS kaynaklar\u0131n\u0131 y\u00f6netmek ve kimlik do\u011frulamas\u0131 yapmak i\u00e7in gereklidir.<\/li>\n<li><strong>kubectl:<\/strong> Kubernetes k\u00fcmeleriyle etkile\u015fim kurmak ve Karpenter&#8217;\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 do\u011frulamak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Terraform:<\/strong> Altyap\u0131y\u0131 kod olarak da\u011f\u0131tmak i\u00e7in ana arac\u0131m\u0131z.<\/li>\n<li><strong>Helm (iste\u011fe ba\u011fl\u0131 ama \u00f6nerilir):<\/strong> Karpenter&#8217;\u0131 Kubernetes&#8217;e Helm chart olarak da\u011f\u0131tmak i\u00e7in kullan\u0131l\u0131r. Terraform&#8217;un Helm provider&#8217;\u0131 arac\u0131l\u0131\u011f\u0131yla da y\u00f6netilebilir.<\/li>\n<\/ul>\n<p>Bu \u00f6n ko\u015fullar\u0131 yerine getirerek ve gerekli ara\u00e7lar\u0131 haz\u0131rlayarak, Karpenter&#8217;\u0131 EKS k\u00fcmenize Terraform ile ba\u015far\u0131l\u0131 bir \u015fekilde entegre etmek i\u00e7in sa\u011flam bir temel olu\u015fturmu\u015f olursunuz. Bir sonraki b\u00f6l\u00fcmde, bu ad\u0131mlar\u0131 pratik kod \u00f6rnekleriyle detayland\u0131raca\u011f\u0131z.<\/p>\n<h2>Karpenter&#8217;\u0131 Terraform ile EKS \u00dczerinde Ad\u0131m Ad\u0131m Kurulumu<\/h2>\n<p>Karpenter&#8217;\u0131 EKS k\u00fcmenize Terraform ile entegre etmek, birka\u00e7 ana ad\u0131mdan olu\u015fur: gerekli IAM rollerini ve politikalar\u0131n\u0131 olu\u015fturmak, VPC ve subnet&#8217;lerinizi etiketlemek, Karpenter Helm chart&#8217;\u0131n\u0131 da\u011f\u0131tmak ve son olarak Karpenter Provisioner kaynaklar\u0131n\u0131 tan\u0131mlamak. Bu ad\u0131mlar\u0131 s\u0131ras\u0131yla uygulayarak, otomatik \u00f6l\u00e7eklenen ve maliyet-etkin bir Kubernetes altyap\u0131s\u0131 kurabilirsiniz.<\/p>\n<p>Bu b\u00f6l\u00fcmde, ad\u0131m ad\u0131m Terraform kod bloklar\u0131 ile Karpenter kurulumunu ger\u00e7ekle\u015ftirece\u011fiz. L\u00fctfen <code>&lt;YOUR_CLUSTER_NAME&gt;<\/code>, <code>&lt;YOUR_AWS_REGION&gt;<\/code> ve <code>&lt;YOUR_ACCOUNT_ID&gt;<\/code> gibi yer tutucular\u0131 kendi ortam\u0131n\u0131za g\u00f6re g\u00fcncellemeyi unutmay\u0131n.<\/p>\n<h3>1. IAM Rolleri ve Politikalar\u0131 Olu\u015fturma<\/h3>\n<p>Karpenter&#8217;\u0131n AWS kaynaklar\u0131yla etkile\u015fim kurabilmesi i\u00e7in iki ana IAM rol\u00fcne ihtiyac\u0131m\u0131z var: Karpenter Controller i\u00e7in bir rol ve Karpenter taraf\u0131ndan ba\u015flat\u0131lacak EC2 node&#8217;lar\u0131 i\u00e7in bir instance profili. Bu rol ve profiller, gerekli izinleri i\u00e7ermelidir.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# main.tf\n# Karpenter Controller i\u00e7in IAM Rol\u00fc ve Politikas\u0131\nresource \"aws_iam_role\" \"karpenter_controller_role\" {\n  name = \"KarpenterControllerRole-${var.cluster_name}\"\n\n  assume_role_policy = jsonencode({\n    Version = \"2012-10-17\",\n    Statement = [\n      {\n        Effect = \"Allow\",\n        Principal = {\n          Federated = \"arn:aws:iam::${data.aws_caller_identity.current.account_id}:oidc-provider\/${replace(data.aws_eks_cluster.cluster.identity[0].oidc[0].issuer, \"https:\/\/\", \"\")}\"\n        },\n        Action = \"sts:AssumeRoleWithWebIdentity\",\n        Condition = {\n          StringEquals = {\n            \"${replace(data.aws_eks_cluster.cluster.identity[0].oidc[0].issuer, \"https:\/\/\", \"\")}:sub\" = \"system:serviceaccount:karpenter:karpenter\"\n          }\n        }\n      }\n    ]\n  })\n}\n\nresource \"aws_iam_role_policy_attachment\" \"karpenter_controller_policy_attach\" {\n  policy_arn = \"arn:aws:iam::aws:policy\/KarpenterControllerPolicy\" # Bu politikay\u0131 manuel olarak veya ba\u015fka bir Terraform resource ile olu\u015fturman\u0131z gerekebilir.\n  role       = aws_iam_role.karpenter_controller_role.name\n}\n\n# Karpenter Controller i\u00e7in gerekli \u00f6zel izinler (\u00f6rnek)\nresource \"aws_iam_policy\" \"karpenter_controller_custom_policy\" {\n  name        = \"KarpenterControllerCustomPolicy-${var.cluster_name}\"\n  description = \"Karpenter Controller i\u00e7in \u00f6zel izinler\"\n\n  policy = jsonencode({\n    Version = \"2012-10-17\",\n    Statement = [\n      {\n        Effect = \"Allow\",\n        Action = [\n          \"ec2:CreateLaunchTemplate\",\n          \"ec2:CreateFleet\",\n          \"ec2:RunInstances\",\n          \"ec2:CreateTags\",\n          \"ec2:TerminateInstances\",\n          \"ec2:DeleteLaunchTemplate\",\n          \"ec2:DescribeLaunchTemplates\",\n          \"ec2:DescribeInstances\",\n          \"ec2:DescribeImages\",\n          \"ec2:DescribeSubnets\",\n          \"ec2:DescribeSecurityGroups\",\n          \"ec2:DescribeInstanceTypes\",\n          \"ec2:DescribeInstanceTypeOfferings\",\n          \"ec2:DescribeAvailabilityZones\",\n          \"ssm:GetParameter\" # E\u011fer SSM parametrelerinden AMI \u00e7ekiyorsan\u0131z\n        ],\n        Resource = \"*\"\n      },\n      {\n        Effect = \"Allow\",\n        Action = \"iam:PassRole\",\n        Resource = aws_iam_role.karpenter_node_role.arn # Node Instance Profile rol\u00fcn\u00fc burada referans veriyoruz\n      }\n    ]\n  })\n}\n\nresource \"aws_iam_role_policy_attachment\" \"karpenter_controller_custom_policy_attach\" {\n  policy_arn = aws_iam_policy.karpenter_controller_custom_policy.arn\n  role       = aws_iam_role.karpenter_controller_role.name\n}\n\n# Karpenter Node'lar\u0131 i\u00e7in IAM Rol\u00fc (Instance Profile)\nresource \"aws_iam_role\" \"karpenter_node_role\" {\n  name = \"KarpenterNodeRole-${var.cluster_name}\"\n\n  assume_role_policy = jsonencode({\n    Version = \"2012-10-17\",\n    Statement = [\n      {\n        Effect = \"Allow\",\n        Principal = {\n          Service = \"ec2.amazonaws.com\"\n        },\n        Action = \"sts:AssumeRole\"\n      }\n    ]\n  })\n}\n\nresource \"aws_iam_instance_profile\" \"karpenter_node_instance_profile\" {\n  name = \"KarpenterNodeInstanceProfile-${var.cluster_name}\"\n  role = aws_iam_role.karpenter_node_role.name\n}\n\n# Node'lar i\u00e7in gerekli politikalar (\u00f6rnek)\nresource \"aws_iam_role_policy_attachment\" \"karpenter_node_amazon_eks_worker_node_policy\" {\n  policy_arn = \"arn:aws:iam::aws:policy\/AmazonEKSWorkerNodePolicy\"\n  role       = aws_iam_role.karpenter_node_role.name\n}\n\nresource \"aws_iam_role_policy_attachment\" \"karpenter_node_amazon_eks_cni_policy\" {\n  policy_arn = \"arn:aws:iam::aws:policy\/AmazonEKS_CNI_Policy\"\n  role       = aws_iam_role.karpenter_node_role.name\n}\n\nresource \"aws_iam_role_policy_attachment\" \"karpenter_node_amazon_ec2_container_registry_readonly_policy\" {\n  policy_arn = \"arn:aws:iam::aws:policy\/AmazonEC2ContainerRegistryReadOnly\"\n  role       = aws_iam_role.karpenter_node_role.name\n}\n\n# EKS Cluster ve Caller Identity verilerini \u00e7ekme\ndata \"aws_eks_cluster\" \"cluster\" {\n  name = var.cluster_name\n}\n\ndata \"aws_caller_identity\" \"current\" {}\n<\/code><\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011fu, Karpenter Controller i\u00e7in bir IAM rol\u00fc ve bir de Karpenter taraf\u0131ndan ba\u015flat\u0131lacak EC2 instance&#8217;lar\u0131 i\u00e7in bir IAM rol\u00fc (instance profile) tan\u0131mlar. Controller rol\u00fc, OIDC sa\u011flay\u0131c\u0131s\u0131 \u00fczerinden Kubernetes Service Account&#8217;\u0131 ile ili\u015fkilendirilirken, node rol\u00fc EC2 instance&#8217;lar\u0131n\u0131n \u00fczerine atan\u0131r.<\/p>\n<h3>2. VPC ve Subnet Etiketlemesi<\/h3>\n<p>Karpenter&#8217;\u0131n do\u011fru VPC ve subnet&#8217;leri bulabilmesi i\u00e7in bu kaynaklara belirli etiketler eklememiz gerekiyor. Bu etiketler, Karpenter&#8217;\u0131n a\u011f yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak ke\u015ffetmesini sa\u011flar.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# main.tf\n# VPC Etiketlemesi\nresource \"aws_vpc\" \"eks_vpc\" {\n  # ... mevcut VPC tan\u0131m\u0131n\u0131z veya yeni VPC olu\u015fturma ...\n  tags = {\n    \"kubernetes.io\/cluster\/${var.cluster_name}\" = \"owned\"\n  }\n}\n\n# Subnet Etiketlemesi (\u00d6rnek olarak public subnet'ler)\nresource \"aws_subnet\" \"public_subnet_a\" {\n  # ... mevcut subnet tan\u0131m\u0131n\u0131z veya yeni subnet olu\u015fturma ...\n  vpc_id            = aws_vpc.eks_vpc.id\n  cidr_block        = \"10.0.1.0\/24\"\n  availability_zone = \"${var.aws_region}a\"\n  tags = {\n    \"kubernetes.io\/cluster\/${var.cluster_name}\" = \"owned\"\n    \"karpenter.sh\/discovery\"                   = var.cluster_name\n  }\n}\n\nresource \"aws_subnet\" \"public_subnet_b\" {\n  # ... mevcut subnet tan\u0131m\u0131n\u0131z veya yeni subnet olu\u015fturma ...\n  vpc_id            = aws_vpc.eks_vpc.id\n  cidr_block        = \"10.0.2.0\/24\"\n  availability_zone = \"${var.aws_region}b\"\n  tags = {\n    \"kubernetes.io\/cluster\/${var.cluster_name}\" = \"owned\"\n    \"karpenter.sh\/discovery\"                   = var.cluster_name\n  }\n}\n# \u00d6zel subnet'ler i\u00e7in de benzer etiketlemeler yap\u0131lmal\u0131d\u0131r.\n# \u00d6rne\u011fin, \u00f6zel subnet'ler i\u00e7in \"kubernetes.io\/role\/internal-elb\" etiketi ekleyebilirsiniz.\n<\/code><\/pre>\n<\/div>\n<p>Bu etiketler, Karpenter&#8217;\u0131n hangi VPC ve subnet&#8217;leri kullanarak EC2 instance&#8217;lar\u0131n\u0131 ba\u015flataca\u011f\u0131n\u0131 belirlemesine yard\u0131mc\u0131 olur. \u00d6zellikle <code>karpenter.sh\/discovery<\/code> etiketi, Karpenter i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>3. Karpenter Helm Chart&#8217;\u0131 Kurulumu<\/h3>\n<p>Karpenter, Kubernetes k\u00fcmesine bir Helm chart olarak da\u011f\u0131t\u0131l\u0131r. Terraform&#8217;un Helm provider&#8217;\u0131n\u0131 kullanarak bu da\u011f\u0131t\u0131m\u0131 otomatize edebiliriz. Bu ad\u0131mda, \u00f6nceki ad\u0131mlarda olu\u015fturdu\u011fumuz IAM rol\u00fcn\u00fc ve di\u011fer k\u00fcme bilgilerini Helm chart&#8217;\u0131na parametre olarak ge\u00e7irece\u011fiz.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# main.tf\n# Helm provider tan\u0131m\u0131 (e\u011fer daha \u00f6nce yapmad\u0131ysan\u0131z)\nprovider \"helm\" {\n  kubernetes {\n    host                   = data.aws_eks_cluster.cluster.endpoint\n    cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)\n    exec {\n      api_version = \"client.authentication.k8s.io\/v1beta1\"\n      command     = \"aws\"\n      args        = [\"eks\", \"get-token\", \"--cluster-name\", var.cluster_name, \"--region\", var.aws_region]\n    }\n  }\n}\n\n# Karpenter Helm Chart Kurulumu\nresource \"helm_release\" \"karpenter\" {\n  name       = \"karpenter\"\n  repository = \"oci:\/\/public.ecr.aws\/karpenter\/karpenter\"\n  chart      = \"karpenter\"\n  namespace  = \"karpenter\"\n  create_namespace = true\n  version    = \"0.33.0\" # Kulland\u0131\u011f\u0131n\u0131z Karpenter versiyonunu belirtin\n\n  set {\n    name  = \"serviceAccount.annotations.eks\\\\.amazonaws\\\\.com\/role-arn\"\n    value = aws_iam_role.karpenter_controller_role.arn\n    type  = \"string\"\n  }\n\n  set {\n    name  = \"settings.aws.clusterName\"\n    value = var.cluster_name\n    type  = \"string\"\n  }\n\n  set {\n    name  = \"settings.aws.defaultInstanceProfile\"\n    value = aws_iam_instance_profile.karpenter_node_instance_profile.name\n    type  = \"string\"\n  }\n\n  set {\n    name  = \"settings.aws.interruptionQueueName\"\n    value = \"karpenter-${var.cluster_name}\" # Opsiyonel: Spot kesinti bildirimleri i\u00e7in SQS kuyru\u011fu\n    type  = \"string\"\n  }\n}\n<\/code><\/pre>\n<\/div>\n<p>Bu Helm chart da\u011f\u0131t\u0131m\u0131, Karpenter Controller&#8217;\u0131 EKS k\u00fcmenize kurar ve Controller&#8217;\u0131n hangi IAM rol\u00fcn\u00fc kullanaca\u011f\u0131n\u0131, hangi k\u00fcme ad\u0131 i\u00e7in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve node&#8217;lar\u0131 ba\u015flat\u0131rken hangi instance profilini kullanaca\u011f\u0131n\u0131 belirtir.<\/p>\n<h3>4. Provisioner Kayna\u011f\u0131 Tan\u0131mlama<\/h3>\n<p>Karpenter&#8217;\u0131n nas\u0131l node sa\u011flayaca\u011f\u0131n\u0131 belirleyen ana konfig\u00fcrasyon, bir Custom Resource Definition (CRD) olan <code>Provisioner<\/code> kayna\u011f\u0131d\u0131r. Bu kaynak, hangi instance tiplerinin kullan\u0131labilece\u011fi, hangi Availability Zone&#8217;larda \u00e7al\u0131\u015f\u0131laca\u011f\u0131, Spot veya On-Demand tercihi gibi kurallar\u0131 tan\u0131mlar. Terraform&#8217;da bu kayna\u011f\u0131 <code>kubernetes_manifest<\/code> kayna\u011f\u0131n\u0131 kullanarak tan\u0131mlayabiliriz.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# provisioner.tf\nresource \"kubernetes_manifest\" \"default_provisioner\" {\n  provider = kubernetes\n\n  manifest = {\n    apiVersion = \"karpenter.sh\/v1beta1\"\n    kind       = \"Provisioner\"\n    metadata = {\n      name = \"default\"\n    }\n    spec = {\n      requirements = [\n        {\n          key      = \"karpenter.k8s.aws\/instance-category\"\n          operator = \"In\"\n          values   = [\"c\", \"m\", \"r\"] # Compute, Memory, General Purpose instance kategorileri\n        },\n        {\n          key      = \"topology.kubernetes.io\/zone\"\n          operator = \"In\"\n          values   = [\"${var.aws_region}a\", \"${var.aws_region}b\", \"${var.aws_region}c\"] # Kullan\u0131lacak AZ'ler\n        },\n        {\n          key      = \"kubernetes.io\/arch\"\n          operator = \"In\"\n          values   = [\"amd64\"] # Veya [\"arm64\"] Graviton i\u00e7in\n        },\n        {\n          key      = \"karpenter.sh\/capacity-type\"\n          operator = \"In\"\n          values   = [\"spot\", \"on-demand\"] # Spot veya On-Demand tercihleri\n        },\n      ]\n      limits = {\n        resources = {\n          cpu    = \"1000\" # K\u00fcmenin toplam CPU limiti\n          memory = \"1000Gi\" # K\u00fcmenin toplam bellek limiti\n        }\n      }\n      providerRef = {\n        name = \"default\" # AWSNodeTemplate i\u00e7in referans\n      }\n      ttlSecondsAfterEmpty = 30 # Node bo\u015fald\u0131ktan 30 saniye sonra sonland\u0131r\n      ttlSecondsUntilExpired = 2592000 # 30 g\u00fcn sonra node'lar\u0131 yenile (g\u00fcvenlik g\u00fcncellemeleri i\u00e7in)\n    }\n  }\n}\n\nresource \"kubernetes_manifest\" \"aws_node_template\" {\n  provider = kubernetes\n\n  manifest = {\n    apiVersion = \"karpenter.k8s.aws\/v1beta1\"\n    kind       = \"AWSNodeTemplate\"\n    metadata = {\n      name = \"default\"\n    }\n    spec = {\n      subnetSelector = {\n        \"karpenter.sh\/discovery\" = var.cluster_name\n      }\n      securityGroupSelector = {\n        \"kubernetes.io\/cluster\/${var.cluster_name}\" = \"owned\"\n      }\n      instanceProfile = aws_iam_instance_profile.karpenter_node_instance_profile.name\n      # E\u011fer \u00f6zel bir AMI kullanmak isterseniz:\n      # amiSelector = {\n      #   \"karpenter.k8s.aws\/instance-family\" = \"al2023\" # Veya \"bottlerocket\", \"ubuntu\"\n      # }\n    }\n  }\n}\n<\/code><\/pre>\n<\/div>\n<p>Bu <code>Provisioner<\/code> ve <code>AWSNodeTemplate<\/code> kaynaklar\u0131, Karpenter&#8217;a hangi t\u00fcr EC2 instance&#8217;lar\u0131n\u0131, hangi k\u0131s\u0131tlamalarla ve hangi a\u011f ayarlar\u0131yla ba\u015flatmas\u0131 gerekti\u011fini s\u00f6yler. \u00d6rne\u011fin, <code>requirements<\/code> b\u00f6l\u00fcm\u00fcnde instance kategorilerini, Availability Zone&#8217;lar\u0131 ve kapasite tiplerini belirleyebilirsiniz. <code>ttlSecondsAfterEmpty<\/code> gibi parametreler ise node&#8217;lar\u0131n ne zaman sonland\u0131r\u0131laca\u011f\u0131n\u0131 kontrol eder.<\/p>\n<p>T\u00fcm bu Terraform dosyalar\u0131n\u0131 olu\u015fturduktan sonra, projenizin k\u00f6k dizininde a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak Karpenter&#8217;\u0131 EKS k\u00fcmenize da\u011f\u0131tabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nterraform init\nterraform plan\nterraform apply --auto-approve\n<\/code><\/pre>\n<\/div>\n<p>Bu ad\u0131mlar tamamland\u0131\u011f\u0131nda, Karpenter EKS k\u00fcmenizde etkinle\u015ftirilmi\u015f ve pod&#8217;lar\u0131n\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re dinamik olarak node sa\u011flamaya haz\u0131r hale gelmi\u015f olacakt\u0131r.<\/p>\n<h2>Karpenter&#8217;\u0131 Test Etme ve Do\u011frulama<\/h2>\n<p>Karpenter&#8217;\u0131n kurulumunu tamamlad\u0131ktan sonra, sistemin beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in test etmek ve do\u011frulamak \u00f6nemlidir. Bu b\u00f6l\u00fcm, Karpenter&#8217;\u0131n otomatik \u00f6l\u00e7eklenme yeteneklerini nas\u0131l g\u00f6zlemleyece\u011finizi ve node azaltma (deprovisioning) mekanizmas\u0131n\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 a\u00e7\u0131klar.<\/p>\n<h3>\u0130lk Pod&#8217;u Da\u011f\u0131tma ve \u00d6l\u00e7eklenmeyi G\u00f6zlemleme<\/h3>\n<p>Karpenter&#8217;\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test etmenin en iyi yolu, mevcut node&#8217;lar\u0131n\u0131zda yer bulamayan, y\u00fcksek kaynak talebi olan bir Kubernetes Deployment (Da\u011f\u0131t\u0131m) olu\u015fturmakt\u0131r. Bu, Karpenter&#8217;\u0131n yeni bir node ba\u015flatmas\u0131n\u0131 tetikleyecektir.<\/p>\n<p>\u00d6ncelikle, k\u00fcmenizde yeterli kaynak olmad\u0131\u011f\u0131ndan emin olun. Ard\u0131ndan, a\u015fa\u011f\u0131daki gibi bir Deployment tan\u0131m\u0131 olu\u015fturun. Bu \u00f6rnek, her biri 1 CPU ve 1GB bellek isteyen 50 adet NGINX pod&#8217;u ba\u015flatmaya \u00e7al\u0131\u015facakt\u0131r. E\u011fer k\u00fcmenizde bu kadar kayna\u011f\u0131 kar\u015f\u0131layacak bo\u015f bir node yoksa, Karpenter devreye girecektir.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# test-deployment.yaml\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: high-resource-app\nspec:\n  replicas: 50\n  selector:\n    matchLabels:\n      app: high-resource-app\n  template:\n    metadata:\n      labels:\n        app: high-resource-app\n    spec:\n      containers:\n      - name: nginx\n        image: nginx\n        resources:\n          requests:\n            cpu: \"1\"\n            memory: \"1Gi\"\n          limits:\n            cpu: \"1\"\n            memory: \"1Gi\"\n<\/code><\/pre>\n<\/div>\n<p>Bu Deployment&#8217;\u0131 k\u00fcmenize uygulay\u0131n:<\/p>\n<div class=\"code-container\">\n<pre><code>\nkubectl apply -f test-deployment.yaml\n<\/code><\/pre>\n<\/div>\n<p>\u015eimdi Karpenter&#8217;\u0131n davran\u0131\u015f\u0131n\u0131 g\u00f6zlemleyin:<\/p>\n<ul>\n<li><strong>Pod Durumlar\u0131n\u0131 Kontrol Edin:<\/strong>\n<div class=\"code-container\">\n<pre><code>\n        kubectl get pods -w\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Baz\u0131 pod&#8217;lar\u0131n <code>Pending<\/code> (Beklemede) durumunda oldu\u011funu g\u00f6rmelisiniz. K\u0131sa s\u00fcre sonra, Karpenter yeni node&#8217;lar\u0131 sa\u011flamaya ba\u015flad\u0131k\u00e7a bu pod&#8217;lar <code>Running<\/code> (\u00c7al\u0131\u015f\u0131yor) durumuna ge\u00e7ecektir.<\/p>\n<\/li>\n<li><strong>Node&#8217;lar\u0131 Kontrol Edin:<\/strong>\n<div class=\"code-container\">\n<pre><code>\n        kubectl get nodes -w\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Karpenter&#8217;\u0131n yeni EC2 instance&#8217;lar\u0131n\u0131 ba\u015flat\u0131p Kubernetes k\u00fcmesine ekledi\u011fini g\u00f6rmelisiniz. Yeni node&#8217;lar genellikle <code>karpenter.sh\/provisioner-name: default<\/code> gibi etiketlere sahip olacakt\u0131r.<\/p>\n<\/li>\n<li><strong>Karpenter Loglar\u0131n\u0131 Kontrol Edin:<\/strong>\n<div class=\"code-container\">\n<pre><code>\n        kubectl logs -f -n karpenter $(kubectl get pods -n karpenter -l app.kubernetes.io\/name=karpenter -o name)\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Bu komut, Karpenter Controller&#8217;\u0131n loglar\u0131n\u0131 g\u00f6sterir. Loglarda &#8220;provisioning&#8221; veya &#8220;launching instance&#8221; gibi mesajlar g\u00f6rmelisiniz, bu da Karpenter&#8217;\u0131n aktif olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<\/li>\n<\/ul>\n<h3>Node Azaltma (Deprovisioning) Mekanizmas\u0131<\/h3>\n<p>Karpenter, sadece \u00f6l\u00e7eklenmekle kalmaz, ayn\u0131 zamanda kaynak kullan\u0131m\u0131 d\u00fc\u015ft\u00fc\u011f\u00fcnde gereksiz node&#8217;lar\u0131 ak\u0131ll\u0131ca sonland\u0131rarak maliyet tasarrufu sa\u011flar. Bu s\u00fcreci g\u00f6zlemlemek i\u00e7in olu\u015fturdu\u011fumuz Deployment&#8217;\u0131 silebiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>\nkubectl delete -f test-deployment.yaml\n<\/code><\/pre>\n<\/div>\n<p>Deployment silindikten sonra, Karpenter&#8217;\u0131n node&#8217;lar\u0131 nas\u0131l bo\u015faltt\u0131\u011f\u0131n\u0131 ve sonland\u0131rd\u0131\u011f\u0131n\u0131 g\u00f6zlemleyin:<\/p>\n<ul>\n<li><strong>Pod Durumlar\u0131n\u0131 Kontrol Edin:<\/strong> T\u00fcm <code>high-resource-app<\/code> pod&#8217;lar\u0131n\u0131n sonland\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz.<\/li>\n<li><strong>Node&#8217;lar\u0131 Kontrol Edin:<\/strong>\n<div class=\"code-container\">\n<pre><code>\n        kubectl get nodes -w\n        <\/code><\/pre>\n<\/p><\/div>\n<p>Karpenter&#8217;\u0131n ba\u015flatt\u0131\u011f\u0131 node&#8217;lar\u0131n bir s\u00fcre sonra <code>NotReady<\/code> durumuna ge\u00e7ip daha sonra listeden kayboldu\u011funu g\u00f6rmelisiniz. Karpenter, <code>ttlSecondsAfterEmpty<\/code> (bo\u015fald\u0131ktan sonra ya\u015fam s\u00fcresi) ve <code>ttlSecondsUntilExpired<\/code> (s\u00fcresi dolana kadar ya\u015fam s\u00fcresi) gibi Provisioner ayarlar\u0131n\u0131za g\u00f6re node&#8217;lar\u0131 sonland\u0131racakt\u0131r. Konsolidasyon mekanizmas\u0131 sayesinde, birden fazla k\u00fc\u00e7\u00fck node yerine tek bir b\u00fcy\u00fck node&#8217;a ge\u00e7i\u015f gibi optimizasyonlar da yapabilir.<\/p>\n<\/li>\n<li><strong>Karpenter Loglar\u0131n\u0131 Kontrol Edin:<\/strong> Loglarda &#8220;deprovisioning&#8221; veya &#8220;terminating instance&#8221; gibi mesajlar aray\u0131n. Bu, Karpenter&#8217;\u0131n node&#8217;lar\u0131 aktif olarak temizledi\u011fini g\u00f6sterir.<\/li>\n<\/ul>\n<p>Bu testler, Karpenter&#8217;\u0131n hem yukar\u0131 (scale-up) hem de a\u015fa\u011f\u0131 (scale-down) y\u00f6nde otomatik \u00f6l\u00e7eklenme yeteneklerini ba\u015far\u0131yla do\u011frulaman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Art\u0131k EKS k\u00fcmeniz, dinamik i\u015f y\u00fcklerine \u00e7ok daha esnek ve maliyet-etkin bir \u015fekilde yan\u0131t verebilir.<\/p>\n<h2>Geli\u015fmi\u015f Karpenter Kullan\u0131m Senaryolar\u0131 ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Karpenter&#8217;\u0131n temel kurulumu ve do\u011frulamas\u0131 \u00f6nemli bir ad\u0131m olsa da, ger\u00e7ek d\u00fcnya senaryolar\u0131nda daha karma\u015f\u0131k ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in geli\u015fmi\u015f \u00f6zelliklerini kullanmak, maliyet ve performans avantajlar\u0131n\u0131 daha da art\u0131rabilir. Bu b\u00f6l\u00fcmde, deneyimli kullan\u0131c\u0131lar i\u00e7in Karpenter&#8217;\u0131n daha ileri d\u00fczey kullan\u0131m senaryolar\u0131n\u0131 ve ipu\u00e7lar\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Farkl\u0131 Provisioner Profilleri ile Esneklik<\/h3>\n<p>Tek bir <code>Provisioner<\/code> kayna\u011f\u0131 genellikle yeterli olsa da, farkl\u0131 i\u015f y\u00fckleri i\u00e7in \u00f6zelle\u015ftirilmi\u015f node sa\u011flama davran\u0131\u015flar\u0131 gerekebilir. \u00d6rne\u011fin, kesintiye toleransl\u0131 batch i\u015fleri i\u00e7in Spot Instance&#8217;lar\u0131 zorunlu k\u0131larken, kritik \u00f6neme sahip durum bilgisi olan uygulamalar i\u00e7in On-Demand Instance&#8217;lar\u0131 tercih edebilirsiniz.<\/p>\n<ul>\n<li><strong>Spot, On-Demand, Graviton i\u00e7in Ayr\u0131 Profiller:<\/strong> Birden fazla <code>Provisioner<\/code> ve <code>AWSNodeTemplate<\/code> tan\u0131mlayarak, farkl\u0131 kapasite tipleri (Spot\/On-Demand), instance aileleri (<code>c5<\/code>, <code>m5<\/code>, <code>r5<\/code>) veya mimariler (<code>amd64<\/code>, <code>arm64<\/code> &#8211; Graviton) i\u00e7in ayr\u0131 profiller olu\u015fturabilirsiniz. Pod&#8217;lar\u0131n\u0131zda <code>nodeSelector<\/code> veya <code>affinity<\/code> kullanarak hangi Provisioner&#8217;\u0131n kullan\u0131laca\u011f\u0131n\u0131 belirleyebilirsiniz.<\/li>\n<li><strong>\u00d6zel \u0130\u015f Y\u00fckleri i\u00e7in Etiketleme ve Tolerasyonlar:<\/strong> GPU gerektiren i\u015f y\u00fckleri veya belirli donan\u0131m \u00f6zellikleri isteyen uygulamalar i\u00e7in \u00f6zel etiketler ve tolerasyonlar tan\u0131mlayarak, Karpenter&#8217;\u0131n sadece bu i\u015f y\u00fckleri i\u00e7in uygun instance&#8217;lar\u0131 ba\u015flatmas\u0131n\u0131 sa\u011flayabilirsiniz. \u00d6rne\u011fin, <code>karpenter.k8s.aws\/instance-gpu-count: \"1\"<\/code> gibi bir gereksinim ekleyebilirsiniz.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# gpu-provisioner.tf\nresource \"kubernetes_manifest\" \"gpu_provisioner\" {\n  provider = kubernetes\n  manifest = {\n    apiVersion = \"karpenter.sh\/v1beta1\"\n    kind       = \"Provisioner\"\n    metadata = {\n      name = \"gpu-workloads\"\n    }\n    spec = {\n      requirements = [\n        { key = \"karpenter.k8s.aws\/instance-gpu-count\", operator = \"Gt\", values = [\"0\"] },\n        { key = \"karpenter.sh\/capacity-type\", operator = \"In\", values = [\"on-demand\"] }, # GPU genellikle Spot'ta daha riskli olabilir\n        # ... di\u011fer gereksinimler ...\n      ]\n      providerRef = { name = \"gpu-node-template\" }\n      ttlSecondsAfterEmpty = 300 # Daha uzun s\u00fcre bo\u015fta kalabilir\n    }\n  }\n}\n\nresource \"kubernetes_manifest\" \"gpu_node_template\" {\n  provider = kubernetes\n  manifest = {\n    apiVersion = \"karpenter.k8s.aws\/v1beta1\"\n    kind       = \"AWSNodeTemplate\"\n    metadata = {\n      name = \"gpu-node-template\"\n    }\n    spec = {\n      instanceProfile = aws_iam_instance_profile.karpenter_node_instance_profile.name\n      # ... subnetSelector, securityGroupSelector ...\n      # amiSelector ile GPU destekli bir AMI belirleyebilirsiniz.\n    }\n  }\n}\n<\/code><\/pre>\n<\/div>\n<h3>Maliyet Y\u00f6netimi ve G\u00f6zetim<\/h3>\n<p>Karpenter&#8217;\u0131n maliyet optimizasyon yeteneklerinden tam olarak yararland\u0131\u011f\u0131n\u0131zdan emin olmak i\u00e7in izleme ve analiz ara\u00e7lar\u0131n\u0131 kullanmak \u00f6nemlidir:<\/p>\n<ul>\n<li><strong>Karpenter Metriklerini \u0130zleme:<\/strong> Karpenter, Prometheus uyumlu metrikler yay\u0131nlar. Bu metrikleri Prometheus ve Grafana gibi ara\u00e7larla toplayarak, node sa\u011flama h\u0131zlar\u0131n\u0131, konsolidasyon olaylar\u0131n\u0131 ve node ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc g\u00f6rselle\u015ftirebilirsiniz. Bu, Karpenter&#8217;\u0131n ne kadar verimli \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<li><strong>AWS Cost Explorer ile Maliyet Analizi:<\/strong> AWS Cost Explorer&#8217;\u0131 kullanarak Karpenter taraf\u0131ndan ba\u015flat\u0131lan EC2 instance&#8217;lar\u0131n\u0131n maliyetlerini takip edin. Karpenter taraf\u0131ndan etiketlenen kaynaklar\u0131 filtreleyerek, maliyet tasarruflar\u0131n\u0131 net bir \u015fekilde g\u00f6rebilirsiniz. Karpenter, node&#8217;lara otomatik olarak <code>karpenter.sh\/provisioner-name<\/code> ve <code>karpenter.sh\/provisioner-family<\/code> gibi etiketler ekler, bu da maliyet analizinizi kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<h3>En \u0130yi Uygulamalar<\/h3>\n<ul>\n<li><strong>Minimum ve Maksimum Kaynak K\u0131s\u0131tlamalar\u0131:<\/strong> <code>Provisioner<\/code> kaynaklar\u0131n\u0131zda <code>limits.resources<\/code> alan\u0131n\u0131 kullanarak k\u00fcmenizin toplam CPU ve bellek limitlerini belirleyin. Bu, Karpenter&#8217;\u0131n \u00e7ok fazla kaynak sa\u011flamas\u0131n\u0131 veya k\u00fcmenizin beklenenden daha b\u00fcy\u00fck olmas\u0131n\u0131 engeller.<\/li>\n<li><strong>NodeSelector ve Toleration&#8217;lar ile Entegrasyon:<\/strong> Uygulama pod&#8217;lar\u0131n\u0131zda <code>nodeSelector<\/code> ve <code>toleration<\/code> kullanarak, Karpenter&#8217;\u0131n belirli i\u015f y\u00fckleri i\u00e7in en uygun node&#8217;lar\u0131 se\u00e7mesini sa\u011flay\u0131n. \u00d6rne\u011fin, kesintiye toleransl\u0131 pod&#8217;lar i\u00e7in Spot Instance&#8217;lara \u00f6zel tolerasyonlar ekleyin.<\/li>\n<li><strong>Cluster Autoscaler ile Birlikte Kullan\u0131m (Ge\u00e7i\u015f Senaryolar\u0131):<\/strong> Mevcut EKS k\u00fcmelerinde Cluster Autoscaler&#8217;dan Karpenter&#8217;a ge\u00e7i\u015f yaparken, her iki arac\u0131 bir s\u00fcre paralel olarak \u00e7al\u0131\u015ft\u0131rmak iyi bir strateji olabilir. Karpenter&#8217;\u0131n daha agresif ve h\u0131zl\u0131 \u00f6l\u00e7eklenme davran\u0131\u015f\u0131n\u0131 g\u00f6zlemleyerek, yava\u015f yava\u015f Cluster Autoscaler&#8217;\u0131n kontrol\u00fcndeki node gruplar\u0131n\u0131 k\u00fc\u00e7\u00fcltebilirsiniz.<\/li>\n<li><strong>AMI Y\u00f6netimi:<\/strong> Karpenter, genellikle AWS EKS optimize edilmi\u015f AMI&#8217;lerini veya Bottlerocket gibi minimal AMI&#8217;leri kullan\u0131r. E\u011fer \u00f6zel bir AMI kullanman\u0131z gerekiyorsa, <code>AWSNodeTemplate<\/code> i\u00e7inde <code>amiSelector<\/code> alan\u0131n\u0131 kullanarak belirtebilirsiniz. AMI&#8217;lerinizi d\u00fczenli olarak g\u00fcncel tutmak, g\u00fcvenlik yamalar\u0131 ve performans iyile\u015ftirmeleri i\u00e7in \u00f6nemlidir.<\/li>\n<\/ul>\n<p><strong>Vaka Analizi: B\u00fcy\u00fck Bir Veri \u0130\u015fleme Platformunun Maliyet Optimizasyonu<\/strong><\/p>\n<p>B\u00fcy\u00fck bir veri analizi \u015firketi, g\u00fcnde terabaytlarca veriyi i\u015fleyen Spark tabanl\u0131 bir platformu EKS \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131yordu. Geleneksel Cluster Autoscaler ile, Spark i\u015flerinin ani kaynak talepleri nedeniyle genellikle b\u00fcy\u00fck ve pahal\u0131 On-Demand node&#8217;lar \u00f6nceden sa\u011flanmak zorunda kal\u0131n\u0131yordu. Bu da \u00f6nemli \u00f6l\u00e7\u00fcde bo\u015fta kaynak ve y\u00fcksek bulut faturalar\u0131 anlam\u0131na geliyordu. \u015eirket, Karpenter&#8217;\u0131 devreye alarak, Spark i\u015flerinin taleplerine g\u00f6re an\u0131nda Spot Instance&#8217;lar\u0131 temin etmeye ba\u015flad\u0131. Karpenter&#8217;\u0131n ak\u0131ll\u0131 konsolidasyon mekanizmas\u0131 sayesinde, i\u015fler tamamland\u0131\u011f\u0131nda node&#8217;lar h\u0131zla sonland\u0131r\u0131ld\u0131. Sonu\u00e7 olarak, \u015firketin EC2 maliyetlerinde %30&#8217;un \u00fczerinde bir d\u00fc\u015f\u00fc\u015f ya\u015fand\u0131 ve Spark i\u015flerinin ba\u015flang\u0131\u00e7 s\u00fcreleri de \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131sald\u0131. Bu, Karpenter&#8217;\u0131n hem maliyet hem de performans a\u00e7\u0131s\u0131ndan ne kadar d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc olabilece\u011finin somut bir \u00f6rne\u011fidir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Karpenter&#8217;\u0131 Amazon EKS k\u00fcmenize Terraform ile entegre etmek, bulut altyap\u0131n\u0131z\u0131n y\u00f6netimini k\u00f6kten de\u011fi\u015ftiren g\u00fc\u00e7l\u00fc bir ad\u0131md\u0131r. Bu makalede, Karpenter&#8217;\u0131n ne oldu\u011funu, geleneksel otomatik \u00f6l\u00e7eklendirme \u00e7\u00f6z\u00fcmlerinden farklar\u0131n\u0131, EKS ortam\u0131nda neden bu kadar de\u011ferli oldu\u011funu ve Terraform kullanarak ad\u0131m ad\u0131m nas\u0131l kurulaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde ele ald\u0131k. Geli\u015fmi\u015f kullan\u0131m senaryolar\u0131 ve en iyi uygulamalarla, Karpenter&#8217;\u0131n t\u00fcm potansiyelini nas\u0131l ortaya \u00e7\u0131karabilece\u011finizi g\u00f6sterdik.<\/p>\n<p>Sonu\u00e7 olarak, Karpenter, EKS k\u00fcmelerinizde h\u0131zl\u0131, maliyet-etkin ve operasyonel y\u00fck\u00fc azaltan bir node sa\u011flama mekanizmas\u0131 sunar. Terraform ile bu kurulumu otomatize etmek, altyap\u0131n\u0131z\u0131n tutarl\u0131l\u0131\u011f\u0131n\u0131, tekrarlanabilirli\u011fini ve s\u00fcr\u00fcm kontrol\u00fcn\u00fc sa\u011flayarak DevOps s\u00fcre\u00e7lerinizi g\u00fc\u00e7lendirir. Modern bulut uygulamalar\u0131n\u0131n dinamik do\u011fas\u0131na uyum sa\u011flamak ve bulut harcamalar\u0131n\u0131z\u0131 optimize etmek isteyen her kurulu\u015f i\u00e7in Karpenter, d\u00fc\u015f\u00fcn\u00fclmesi gereken kritik bir ara\u00e7t\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<h3>Karpenter Cluster Autoscaler&#8217;\u0131n yerine mi ge\u00e7iyor?<\/h3>\n<p>Evet, \u00e7o\u011fu senaryoda Karpenter, Cluster Autoscaler&#8217;\u0131n yerini almak \u00fczere tasarlanm\u0131\u015ft\u0131r. Cluster Autoscaler&#8217;\u0131n aksine, Karpenter node gruplar\u0131na ba\u011fl\u0131 kalmaz ve pod taleplerine g\u00f6re do\u011frudan EC2 instance&#8217;lar\u0131n\u0131 sa\u011flar, bu da daha h\u0131zl\u0131 \u00f6l\u00e7eklenme ve daha iyi maliyet optimizasyonu sunar. Ancak, ge\u00e7i\u015f senaryolar\u0131nda bir s\u00fcre paralel olarak kullan\u0131labilirler.<\/p>\n<h3>Karpenter sadece AWS EKS ile mi \u00e7al\u0131\u015f\u0131r?<\/h3>\n<p>Karpenter, AWS taraf\u0131ndan geli\u015ftirildi\u011fi i\u00e7in \u00f6ncelikli olarak AWS EKS ile entegre olacak \u015fekilde tasarlanm\u0131\u015ft\u0131r ve AWS&#8217;in EC2, Spot Instances gibi hizmetlerinden tam olarak yararlan\u0131r. \u015eu an i\u00e7in sadece AWS ekosisteminde desteklenmektedir.<\/p>\n<h3>Karpenter ile hangi instance tiplerini kullanabilirim?<\/h3>\n<p>Karpenter, EC2 instance katalo\u011fundaki neredeyse t\u00fcm instance tiplerini (C, M, R, T, G serileri dahil) kullanabilir. Provisioner kaynaklar\u0131n\u0131zda <code>requirements<\/code> alan\u0131n\u0131 kullanarak belirli instance ailelerini, mimarileri (amd64, arm64) ve kapasite tiplerini (spot, on-demand) tercih edebilirsiniz.<\/p>\n<h3>Karpenter node&#8217;lar\u0131 ne zaman sonland\u0131r\u0131r?<\/h3>\n<p>Karpenter, node&#8217;lar\u0131 iki ana durumda sonland\u0131r\u0131r:<\/p>\n<ol>\n<li><strong>Bo\u015fta Kalma S\u00fcresi Doldu\u011funda (TTL After Empty):<\/strong> Bir node \u00fczerindeki t\u00fcm pod&#8217;lar silindi\u011finde veya ba\u015fka node&#8217;lara ta\u015f\u0131nd\u0131\u011f\u0131nda, <code>ttlSecondsAfterEmpty<\/code> parametresinde belirtilen s\u00fcre (varsay\u0131lan 30 saniye) dolduktan sonra node&#8217;u sonland\u0131r\u0131r.<\/li>\n<li><strong>S\u00fcresi Doldu\u011funda (TTL Until Expired):<\/strong> <code>ttlSecondsUntilExpired<\/code> parametresinde belirtilen ya\u015fam s\u00fcresi (varsay\u0131lan 7 g\u00fcn) doldu\u011funda, g\u00fcvenlik g\u00fcncellemeleri veya daha yeni AMI&#8217;lere ge\u00e7i\u015f i\u00e7in node&#8217;u sonland\u0131r\u0131r ve yerine yenisini sa\u011flar.<\/li>\n<\/ol>\n<h3>Karpenter&#8217;\u0131n maliyetleri nas\u0131l optimize etti\u011fini nas\u0131l takip edebilirim?<\/h3>\n<p>Karpenter&#8217;\u0131n maliyet optimizasyonunu takip etmek i\u00e7in AWS Cost Explorer&#8217;\u0131 kullanabilirsiniz. Karpenter, ba\u015flatt\u0131\u011f\u0131 EC2 instance&#8217;lar\u0131na otomatik olarak <code>karpenter.sh\/provisioner-name<\/code> ve <code>karpenter.sh\/provisioner-family<\/code> gibi etiketler ekler. Cost Explorer&#8217;da bu etiketlere g\u00f6re filtreleme yaparak, Karpenter&#8217;\u0131n sa\u011flad\u0131\u011f\u0131 node&#8217;lar\u0131n maliyetini ve tasarruflar\u0131n\u0131 detayl\u0131 bir \u015fekilde analiz edebilirsiniz. Ayr\u0131ca, Prometheus ve Grafana ile Karpenter metriklerini izleyerek operasyonel verimlili\u011fi g\u00f6zlemleyebilirsiniz.<\/p>\n<p>#AWS #EKS #Karpenter #Terraform #Kubernetes #CloudMaliyetOptimizasyonu #DevOps<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, uygulamalar\u0131n anl\u0131k taleplere g\u00f6re \u00f6l\u00e7eklenebilmesi hayati \u00f6nem ta\u015f\u0131r.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-44537","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>EKS&#039;te Karpenter&#039;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r? - 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\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EKS&#039;te Karpenter&#039;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, uygulamalar\u0131n anl\u0131k taleplere g\u00f6re \u00f6l\u00e7eklenebilmesi hayati \u00f6nem ta\u015f\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-06T06:02:53+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=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"EKS&#8217;te Karpenter&#8217;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r?\",\"datePublished\":\"2026-09-06T06:02:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\"},\"wordCount\":4561,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\",\"name\":\"EKS'te Karpenter'\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-09-06T06:02:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EKS&#8217;te Karpenter&#8217;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\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":"EKS'te Karpenter'\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r? - 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\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/","og_locale":"tr_TR","og_type":"article","og_title":"EKS'te Karpenter'\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r?","og_description":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, uygulamalar\u0131n anl\u0131k taleplere g\u00f6re \u00f6l\u00e7eklenebilmesi hayati \u00f6nem ta\u015f\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-09-06T06:02:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"EKS&#8217;te Karpenter&#8217;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r?","datePublished":"2026-09-06T06:02:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/"},"wordCount":4561,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/","url":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/","name":"EKS'te Karpenter'\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-09-06T06:02:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ekste-karpenteri-terraform-ile-etkinlestirmek-neden-gerekli-ve-nasil-yapilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"EKS&#8217;te Karpenter&#8217;\u0131 Terraform ile Etkinle\u015ftirmek: Neden Gerekli ve Nas\u0131l Yap\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\/44537","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=44537"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44537\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}