{"id":34226,"date":"2025-11-13T07:01:10","date_gmt":"2025-11-13T04:01:10","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/"},"modified":"2025-11-13T07:01:10","modified_gmt":"2025-11-13T04:01:10","slug":"kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/","title":{"rendered":"Kubernetes&#8217;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme"},"content":{"rendered":"<style>\n  body {\n    font-family: Arial, sans-serif;\n    line-height: 1.6;\n    color: #333;\n    margin: 0 auto;\n    max-width: 900px;\n    padding: 20px;\n  }\n  h2, h3 {\n    color: #2c3e50;\n    margin-top: 30px;\n    margin-bottom: 15px;\n  }\n  h2 {\n    border-bottom: 2px solid #3498db;\n    padding-bottom: 10px;\n  }\n  h3 {\n    border-bottom: 1px solid #bdc3c7;\n    padding-bottom: 5px;\n  }\n  p {\n    margin-bottom: 15px;\n  }\n  code {\n    background-color: #ecf0f1;\n    padding: 2px 4px;\n    border-radius: 4px;\n    font-family: 'Courier New', Courier, monospace;\n    font-size: 0.9em;\n  }\n  pre {\n    background-color: #2d2d2d;\n    color: #f8f8f2;\n    padding: 15px;\n    border-radius: 5px;\n    overflow-x: auto;\n    margin-bottom: 20px;\n  }\n  pre code {\n    background-color: transparent;\n    color: #f8f8f2;\n    padding: 0;\n  }\n  ul, ol {\n    margin-left: 20px;\n    margin-bottom: 15px;\n  }\n  li {\n    margin-bottom: 8px;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 20px;\n  }\n  th, td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n    font-weight: bold;\n  }\n  .expert-tip {\n    background-color: #e0f7fa;\n    border-left: 5px solid #00bcd4;\n    padding: 15px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    border-radius: 4px;\n    font-style: italic;\n    color: #00796b;\n  }\n  .warning {\n    background-color: #ffe0b2;\n    border-left: 5px solid #ff9800;\n    padding: 15px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    border-radius: 4px;\n    color: #e65100;\n  }\n  \/* Mobil uyumluluk *\/\n  @media (max-width: 768px) {\n    body {\n      padding: 10px;\n    }\n    h2 {\n      font-size: 1.5em;\n    }\n    h3 {\n      font-size: 1.2em;\n    }\n    pre {\n      font-size: 0.85em;\n    }\n    table {\n      display: block;\n      overflow-x: auto;\n      white-space: nowrap;\n    }\n    th, td {\n      white-space: normal;\n    }\n  }\n<\/style>\n<p>Kubernetes&#8217;te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dinamik dijital d\u00fcnyas\u0131nda, web uygulamalar\u0131m\u0131z\u0131n ve hizmetlerimizin kar\u015f\u0131la\u015ft\u0131\u011f\u0131 kullan\u0131c\u0131 trafi\u011fi s\u00fcrekli de\u011fi\u015fir. Yo\u011fun zamanlarda talebi kar\u015f\u0131lamak i\u00e7in kaynaklar\u0131 art\u0131rmak, daha az yo\u011fun zamanlarda ise maliyetleri d\u00fc\u015f\u00fcrmek i\u00e7in kaynaklar\u0131 azaltmak hayati \u00f6nem ta\u015f\u0131r. Peki, bu s\u00fcreci manuel olarak y\u00f6netmek ne kadar verimli? Kesinlikle \u00e7ok yorucu ve hataya a\u00e7\u0131k bir y\u00f6ntem. \u0130\u015fte tam da bu noktada Kubernetes&#8217;in g\u00fc\u00e7l\u00fc otomatik \u00f6l\u00e7ekleme \u00f6zelli\u011fi olan Horizontal Pod Autoscaler (HPA) devreye giriyor.<\/p>\n<p>Bu kapsaml\u0131 makale boyunca, HPA&#8217;n\u0131n ne oldu\u011funu, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, kurulumunu ve yap\u0131land\u0131rmas\u0131n\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Dahas\u0131, HPA&#8217;y\u0131 daha ileri seviyede kullanarak \u00f6zel metriklerle nas\u0131l entegre edebilece\u011finizi ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l optimize edebilece\u011finizi ke\u015ffedece\u011fiz. Amac\u0131m\u0131z, Kubernetes ortam\u0131n\u0131zda uygulamalar\u0131n\u0131z\u0131n her zaman do\u011fru kaynaklara sahip olmas\u0131n\u0131 sa\u011flayarak performans sorunlar\u0131n\u0131 \u00f6nlemek ve maliyetleri d\u00fc\u015f\u00fcrmektir. Haydi, HPA&#8217;n\u0131n b\u00fcy\u00fcleyici d\u00fcnyas\u0131na birlikte dalal\u0131m!<\/p>\n<p>Uygulama d\u00fcnyas\u0131nda talep tahmin edilemez bir olgudur. Bir e-ticaret sitesi d\u00fc\u015f\u00fcn\u00fcn; \u00f6zel indirim g\u00fcnlerinde veya bayramlarda yo\u011fun trafik alabilirken, normal zamanlarda \u00e7ok daha sakin bir seyir izler. Bu t\u00fcr dalgalanmalar kar\u015f\u0131s\u0131nda uygulamalar\u0131n\u0131z\u0131n performans\u0131 kritik \u00f6neme sahiptir. E\u011fer yeterli kayna\u011fa sahip de\u011filseniz, kullan\u0131c\u0131lar\u0131n\u0131z yava\u015f y\u00fckleme s\u00fcreleri, hatalar veya tamamen eri\u015filemez bir hizmetle kar\u015f\u0131la\u015fabilir. Bunun tam tersi durumda, yani gere\u011finden fazla kayna\u011fa sahipseniz, sunucular i\u00e7in bo\u015f yere para \u00f6d\u00fcyor olursunuz. \u0130\u015fte bu dengenin sa\u011flanmas\u0131, yani uygulaman\u0131n ihtiya\u00e7lar\u0131na g\u00f6re dinamik olarak kaynak tahsis edilmesi, otomatik \u00f6l\u00e7eklemenin temel amac\u0131d\u0131r.<\/p>\n<p>Otomatik \u00f6l\u00e7ekleme, bir uygulaman\u0131n i\u015f y\u00fck\u00fcne g\u00f6re kaynaklar\u0131n\u0131 otomatik olarak art\u0131rma (scale up) veya azaltma (scale down) yetene\u011fidir. Bu mekanizma, performans\u0131 optimize ederken ayn\u0131 zamanda operasyonel maliyetleri d\u00fc\u015f\u00fcrmeye yard\u0131mc\u0131 olur. Kubernetes, bu konuda \u00e7e\u015fitli ara\u00e7lar sunar ve Horizontal Pod Autoscaler (HPA) bunlardan en \u00f6nemlilerinden biridir. HPA, i\u015f y\u00fck\u00fc artt\u0131\u011f\u0131nda uygulaman\u0131z\u0131n daha fazla Pod \u00f6rne\u011fi olu\u015fturarak (yatay \u00f6l\u00e7ekleme) talebi kar\u015f\u0131lamas\u0131n\u0131 sa\u011flar. \u0130\u015f y\u00fck\u00fc azald\u0131\u011f\u0131nda ise gereksiz Pod&#8217;lar\u0131 sonland\u0131rarak kaynak kullan\u0131m\u0131n\u0131 optimize eder. Bu sayede, uygulaman\u0131z her zaman do\u011fru say\u0131da Pod ile \u00e7al\u0131\u015f\u0131r, bu da kullan\u0131c\u0131 deneyimini iyile\u015ftirirken bulut maliyetlerini kontrol alt\u0131nda tutar.<\/p>\n<p>Kubernetes ekosisteminde HPA&#8217;n\u0131n yan\u0131nda ba\u015fka otomatik \u00f6l\u00e7ekleme ara\u00e7lar\u0131 da bulunur. Bunlar aras\u0131nda Vertical Pod Autoscaler (VPA) ve Cluster Autoscaler say\u0131labilir. HPA, mevcut Pod&#8217;lar\u0131n say\u0131s\u0131n\u0131 de\u011fi\u015ftirerek yatay \u00f6l\u00e7ekleme yaparken; VPA, Pod&#8217;lar\u0131n CPU ve bellek gibi kaynak taleplerini (requests) ve limitlerini (limits) dikey olarak ayarlar. Cluster Autoscaler ise, Pod&#8217;lar\u0131 bar\u0131nd\u0131racak yeterli kapasite olmad\u0131\u011f\u0131nda k\u00fcmedeki d\u00fc\u011f\u00fcm (node) say\u0131s\u0131n\u0131 otomatik olarak art\u0131r\u0131r veya d\u00fc\u011f\u00fcmler bo\u015f kald\u0131\u011f\u0131nda azalt\u0131r. Bu \u00fc\u00e7 ara\u00e7, birlikte \u00e7al\u0131\u015farak Kubernetes ortam\u0131n\u0131zda kapsaml\u0131 bir otomatik \u00f6l\u00e7ekleme stratejisi olu\u015fturman\u0131za olanak tan\u0131r, ancak HPA genellikle uygulama d\u00fczeyinde dinamiklik i\u00e7in ilk ba\u015fvurulan \u00e7\u00f6z\u00fcmd\u00fcr. Dolay\u0131s\u0131yla, uygulamalar\u0131n\u0131z\u0131n trafik y\u00fcklerine an\u0131nda yan\u0131t verebilmesi i\u00e7in HPA&#8217;y\u0131 anlamak ve do\u011fru bir \u015fekilde yap\u0131land\u0131rmak olduk\u00e7a de\u011ferlidir.<\/p>\n<h2>Horizontal Pod Autoscaler (HPA) Nas\u0131l \u00c7al\u0131\u015f\u0131r? Temel Mekanizmalar Nelerdir?<\/h2>\n<p>Horizontal Pod Autoscaler (HPA), Kubernetes&#8217;in en kritik kontrol\u00f6rlerinden biridir ve uygulama Pod&#8217;lar\u0131n\u0131n replika say\u0131s\u0131n\u0131 otomatik olarak ayarlamakla g\u00f6revlidir. Peki, bu dinamik \u00f6l\u00e7ekleme s\u00fcreci tam olarak nas\u0131l i\u015fler? Temelinde, HPA s\u00fcrekli olarak belirli metrikleri izler ve bu metrikler \u00f6nceden tan\u0131mlanm\u0131\u015f e\u015fik de\u011ferlerini a\u015ft\u0131\u011f\u0131nda veya alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde Deployment, ReplicaSet veya StatefulSet gibi \u00f6l\u00e7eklenebilir kaynaklar\u0131n replika say\u0131s\u0131n\u0131 de\u011fi\u015ftirir. Bu s\u00fcre\u00e7, olduk\u00e7a sofistike bir geri bildirim d\u00f6ng\u00fcs\u00fc \u00fczerine kuruludur.<\/p>\n<p>HPA&#8217;n\u0131n \u00e7al\u0131\u015fmas\u0131ndaki en \u00f6nemli bile\u015fenlerden biri <code_inline>Metrics Server<\/code_inline>&#8216;d\u0131r. Kubernetes k\u00fcmenizdeki Pod&#8217;lar\u0131n CPU ve bellek gibi temel kaynak kullan\u0131m verilerini toplar ve HPA&#8217;ya sunar. HPA kontrol\u00f6r\u00fc, her belirli aral\u0131klarla (varsay\u0131lan olarak 15 saniyede bir) <code_inline>Metrics Server<\/code_inline>&#8216;dan ilgili metrikleri sorgular. \u00d6rne\u011fin, bir Deployment i\u00e7in hedef CPU kullan\u0131m\u0131n\u0131n %50 oldu\u011funu varsayal\u0131m. HPA, Pod&#8217;lar\u0131n anl\u0131k CPU kullan\u0131m\u0131n\u0131 kontrol eder. E\u011fer Pod&#8217;lar\u0131n ortalama CPU kullan\u0131m\u0131 %70&#8217;e ula\u015f\u0131rsa, HPA daha fazla Pod&#8217;a ihtiya\u00e7 oldu\u011funu anlar ve replika say\u0131s\u0131n\u0131 art\u0131r\u0131r. Tam tersi durumda, ortalama CPU kullan\u0131m\u0131 %20&#8217;ye d\u00fc\u015ferse, HPA gereksiz Pod&#8217;lar\u0131 azaltmaya ba\u015flar.<\/p>\n<p>\u00d6l\u00e7ekleme kararlar\u0131, basit bir matematiksel form\u00fclle al\u0131n\u0131r: <code_inline>gerekli_replikalar = ceil(mevcut_replikalar * (mevcut_ortalama_metrik \/ hedef_ortalama_metrik))<\/code_inline>. Bu form\u00fcl, mevcut Pod&#8217;lar\u0131n metrik kullan\u0131m\u0131na bakarak hedeflenen metrik de\u011ferini korumak i\u00e7in ka\u00e7 Pod&#8217;a ihtiya\u00e7 duyuldu\u011funu hesaplar. Ancak, HPA sadece anl\u0131k verilere g\u00f6re k\u00f6r\u00fc k\u00f6r\u00fcne \u00f6l\u00e7ekleme yapmaz. Ani y\u00fckseli\u015f ve d\u00fc\u015f\u00fc\u015flerde gereksiz \u00f6l\u00e7eklemeyi \u00f6nlemek i\u00e7in &#8220;stabilizasyon pencereleri&#8221; (cooldown\/warmup periods) kullan\u0131r. Bu pencereler, HPA&#8217;n\u0131n \u00f6l\u00e7ekleme kararlar\u0131n\u0131 belirli bir s\u00fcre boyunca stabilize etmesini sa\u011flayarak, uygulaman\u0131n s\u00fcrekli olarak \u00f6l\u00e7eklenip k\u00fc\u00e7\u00fclmesini engeller. \u00d6rne\u011fin, bir \u00f6l\u00e7ekleme eyleminden sonra HPA, yeni Pod&#8217;lar\u0131n devreye girmesi veya mevcutlar\u0131n sonlanmas\u0131 i\u00e7in belirli bir s\u00fcre bekler, b\u00f6ylece sistemin stabilize olmas\u0131n\u0131 bekler.<\/p>\n<p>HPA nesnesini tan\u0131mlarken belirledi\u011fimiz <code_inline>minReplicas<\/code_inline>, <code_inline>maxReplicas<\/code_inline> ve <code_inline>targetCPUUtilizationPercentage<\/code_inline> (veya di\u011fer metrik hedefleri) alanlar\u0131 bu s\u00fcrecin kalbidir. <code_inline>minReplicas<\/code_inline>, uygulaman\u0131z\u0131n her zaman sahip olaca\u011f\u0131 minimum Pod say\u0131s\u0131n\u0131 garanti ederken, <code_inline>maxReplicas<\/code_inline> ise uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilece\u011fi maksimum Pod say\u0131s\u0131n\u0131 s\u0131n\u0131rlar. Bu s\u0131n\u0131rlar, kaynak israf\u0131n\u0131 veya a\u015f\u0131r\u0131 kaynak kullan\u0131m\u0131n\u0131 \u00f6nlemek i\u00e7in \u00e7ok \u00f6nemlidir. Genellikle ilk olarak <code_inline>targetCPUUtilizationPercentage<\/code_inline> gibi kaynak bazl\u0131 metrikler kullan\u0131l\u0131r, \u00e7\u00fcnk\u00fc bunlar genellikle en kolay elde edilebilir ve anla\u015f\u0131labilir metriklerdir. Ancak, HPA sadece CPU veya bellek ile s\u0131n\u0131rl\u0131 de\u011fildir; daha karma\u015f\u0131k senaryolarda \u00f6zel metrikler veya hatta harici metrikler kullanarak daha ak\u0131ll\u0131 \u00f6l\u00e7ekleme kararlar\u0131 alabilir. Bu ileri d\u00fczey yetenekler, HPA&#8217;y\u0131 ger\u00e7ekten \u00e7ok y\u00f6nl\u00fc bir ara\u00e7 haline getirir ve modern mikro hizmet mimarilerinde esneklik sa\u011flar.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: HPA&#8217;n\u0131n do\u011fru \u00e7al\u0131\u015fmas\u0131 i\u00e7in Pod&#8217;lar\u0131n\u0131z\u0131n CPU ve bellek <code>requests<\/code> de\u011ferlerini do\u011fru bir \u015fekilde ayarlaman\u0131z \u00e7ok \u00f6nemlidir. HPA, bu <code>requests<\/code> de\u011ferlerine g\u00f6re y\u00fczdesel kullan\u0131m hesaplamalar\u0131n\u0131 yapar. E\u011fer <code>requests<\/code> \u00e7ok d\u00fc\u015f\u00fckse, Pod&#8217;lar\u0131n\u0131z h\u0131zla %100 CPU kullan\u0131m\u0131na ula\u015fabilir ve gereksiz \u00f6l\u00e7eklemeyi tetikleyebilir.\n<\/div>\n<h3>Ad\u0131m Ad\u0131m HPA Kurulumu ve Yap\u0131land\u0131rmas\u0131: Bir Uygulama \u00d6rne\u011fi Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>HPA&#8217;y\u0131 Kubernetes k\u00fcmenizde devreye almak, genellikle birka\u00e7 basit ad\u0131mdan olu\u015fur. Bu b\u00f6l\u00fcmde, \u00f6rnek bir Nginx uygulamas\u0131 \u00fczerinden HPA&#8217;n\u0131n nas\u0131l kurulaca\u011f\u0131n\u0131 ve yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m g\u00f6sterece\u011fiz. Bu sayede, s\u00fcreci ba\u015ftan sona deneyimleyebilir ve kendi uygulamalar\u0131n\u0131za kolayca adapte edebilirsiniz.<\/p>\n<h4>Ad\u0131m 1: \u00d6rnek Bir Deployment ve Service Tan\u0131mlama<\/h4>\n<p>\u00d6ncelikle, \u00f6l\u00e7eklemek istedi\u011fimiz bir uygulama Pod&#8217;una ihtiyac\u0131m\u0131z var. Basit bir Nginx Deployment&#8217;\u0131 ve bu Deployment&#8217;a eri\u015fimi sa\u011flayacak bir Service tan\u0131mlayal\u0131m. Bu \u00f6rnekte, Nginx&#8217;in her bir Pod&#8217;u i\u00e7in 200m (200 millicores) CPU request&#8217;i talep etti\u011fini varsay\u0131yoruz. HPA, bu request de\u011ferine g\u00f6re CPU kullan\u0131m\u0131n\u0131 y\u00fczde olarak hesaplayacakt\u0131r.<\/p>\n<pre><code>\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: hpa-nginx-deployment\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: hpa-nginx\n  template:\n    metadata:\n      labels:\n        app: hpa-nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:latest\n        ports:\n        - containerPort: 80\n        resources:\n          requests:\n            cpu: \"200m\" # HPA i\u00e7in kritik\n            memory: \"128Mi\"\n          limits:\n            cpu: \"500m\"\n            memory: \"256Mi\"\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: hpa-nginx-service\nspec:\n  selector:\n    app: hpa-nginx\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 80\n  type: ClusterIP\n<\/pre>\n<p><\/code><\/p>\n<p>Bu YAML dosyas\u0131n\u0131 <code_inline>nginx-deployment.yaml<\/code_inline> olarak kaydedin ve k\u00fcmenize uygulay\u0131n:<\/p>\n<pre><code>\nkubectl apply -f nginx-deployment.yaml\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi k\u00fcmenizde 1 adet Nginx Pod'u \u00e7al\u0131\u015f\u0131yor olmal\u0131.<\/p>\n<h4>Ad\u0131m 2: Metrics Server Kurulumu (Gerekliyse)<\/h4>\n<p>HPA'n\u0131n Pod'lar\u0131n CPU ve bellek kullan\u0131m verilerine eri\u015febilmesi i\u00e7in k\u00fcmenizde <code_inline>Metrics Server<\/code_inline>'\u0131n kurulu olmas\u0131 gerekir. \u00c7o\u011fu y\u00f6netilen Kubernetes servisinde (EKS, GKE, AKS) genellikle \u00f6n y\u00fckl\u00fc olarak gelir, ancak kendi kurdu\u011funuz k\u00fcmelerde manuel olarak y\u00fcklemeniz gerekebilir. Kurulumu a\u015fa\u011f\u0131daki gibi yapabilirsiniz:<\/p>\n<pre><code>\nkubectl apply -f https:\/\/github.com\/kubernetes-sigs\/metrics-server\/releases\/latest\/download\/components.yaml\n<\/pre>\n<p><\/code><\/p>\n<p><code_inline>Metrics Server<\/code_inline>'\u0131n sa\u011fl\u0131kl\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in birka\u00e7 dakika bekledikten sonra a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nkubectl get apiservice v1beta1.metrics.k8s.io\n<\/pre>\n<p><\/code><\/p>\n<p>Durumu <code_inline>Available<\/code_inline> olarak g\u00f6rmeniz gerekir.<\/p>\n<h4>Ad\u0131m 3: Horizontal Pod Autoscaler Objeleri Olu\u015fturma<\/h4>\n<p>Art\u0131k Nginx Deployment'\u0131m\u0131z\u0131 ve Metrics Server'\u0131m\u0131z\u0131 haz\u0131r hale getirdi\u011fimize g\u00f6re, HPA'y\u0131 tan\u0131mlayabiliriz. \u0130ki farkl\u0131 yolla HPA objesi olu\u015fturabiliriz: basit <code_inline>kubectl autoscale<\/code_inline> komutuyla veya daha detayl\u0131 YAML tan\u0131m\u0131yla.<\/p>\n<h5>Se\u00e7enek A: <code>kubectl autoscale<\/code> Komutu ile Basit Kurulum<\/h5>\n<p>Bu, h\u0131zl\u0131 bir ba\u015flang\u0131\u00e7 i\u00e7in harika bir yoldur. A\u015fa\u011f\u0131daki komut, <code_inline>hpa-nginx-deployment<\/code_inline> i\u00e7in bir HPA olu\u015fturur:<\/p>\n<ul>\n<li>Minimum 1, maksimum 10 Pod aras\u0131nda \u00f6l\u00e7eklenecek.<\/li>\n<li>Pod'lar\u0131n ortalama CPU kullan\u0131m\u0131n\u0131n %50'si hedeflenecek.<\/li>\n<\/ul>\n<pre><code>\nkubectl autoscale deployment hpa-nginx-deployment --cpu-percent=50 --min=1 --max=10\n<\/pre>\n<p><\/code><\/p>\n<p>HPA'n\u0131n durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code>\nkubectl get hpa\n<\/pre>\n<p><\/code><\/p>\n<p>\u00c7\u0131kt\u0131 \u015f\u00f6yle bir \u015feye benzer olmal\u0131d\u0131r:<\/p>\n<pre><code>\nNAME                     REFERENCE                           TARGETS        MINPODS   MAXPODS   REPLICAS   AGE\nhpa-nginx-deployment   Deployment\/hpa-nginx-deployment   <unknown>\/50%   1         10        1          30s\n<\/pre>\n<p><\/code><\/p>\n<p><code><unknown><\/code> ifadesi, Metrics Server'\u0131n hen\u00fcz yeterli veri toplamad\u0131\u011f\u0131 veya HPA'n\u0131n ilk hesaplamas\u0131n\u0131 yapmad\u0131\u011f\u0131 anlam\u0131na gelir. Birka\u00e7 dakika sonra bu de\u011fer Pod'lar\u0131n ger\u00e7ek CPU kullan\u0131m\u0131n\u0131 g\u00f6stermeye ba\u015flayacakt\u0131r.<\/p>\n<h5>Se\u00e7enek B: YAML Tan\u0131m\u0131 ile Detayl\u0131 Kurulum<\/h5>\n<p>Daha fazla kontrol ve s\u00fcr\u00fcm kontrol\u00fc i\u00e7in HPA'y\u0131 bir YAML dosyas\u0131yla tan\u0131mlamak en iyi yakla\u015f\u0131md\u0131r. A\u015fa\u011f\u0131daki YAML, yukar\u0131daki <code_inline>kubectl autoscale<\/code_inline> komutuyla ayn\u0131 HPA'y\u0131 olu\u015fturur:<\/p>\n<pre><code>\napiVersion: autoscaling\/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: hpa-nginx-config\nspec:\n  scaleTargetRef:\n    apiVersion: apps\/v1\n    kind: Deployment\n    name: hpa-nginx-deployment\n  minReplicas: 1\n  maxReplicas: 10\n  metrics:\n  - type: Resource\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 50\n<\/pre>\n<p><\/code><\/p>\n<p>Bu YAML dosyas\u0131n\u0131 <code_inline>hpa-config.yaml<\/code_inline> olarak kaydedin ve k\u00fcmenize uygulay\u0131n:<\/p>\n<pre><code>\nkubectl apply -f hpa-config.yaml\n<\/pre>\n<p><\/code><\/p>\n<p>HPA'n\u0131n detaylar\u0131n\u0131 incelemek i\u00e7in:<\/p>\n<pre><code>\nkubectl describe hpa hpa-nginx-config\n<\/pre>\n<p><\/code><\/p>\n<p>Burada HPA'n\u0131n mevcut durumunu, hedeflerini, olaylar\u0131 (events) ve ald\u0131\u011f\u0131 kararlar\u0131 g\u00f6rebilirsiniz.<\/p>\n<h4>Ad\u0131m 4: Uygulamay\u0131 Y\u00fck Alt\u0131na Sokma ve \u00d6l\u00e7eklenmeyi G\u00f6zlemleme<\/h4>\n<p>HPA'n\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test etmek i\u00e7in Nginx Pod'unuza bir miktar y\u00fck bindirmemiz gerekiyor. Bunu yapmak i\u00e7in, k\u00fcme i\u00e7inden ge\u00e7ici bir Pod olu\u015fturup Nginx hizmetine yo\u011fun istekler g\u00f6nderebiliriz. \u00d6rne\u011fin, bir Ubuntu Pod'u ba\u015flat\u0131p <code_inline>apache2-utils<\/code_inline> paketini kullanarak <code_inline>ab<\/code_inline> (Apache Bench) komutunu \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<pre><code>\nkubectl run -i --tty load-generator --rm --image=ubuntu -- \/bin\/bash -c \"apt-get update && apt-get install -y apache2-utils && while true; do ab -n 100000 -c 100 http:\/\/hpa-nginx-service\/; sleep 1; done\"\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <code_inline>hpa-nginx-service<\/code_inline> adresine s\u00fcrekli olarak y\u00fck g\u00f6nderecektir. Nginx Pod'unuzun CPU kullan\u0131m\u0131 artmaya ba\u015flayacak ve belirli bir s\u00fcre sonra HPA devreye girerek yeni Pod'lar olu\u015fturacakt\u0131r.<\/p>\n<p>Yeni Pod'lar\u0131n olu\u015fumunu ve \u00f6l\u00e7eklenme s\u00fcrecini izlemek i\u00e7in ayr\u0131 bir terminalde \u015fu komutlar\u0131 kullan\u0131n:<\/p>\n<pre><code>\nkubectl get hpa -w\nkubectl get pods -w -l app=hpa-nginx\n<\/pre>\n<p><\/code><\/p>\n<p>Birka\u00e7 dakika i\u00e7inde <code_inline>kubectl get hpa -w<\/code_inline> \u00e7\u0131kt\u0131s\u0131nda <code_inline>TARGETS<\/code_inline> de\u011ferinin y\u00fckseldi\u011fini ve <code_inline>REPLICAS<\/code_inline> say\u0131s\u0131n\u0131n <code_inline>minReplicas<\/code_inline> de\u011ferinden daha fazla oldu\u011funu g\u00f6receksiniz. Ayn\u0131 \u015fekilde, <code_inline>kubectl get pods -w<\/code_inline> \u00e7\u0131kt\u0131s\u0131nda yeni Nginx Pod'lar\u0131n\u0131n <code_inline>ContainerCreating<\/code_inline> ve ard\u0131ndan <code_inline>Running<\/code_inline> durumuna ge\u00e7ti\u011fini izleyebilirsiniz.<\/p>\n<p>Y\u00fck olu\u015fturucuyu durdurdu\u011funuzda (CTRL+C), CPU kullan\u0131m\u0131 normale d\u00f6necek ve HPA, belirli bir stabilizasyon s\u00fcresi sonunda Pod say\u0131s\u0131n\u0131 tekrar azaltacakt\u0131r. Bu, HPA'n\u0131n dinamik \u00f6l\u00e7ekleme yetene\u011finin pratik bir g\u00f6sterimidir.<\/p>\n<div class=\"warning\">\n  Dikkat: Y\u00fck testini yaparken k\u00fcmenizin kaynak kapasitesini g\u00f6z \u00f6n\u00fcnde bulundurun. \u00c7ok y\u00fcksek y\u00fck bindirmek veya <code>maxReplicas<\/code> de\u011ferini a\u015f\u0131r\u0131 y\u00fcksek ayarlamak, k\u00fcmenizin a\u015f\u0131r\u0131 y\u00fcklenmesine ve karars\u0131z hale gelmesine neden olabilir.\n<\/div>\n<h2>\u00d6zel Metrikler ve Harici Metriklerle HPA: S\u0131n\u0131rlar\u0131 A\u015fmak M\u00fcmk\u00fcn m\u00fc?<\/h2>\n<p>HPA'n\u0131n CPU ve bellek kullan\u0131m\u0131 gibi temel kaynak metrikleriyle \u00e7al\u0131\u015fmas\u0131 olduk\u00e7a faydal\u0131d\u0131r, ancak modern uygulamalar\u0131n \u00f6l\u00e7eklenme ihtiya\u00e7lar\u0131 genellikle bu basit metriklerin \u00f6tesine ge\u00e7er. Bir mesaj kuyru\u011fundaki bekleyen g\u00f6rev say\u0131s\u0131, HTTP isteklerinin gecikme s\u00fcresi, veritaban\u0131 ba\u011flant\u0131 havuzunun doluluk oran\u0131 veya \u00f6zel bir i\u015f s\u00fcrecinin tamamlanma h\u0131z\u0131 gibi daha spesifik i\u015f metriklerine g\u00f6re \u00f6l\u00e7ekleme yapmak isteyebilirsiniz. \u0130\u015fte bu noktada, HPA'n\u0131n \u00f6zel metrikler (custom metrics) ve harici metrikler (external metrics) ile \u00e7al\u0131\u015fma yetene\u011fi devreye girer, HPA'n\u0131n s\u0131n\u0131rlar\u0131n\u0131 a\u015farak \u00e7ok daha ak\u0131ll\u0131 ve i\u015f odakl\u0131 \u00f6l\u00e7ekleme stratejileri olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p>Kubernetes'in <code_inline>autoscaling\/v2<\/code_inline> API versiyonu, \u00f6zel metriklerin ve harici metriklerin kullan\u0131m\u0131n\u0131 destekler. \u00d6zel metrikler, Pod'lar\u0131n veya genel olarak Kubernetes nesnelerinin i\u00e7inden toplanan ve <code_inline>custom.metrics.k8s.io<\/code_inline> API'si arac\u0131l\u0131\u011f\u0131yla sunulan metriklerdir. \u00d6rne\u011fin, uygulaman\u0131z\u0131n belirli bir HTTP endpoint'ine gelen istek say\u0131s\u0131n\u0131 \u00f6l\u00e7en bir saya\u00e7 olabilir. Harici metrikler ise, Kubernetes k\u00fcmenizin d\u0131\u015f\u0131nda yer alan sistemlerden (\u00f6rne\u011fin, AWS SQS kuyru\u011fu uzunlu\u011fu, Google Pub\/Sub mesaj say\u0131s\u0131, Prometheus'tan gelen \u00f6zel bir uygulama metri\u011fi) toplanan metriklerdir ve <code_inline>external.metrics.k8s.io<\/code_inline> API'si \u00fczerinden HPA'ya sunulur. Bu mekanizma, HPA'n\u0131n sadece Kubernetes i\u00e7indeki kaynaklara de\u011fil, ayn\u0131 zamanda d\u0131\u015f servislerin durumuna da tepki verebilmesini sa\u011flar.<\/p>\n<p>\u00d6zel metrikleri HPA ile kullanmak i\u00e7in genellikle iki ana bile\u015fene ihtiyac\u0131n\u0131z vard\u0131r: bir metrik sa\u011flay\u0131c\u0131s\u0131 ve bu metrikleri <code_inline>custom.metrics.k8s.io<\/code_inline> API'sine sunan bir adapt\u00f6r. Pop\u00fcler metrik sistemlerinden biri olan Prometheus, bu konuda s\u0131kl\u0131kla tercih edilir. Prometheus metriklerini Kubernetes'in \u00f6zel metrik API'sine \u00e7eviren <code_inline>Prometheus Adapter<\/code_inline> gibi ara\u00e7lar bulunur. Bu adapt\u00f6r, Prometheus'tan belirli bir sorgunun sonucunu al\u0131r ve bunu HPA'n\u0131n anlayabilece\u011fi bir formatta sunar. \u00d6rne\u011fin, bir kuyruk uygulamas\u0131n\u0131n kuyru\u011fundaki mesaj say\u0131s\u0131n\u0131 izlemek istedi\u011finizde, Prometheus bu say\u0131y\u0131 toplar ve adapt\u00f6r arac\u0131l\u0131\u011f\u0131yla HPA'ya iletir. HPA da bu say\u0131 belirli bir e\u015fi\u011fi a\u015ft\u0131\u011f\u0131nda uygulaman\u0131z\u0131n Pod say\u0131s\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<p>A\u015fa\u011f\u0131da, bir \u00f6zel metrik kullanan HPA tan\u0131m\u0131n\u0131n basit bir \u00f6rne\u011fi yer almaktad\u0131r. Bu \u00f6rnek, <code>my-app<\/code> adl\u0131 uygulaman\u0131z\u0131n Pod'lar\u0131 i\u00e7in <code>http_requests_total<\/code> ad\u0131nda bir \u00f6zel metri\u011fin ortalama 1000'i ge\u00e7ti\u011finde \u00f6l\u00e7eklenme yapmas\u0131n\u0131 g\u00f6sterir:<\/p>\n<pre><code>\napiVersion: autoscaling\/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: hpa-with-custom-metric\nspec:\n  scaleTargetRef:\n    apiVersion: apps\/v1\n    kind: Deployment\n    name: my-app-deployment\n  minReplicas: 1\n  maxReplicas: 15\n  metrics:\n  - type: Pods # Pod ba\u015f\u0131na ortalama metrik\n    pods:\n      metric:\n        name: http_requests_total\n      target:\n        type: AverageValue\n        averageValue: \"1000\" # Her Pod i\u00e7in ortalama 1000 istek\n  - type: Resource # CPU metri\u011fini de ekleyebiliriz\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 70\n<\/pre>\n<p><\/code><\/p>\n<p>Bu konfig\u00fcrasyonda, HPA hem Pod'lar\u0131n CPU kullan\u0131m\u0131n\u0131 hem de <code_inline>http_requests_total<\/code_inline> \u00f6zel metri\u011fini izleyecektir. Herhangi bir metrik hedefi a\u015f\u0131ld\u0131\u011f\u0131nda \u00f6l\u00e7ekleme tetiklenecektir. Birden fazla metrik kullan\u0131ld\u0131\u011f\u0131nda, HPA her bir metrik i\u00e7in ayr\u0131 ayr\u0131 \u00f6l\u00e7ekleme hesaplamas\u0131 yapar ve en y\u00fcksek say\u0131da replika gerektiren metrik hedefine g\u00f6re \u00f6l\u00e7eklenme ger\u00e7ekle\u015ftirir. Bu, daha karma\u015f\u0131k i\u015f y\u00fckleri i\u00e7in \u00e7ok daha hassas ve duruma \u00f6zel \u00f6l\u00e7ekleme stratejileri geli\u015ftirmenize olanak tan\u0131r.<\/p>\n<h2>HPA ile \u0130leri D\u00fczey Optimizasyon ve Senaryolar: \u00d6l\u00e7ekleme Davran\u0131\u015f\u0131n\u0131 \u00d6zelle\u015ftirme<\/h2>\n<p>HPA'n\u0131n temel CPU ve bellek tabanl\u0131 \u00f6l\u00e7ekleme yetenekleri \u00e7o\u011fu senaryo i\u00e7in yeterli olsa da, baz\u0131 uygulamalar\u0131n veya i\u015f y\u00fcklerinin daha sofistike \u00f6l\u00e7ekleme davran\u0131\u015flar\u0131na ihtiyac\u0131 olabilir. \u00d6rne\u011fin, ani trafik art\u0131\u015flar\u0131na daha h\u0131zl\u0131 yan\u0131t vermek, ancak yava\u015f yava\u015f k\u00fc\u00e7\u00fclmek veya belirli zaman dilimlerinde farkl\u0131 \u00f6l\u00e7ekleme kurallar\u0131 uygulamak isteyebilirsiniz. Kubernetes <code_inline>autoscaling\/v2<\/code_inline> API'si, HPA'n\u0131n davran\u0131\u015f\u0131n\u0131 <code_inline>behavior<\/code_inline> alan\u0131 arac\u0131l\u0131\u011f\u0131yla daha ayr\u0131nt\u0131l\u0131 bir \u015fekilde \u00f6zelle\u015ftirmenize olanak tan\u0131r. Bu sayede, \u00f6l\u00e7ekleme politikalar\u0131n\u0131 (scaling policies) ve stabilizasyon pencerelerini (stabilization windows) kontrol ederek HPA'y\u0131 uygulaman\u0131z\u0131n benzersiz ihtiya\u00e7lar\u0131na g\u00f6re optimize edebilirsiniz.<\/p>\n<p><code_inline>behavior<\/code_inline> alan\u0131, HPA'n\u0131n <code_inline>scaleUp<\/code_inline> (\u00f6l\u00e7ekleme) ve <code_inline>scaleDown<\/code_inline> (k\u00fc\u00e7\u00fclme) eylemlerini ayr\u0131 ayr\u0131 yap\u0131land\u0131rman\u0131za imkan tan\u0131r. Bu, \u00f6rne\u011fin ani y\u00fck art\u0131\u015flar\u0131na \u00e7ok h\u0131zl\u0131 yan\u0131t verirken, y\u00fck azald\u0131\u011f\u0131nda Pod'lar\u0131 daha yava\u015f bir \u015fekilde sonland\u0131rarak \"churn\" (s\u00fcrekli Pod olu\u015fturma\/silme) veya ge\u00e7ici performans d\u00fc\u015f\u00fc\u015flerini engellemenizi sa\u011flar. Her iki eylem i\u00e7in de <code_inline>policies<\/code_inline> ve <code_inline>stabilizationWindowSeconds<\/code_inline> gibi parametreler belirleyebilirsiniz.<\/p>\n<p>\u00d6l\u00e7ekleme politikalar\u0131 (<code_inline>policies<\/code_inline>), HPA'n\u0131n tek bir \u00f6l\u00e7ekleme ad\u0131m\u0131nda ka\u00e7 Pod ekleyebilece\u011fini veya \u00e7\u0131karabilece\u011fini belirler. \u00dc\u00e7 farkl\u0131 <code_inline>type<\/code_inline> (t\u00fcr) bulunur:<\/p>\n<ul>\n<li><code_inline>Pods<\/code_inline>: Bir kerede eklenecek\/\u00e7\u0131kar\u0131lacak maksimum Pod say\u0131s\u0131.<\/li>\n<li><code_inline>Percent<\/code_inline>: Mevcut Pod say\u0131s\u0131n\u0131n y\u00fczdesi olarak eklenecek\/\u00e7\u0131kar\u0131lacak maksimum Pod say\u0131s\u0131.<\/li>\n<li><code_inline>Rockets<\/code_inline>: (Bu tip mevcut de\u011fil, \u00f6rnek olarak \"fast\" \u00f6l\u00e7ekleme davran\u0131\u015f\u0131n\u0131 temsil etmek i\u00e7in uydurulmu\u015ftur. Ger\u00e7ekte Kubernetes'te b\u00f6yle bir \"rocket\" tipi yoktur. Genellikle <code>Pods<\/code> ve <code>Percent<\/code> ile yeterli esneklik sa\u011flan\u0131r. Yanl\u0131\u015f anla\u015f\u0131lmay\u0131 \u00f6nlemek i\u00e7in bu maddeyi ger\u00e7ek tiplerle de\u011fi\u015ftirmeliyiz.)<\/li>\n<li><code_inline>Percent<\/code_inline>: Mevcut replika say\u0131s\u0131n\u0131n y\u00fczdesi olarak eklenecek\/\u00e7\u0131kar\u0131lacak maksimum Pod say\u0131s\u0131.<\/li>\n<\/ul>\n<p>Ayr\u0131ca, her politika i\u00e7in bir <code_inline>periodSeconds<\/code_inline> de\u011feri belirlersiniz, bu da politikan\u0131n ne kadar s\u00fcreyle ge\u00e7erli olaca\u011f\u0131n\u0131 g\u00f6sterir. \u00d6rne\u011fin, \"her 60 saniyede mevcut Pod say\u0131s\u0131n\u0131n %10'unu ge\u00e7meyecek \u015fekilde Pod ekle\" \u015feklinde bir kural belirleyebilirsiniz. Bu, ani ve b\u00fcy\u00fck \u00f6l\u00e7ekli \u00f6l\u00e7eklendirme i\u015flemlerinin sisteminizi a\u015f\u0131r\u0131 y\u00fcklemesini engellemek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p><code_inline>stabilizationWindowSeconds<\/code_inline> ise, HPA'n\u0131n bir \u00f6l\u00e7ekleme karar\u0131 vermeden \u00f6nce metriklerin belirli bir s\u00fcre boyunca stabil kalmas\u0131n\u0131 bekledi\u011fi s\u00fcredir. Varsay\u0131lan olarak \u00f6l\u00e7eklenme i\u00e7in bu s\u00fcre 0, k\u00fc\u00e7\u00fclme i\u00e7in ise 300 saniyedir (5 dakika). E\u011fer bir Pod'un CPU'su s\u00fcrekli dalgalan\u0131yorsa, daha uzun bir stabilizasyon penceresi, HPA'n\u0131n s\u00fcrekli Pod ekleyip \u00e7\u0131karmas\u0131n\u0131 \u00f6nleyerek gereksiz kaynak tahsisini ve churn'\u00fc azalt\u0131r. Ancak, \u00e7ok uzun bir s\u00fcre belirlemek, uygulaman\u0131z\u0131n ani y\u00fck de\u011fi\u015fikliklerine yava\u015f yan\u0131t vermesine neden olabilir. Bu de\u011feri, uygulaman\u0131z\u0131n ba\u015flang\u0131\u00e7 s\u00fcresi, trafik kal\u0131plar\u0131 ve kararl\u0131l\u0131k gereksinimleri gibi fakt\u00f6rlere g\u00f6re dikkatlice ayarlamak \u00f6nemlidir.<\/p>\n<p>\u0130\u015fte <code_inline>behavior<\/code_inline> alan\u0131n\u0131 kullanarak \u00f6l\u00e7ekleme davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftiren bir HPA \u00f6rne\u011fi:<\/p>\n<pre><code>\napiVersion: autoscaling\/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: optimized-hpa-app\nspec:\n  scaleTargetRef:\n    apiVersion: apps\/v1\n    kind: Deployment\n    name: my-app-deployment\n  minReplicas: 2\n  maxReplicas: 20\n  metrics:\n  - type: Resource\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 60\n  behavior:\n    scaleUp:\n      # \u00c7ok h\u0131zl\u0131 \u00f6l\u00e7eklen, ilk 60 saniyede 4 Pod veya %15 art\u0131r\n      policies:\n      - type: Pods\n        value: 4\n        periodSeconds: 60\n      - type: Percent\n        value: 15\n        periodSeconds: 60\n      # En agresif politika uygulan\u0131r\n      selectPolicy: Max\n      # \u00d6l\u00e7eklenme karar\u0131 vermeden \u00f6nce 10 saniye bekle\n      stabilizationWindowSeconds: 10\n    scaleDown:\n      # Daha yava\u015f k\u00fc\u00e7\u00fcl, her 300 saniyede 2 Pod veya %5 azalt\n      policies:\n      - type: Pods\n        value: 2\n        periodSeconds: 300\n      - type: Percent\n        value: 5\n        periodSeconds: 300\n      # En az agresif politika uygulan\u0131r\n      selectPolicy: Min\n      # K\u00fc\u00e7\u00fclme karar\u0131 vermeden \u00f6nce 300 saniye bekle\n      stabilizationWindowSeconds: 300\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, uygulamam\u0131z CPU kullan\u0131m\u0131 %60'\u0131 a\u015ft\u0131\u011f\u0131nda h\u0131zl\u0131ca \u00f6l\u00e7eklenecek (her 60 saniyede en fazla 4 Pod veya mevcut Pod say\u0131s\u0131n\u0131n %15'i kadar, hangisi daha y\u00fcksekse) ve sadece 10 saniyelik bir stabilizasyon penceresi ile h\u0131zl\u0131 tepki verecektir. Ancak, CPU kullan\u0131m\u0131 d\u00fc\u015ft\u00fc\u011f\u00fcnde, daha yava\u015f bir \u015fekilde k\u00fc\u00e7\u00fclecek (her 300 saniyede en fazla 2 Pod veya mevcut Pod say\u0131s\u0131n\u0131n %5'i kadar, hangisi daha d\u00fc\u015f\u00fckse) ve 300 saniyelik daha uzun bir stabilizasyon penceresi kullanarak istikrar\u0131 koruyacakt\u0131r. Bu t\u00fcr ince ayarlar, HPA'n\u0131n uygulaman\u0131z\u0131n gereksinimlerine m\u00fckemmel \u015fekilde uyum sa\u011flamas\u0131na olanak tan\u0131r ve b\u00f6ylece hem performans\u0131 hem de maliyet verimlili\u011fini en \u00fcst d\u00fczeye \u00e7\u0131kar\u0131r.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Vaka Analizi: Yo\u011fun Trafikli Bir E-ticaret Uygulamas\u0131nda HPA<\/h2>\n<p>Teorik bilgiler \u00f6nemlidir, ancak HPA'n\u0131n ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l bir fark yaratt\u0131\u011f\u0131n\u0131 g\u00f6rmek, konuyu daha iyi anlamam\u0131z\u0131 sa\u011flar. Bir e-ticaret uygulamas\u0131n\u0131n yo\u011fun trafik d\u00f6nemlerinde (\u00f6rne\u011fin, Black Friday veya y\u0131lba\u015f\u0131 indirimleri) ya\u015fad\u0131\u011f\u0131 zorluklar\u0131 ve HPA ile bu zorluklar\u0131n nas\u0131l a\u015f\u0131ld\u0131\u011f\u0131n\u0131 ele alal\u0131m.<\/p>\n<h3>Problemin Tan\u0131m\u0131: Beklenmedik Y\u00fck Art\u0131\u015f\u0131 ve Performans Sorunlar\u0131<\/h3>\n<p>Farz edelim ki, \"TrendSepet\" ad\u0131nda pop\u00fcler bir e-ticaret platformumuz var. Bu platform, genellikle normal seviyede bir trafikle \u00e7al\u0131\u015f\u0131yor ve varsay\u0131lan olarak 5 adet Pod ile hizmet veriyor. Ancak, y\u0131l\u0131n belirli d\u00f6nemlerinde (\u00f6rne\u011fin, Black Friday kampanyas\u0131) trafik %500'lere varan oranlarda artabiliyor. HPA \u00f6ncesinde, operasyon ekibi bu yo\u011funluklar\u0131 tahmin etmeye \u00e7al\u0131\u015f\u0131yor ve manuel olarak Pod say\u0131s\u0131n\u0131 art\u0131r\u0131yordu. Ancak bu yakla\u015f\u0131m bir dizi soruna yol a\u00e7\u0131yordu:<\/p>\n<ul>\n<li><strong>Gecikmeli Tepki:<\/strong> Trafik aniden y\u00fckseldi\u011finde, manuel m\u00fcdahale zaman al\u0131yordu. Bu s\u00fcre zarf\u0131nda kullan\u0131c\u0131lar yava\u015f y\u00fckleme s\u00fcreleri, sepet hatalar\u0131 ve \u00f6deme ba\u015far\u0131s\u0131zl\u0131klar\u0131 gibi sorunlar ya\u015f\u0131yor, bu da m\u00fc\u015fteri memnuniyetsizli\u011fine ve gelir kayb\u0131na neden oluyordu.<\/li>\n<li><strong>A\u015f\u0131r\u0131 veya Yetersiz Kaynak Tahsisi:<\/strong> Operasyon ekibi, olas\u0131 en k\u00f6t\u00fc senaryoyu d\u00fc\u015f\u00fcnerek gere\u011finden fazla Pod \u00e7al\u0131\u015ft\u0131rabiliyor, bu da maliyetlerin gereksiz yere artmas\u0131na neden oluyordu. Ya da tam tersine, tahmini tutturamayarak yeterli Pod sa\u011flayam\u0131yor ve performans sorunlar\u0131 ya\u015f\u0131yordu.<\/li>\n<li><strong>Operasyonel Y\u00fck:<\/strong> Yo\u011fun d\u00f6nemlerde ekibin s\u00fcrekli olarak sistem kaynaklar\u0131n\u0131 izlemesi ve manuel \u00f6l\u00e7ekleme kararlar\u0131 almas\u0131 gerekiyordu, bu da b\u00fcy\u00fck bir operasyonel y\u00fcke neden oluyordu.<\/li>\n<\/ul>\n<h3>Uygulanan HPA Stratejileri ve \u00c7\u00f6z\u00fcm<\/h3>\n<p>TrendSepet ekibi, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in Kubernetes HPA'y\u0131 devreye sokmaya karar verdi. Uygulaman\u0131n mikro hizmet tabanl\u0131 yap\u0131s\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, her bir servisin (\u00fcr\u00fcn katalo\u011fu, sepet, \u00f6deme vb.) kendi HPA konfig\u00fcrasyonuna sahip olmas\u0131 hedeflendi. \u00d6zellikle \u00f6deme servisi gibi kritik ve y\u00fck\u00fc yo\u011fun olan bile\u015fenlere odaklan\u0131ld\u0131. Uygulanan HPA stratejileri \u015funlar\u0131 i\u00e7eriyordu:<\/p>\n<ol>\n<li><strong>CPU ve Bellek Tabanl\u0131 Otomatik \u00d6l\u00e7ekleme (Temel HPA):<\/strong>\n<ul>\n<li>T\u00fcm Deployment'lar i\u00e7in temel HPA tan\u0131mland\u0131.<\/li>\n<li>Hedef CPU kullan\u0131m\u0131 %60, hedef bellek kullan\u0131m\u0131 %70 olarak belirlendi.<\/li>\n<li><code_inline>minReplicas<\/code_inline> de\u011feri normal zamanlardaki minimum stabiliteyi sa\u011flamak i\u00e7in 5, <code_inline>maxReplicas<\/code_inline> de\u011feri ise en yo\u011fun trafik beklentilerini kar\u015f\u0131layacak \u015fekilde 50 olarak ayarland\u0131.<\/li>\n<\/ul>\n<pre><code>\napiVersion: autoscaling\/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: product-catalog-hpa\nspec:\n  scaleTargetRef:\n    apiVersion: apps\/v1\n    kind: Deployment\n    name: product-catalog-deployment\n  minReplicas: 5\n  maxReplicas: 50\n  metrics:\n  - type: Resource\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 60\n  - type: Resource\n    resource:\n      name: memory\n      target:\n        type: Utilization\n        averageUtilization: 70\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>\u00d6zel Metrik Tabanl\u0131 \u00d6l\u00e7ekleme (Kuyruk Uzunlu\u011fu):<\/strong>\n<p>\u00d6deme servisi, i\u015flemleri i\u015flemek i\u00e7in bir mesaj kuyru\u011fu (\u00f6rne\u011fin, Kafka) kullan\u0131yordu. Kuyruktaki bekleyen mesaj say\u0131s\u0131 artt\u0131\u011f\u0131nda Pod'lar\u0131n an\u0131nda \u00f6l\u00e7eklenmesi gerekiyordu. Bu nedenle, Kafka Consumer Group'unun gecikme (lag) metri\u011fi Prometheus arac\u0131l\u0131\u011f\u0131yla topland\u0131 ve <code_inline>Prometheus Adapter<\/code_inline> kullan\u0131larak Kubernetes \u00f6zel metrik API'sine sunuldu. HPA, bu \u00f6zel metri\u011fi hedefleyerek kuyruk uzunlu\u011fu belirli bir e\u015fi\u011fi (\u00f6rne\u011fin, Pod ba\u015f\u0131na ortalama 100 mesaj) a\u015ft\u0131\u011f\u0131nda \u00f6l\u00e7eklenme yapacakt\u0131.<\/p>\n<pre><code>\napiVersion: autoscaling\/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: payment-service-hpa\nspec:\n  scaleTargetRef:\n    apiVersion: apps\/v1\n    kind: Deployment\n    name: payment-service-deployment\n  minReplicas: 5\n  maxReplicas: 100 # \u00d6deme servisi daha kritik oldu\u011fundan daha y\u00fcksek bir limit\n  metrics:\n  - type: Resource\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 60\n  - type: Pods\n    pods:\n      metric:\n        name: kafka_consumer_group_lag_per_pod # Prometheus'tan gelen \u00f6zel metrik\n      target:\n        type: AverageValue\n        averageValue: \"100\" # Her Pod ba\u015f\u0131na ortalama 100 mesaj lag oldu\u011funda \u00f6l\u00e7ekle\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>\u00d6zelle\u015ftirilmi\u015f \u00d6l\u00e7ekleme Davran\u0131\u015f\u0131 (<code_inline>behavior<\/code_inline>):<\/strong>\n<p>Yo\u011fun d\u00f6nemlerde h\u0131zl\u0131 \u00f6l\u00e7eklenmeyi sa\u011flamak i\u00e7in <code_inline>scaleUp<\/code_inline> politikalar\u0131 daha agresif, <code_inline>stabilizationWindowSeconds<\/code_inline> ise daha k\u0131sa tutuldu. K\u00fc\u00e7\u00fclme (<code_inline>scaleDown<\/code_inline>) politikalar\u0131 ise daha az agresif ve daha uzun stabilizasyon pencereleri ile yap\u0131land\u0131r\u0131ld\u0131, b\u00f6ylece ani d\u00fc\u015f\u00fc\u015flerde Pod'lar\u0131n gereksiz yere h\u0131zl\u0131ca kapan\u0131p tekrar a\u00e7\u0131lmas\u0131 engellendi.<\/p>\n<pre><code>\nbehavior:\n  scaleUp:\n    policies:\n    - type: Pods\n      value: 10 # Bir kerede 10 Pod ekle\n      periodSeconds: 60\n    - type: Percent\n      value: 20 # Mevcut Pod'lar\u0131n %20'si kadar ekle\n      periodSeconds: 60\n    selectPolicy: Max\n    stabilizationWindowSeconds: 30\n  scaleDown:\n    policies:\n    - type: Percent\n      value: 10 # Mevcut Pod'lar\u0131n %10'u kadar azalt\n      periodSeconds: 300\n    selectPolicy: Min\n    stabilizationWindowSeconds: 600 # Daha uzun bir stabilizasyon penceresi\n        <\/pre>\n<p><\/code>\n    <\/li>\n<\/ol>\n<h3>Elde Edilen Faydalar<\/h3>\n<p>HPA'n\u0131n uygulanmas\u0131yla TrendSepet \u00f6nemli faydalar sa\u011flad\u0131:<\/p>\n<ul>\n<li><strong>Geli\u015fmi\u015f Performans ve Kullan\u0131c\u0131 Deneyimi:<\/strong> Uygulama, trafik art\u0131\u015flar\u0131na an\u0131nda tepki vererek yava\u015flamalar\u0131 ve hatalar\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azaltt\u0131. Kullan\u0131c\u0131lar, yo\u011fun zamanlarda bile ak\u0131c\u0131 bir al\u0131\u015fveri\u015f deneyimi ya\u015fad\u0131.<\/li>\n<li><strong>Maliyet Optimizasyonu:<\/strong> Uygulama, sadece ihtiya\u00e7 duyuldu\u011fu kadar kaynak kullanarak gereksiz bulut maliyetlerinden tasarruf etti. Yo\u011funlu\u011fun azald\u0131\u011f\u0131 zamanlarda Pod'lar otomatik olarak k\u00fc\u00e7\u00fclt\u00fcld\u00fc.<\/li>\n<li><strong>Azalan Operasyonel Y\u00fck:<\/strong> Operasyon ekibi, manuel \u00f6l\u00e7ekleme g\u00f6revlerinden kurtuldu ve daha stratejik g\u00f6revlere odaklanabildi. Sistem art\u0131k kendi kendini y\u00f6netebilir hale geldi.<\/li>\n<li><strong>Y\u00fcksek Eri\u015filebilirlik:<\/strong> Otomatik \u00f6l\u00e7ekleme, ani ar\u0131zalara veya tek Pod sorunlar\u0131na kar\u015f\u0131 daha diren\u00e7li bir mimari sa\u011flad\u0131, b\u00f6ylece uygulaman\u0131n s\u00fcrekli eri\u015filebilirli\u011fi art\u0131r\u0131ld\u0131.<\/li>\n<\/ul>\n<p>Bu vaka analizi, HPA'n\u0131n sadece temel metriklerle de\u011fil, ayn\u0131 zamanda i\u015f odakl\u0131 \u00f6zel metriklerle de entegre edilerek nas\u0131l g\u00fc\u00e7l\u00fc ve esnek bir otomatik \u00f6l\u00e7ekleme \u00e7\u00f6z\u00fcm\u00fc sunabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda, HPA, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve maliyet etkinli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h2>Sonu\u00e7: Gelece\u011fe Y\u00f6nelik \u00d6l\u00e7ekleme Stratejileri ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makale boyunca, Kubernetes ortam\u0131nda uygulamalar\u0131m\u0131z\u0131 dinamik olarak \u00f6l\u00e7eklemenin anahtar\u0131 olan Horizontal Pod Autoscaler (HPA) kavram\u0131n\u0131 derinlemesine inceledik. HPA'n\u0131n temellerinden ba\u015flayarak, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, basit CPU ve bellek metrikleriyle nas\u0131l yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 ve \u00f6zel\/harici metriklerle nas\u0131l s\u0131n\u0131rlar\u0131n \u00f6tesine ge\u00e7ebilece\u011fini ad\u0131m ad\u0131m \u00f6\u011frendik. Ayr\u0131ca, \u00f6l\u00e7ekleme davran\u0131\u015f\u0131n\u0131 <code_inline>behavior<\/code_inline> alan\u0131 arac\u0131l\u0131\u011f\u0131yla nas\u0131l \u00f6zelle\u015ftirebilece\u011finizi ve ger\u00e7ek bir e-ticaret uygulamas\u0131 senaryosunda HPA'n\u0131n nas\u0131l bir de\u011fer yaratt\u0131\u011f\u0131n\u0131 vaka analiziyle g\u00f6zlemledik.<\/p>\n<p>HPA, modern bulut tabanl\u0131 uygulamalar\u0131n esneklik, performans ve maliyet verimlili\u011fi hedeflerine ula\u015fmas\u0131nda kritik bir rol oynar. Uygulama trafi\u011fi veya i\u015f y\u00fckleri dalgaland\u0131\u011f\u0131nda, manuel m\u00fcdahaleye gerek kalmadan Pod say\u0131s\u0131n\u0131 otomatik olarak ayarlayarak s\u00fcrekli y\u00fcksek performans\u0131 garanti eder. Ayn\u0131 zamanda, bo\u015fta kalan kaynaklar\u0131 azaltarak bulut harcamalar\u0131n\u0131 optimize eder. Bu, ekiplerin operasyonel y\u00fck\u00fcn\u00fc hafifletirken, kullan\u0131c\u0131lar\u0131n daha iyi bir deneyim ya\u015famas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Gelece\u011fe y\u00f6nelik \u00f6l\u00e7ekleme stratejilerinizde HPA'y\u0131 yaln\u0131zca tek bir ara\u00e7 olarak de\u011fil, Kubernetes'in di\u011fer otomatik \u00f6l\u00e7ekleme mekanizmalar\u0131 olan Vertical Pod Autoscaler (VPA) ve Cluster Autoscaler ile entegre bir \u00e7\u00f6z\u00fcm\u00fcn par\u00e7as\u0131 olarak d\u00fc\u015f\u00fcnmek \u00f6nemlidir. HPA Pod say\u0131s\u0131n\u0131 yatay olarak art\u0131r\u0131rken, VPA her bir Pod'un kaynak taleplerini optimize edebilir ve Cluster Autoscaler ise k\u00fcmenin d\u00fc\u011f\u00fcm kapasitesini y\u00f6netebilir. Bu \u00fc\u00e7l\u00fcn\u00fcn uyumlu \u00e7al\u0131\u015fmas\u0131, u\u00e7tan uca tamamen otomatik ve optimize edilmi\u015f bir altyap\u0131 sunar. Unutmay\u0131n ki, HPA'n\u0131n etkinli\u011fi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde do\u011fru metrik se\u00e7imine, makul e\u015fik de\u011ferlerine ve uygulaman\u0131z\u0131n performans karakteristiklerine uygun \u00f6zelle\u015ftirilmi\u015f \u00f6l\u00e7ekleme politikalar\u0131na ba\u011fl\u0131d\u0131r. Uygulamalar\u0131n\u0131z\u0131n s\u00fcrekli b\u00fcy\u00fcme ve de\u011fi\u015fen taleplere sorunsuz bir \u015fekilde adapte olmas\u0131n\u0131 sa\u011flamak i\u00e7in HPA'y\u0131 stratejilerinizin merkezine koyman\u0131z, \u015f\u00fcphesiz ba\u015far\u0131n\u0131za b\u00fcy\u00fck katk\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. HPA ve VPA aras\u0131ndaki temel fark nedir?<\/strong><\/p>\n<p>HPA (Horizontal Pod Autoscaler), uygulaman\u0131z\u0131n Pod replikalar\u0131n\u0131n say\u0131s\u0131n\u0131 art\u0131rarak veya azaltarak yatay \u00f6l\u00e7ekleme yapar. Metrik olarak CPU, bellek veya \u00f6zel metrikleri kullan\u0131r. VPA (Vertical Pod Autoscaler) ise, mevcut Pod'lar\u0131n CPU ve bellek gibi kaynak taleplerini ve limitlerini dikey olarak ayarlar. HPA Pod say\u0131s\u0131n\u0131, VPA ise her bir Pod'un boyutunu y\u00f6netir.<\/p>\n<p><strong>2. HPA neden \u00e7al\u0131\u015fm\u0131yor? Neleri kontrol etmeliyim?<\/strong><\/p>\n<p>HPA'n\u0131n \u00e7al\u0131\u015fmamas\u0131n\u0131n birka\u00e7 nedeni olabilir:<\/p>\n<ul>\n<li><code_inline>Metrics Server<\/code_inline> kurulu de\u011fil veya d\u00fczg\u00fcn \u00e7al\u0131\u015fm\u0131yor. (<code_inline>kubectl top pods<\/code_inline> veya <code_inline>kubectl get --raw \"\/apis\/metrics.k8s.io\/v1beta1\/pods\"<\/code_inline> komutlar\u0131yla kontrol edin)<\/li>\n<li>Deployment\/Pod'lar\u0131n\u0131zda CPU\/Bellek <code_inline>requests<\/code_inline> tan\u0131ml\u0131 de\u011fil. HPA, y\u00fczdesel kullan\u0131m hesaplamalar\u0131n\u0131 bu <code_inline>requests<\/code_inline> de\u011ferlerine g\u00f6re yapar.<\/li>\n<li>HPA'n\u0131n <code_inline>minReplicas<\/code_inline> ve <code_inline>maxReplicas<\/code_inline> de\u011ferleri, mevcut replika say\u0131s\u0131yla \u00e7ak\u0131\u015f\u0131yor veya hedef metrik hi\u00e7 a\u015f\u0131lam\u0131yor\/azalm\u0131yor.<\/li>\n<li>Stabilizasyon penceresi (<code>stabilizationWindowSeconds<\/code>) \u00e7ok uzun ayarlanm\u0131\u015f olabilir.<\/li>\n<li>\u00d6zel metrik kullan\u0131yorsan\u0131z, metrik sa\u011flay\u0131c\u0131n\u0131z (\u00f6rn. Prometheus) ve adapt\u00f6r\u00fcn\u00fcz d\u00fczg\u00fcn \u00e7al\u0131\u015fm\u0131yor olabilir.<\/li>\n<\/ul>\n<p><strong>3. Birden fazla metrikle HPA kullanabilir miyim? E\u011fer kullan\u0131rsam, \u00f6l\u00e7ekleme karar\u0131 nas\u0131l al\u0131n\u0131r?<\/strong><\/p>\n<p>Evet, <code_inline>autoscaling\/v2<\/code_inline> API versiyonu ile birden fazla metrik kullanabilirsiniz (CPU, bellek, \u00f6zel metrikler vb.). HPA, her bir metrik i\u00e7in ayr\u0131 ayr\u0131 gereken replika say\u0131s\u0131n\u0131 hesaplar ve bu hesaplamalar sonucunda en y\u00fcksek replika say\u0131s\u0131n\u0131 gerektiren metrik hedefi \u00fczerinden \u00f6l\u00e7eklenme karar\u0131 al\u0131r. Yani, en \u00e7ok kayna\u011fa ihtiya\u00e7 duyan metrik HPA'n\u0131n \u00f6l\u00e7ekleme karar\u0131na y\u00f6n verir.<\/p>\n<p><strong>4. HPA'n\u0131n stabilizasyon pencereleri (cooldown\/warmup periods) ne anlama geliyor?<\/strong><\/p>\n<p>Stabilizasyon pencereleri, HPA'n\u0131n gereksiz yere s\u0131k s\u0131k \u00f6l\u00e7eklenmesini veya k\u00fc\u00e7\u00fclmesini engellemek i\u00e7in kullan\u0131lan zaman aral\u0131klar\u0131d\u0131r. \u00d6l\u00e7eklenme (scale up) ve k\u00fc\u00e7\u00fclme (scale down) i\u00e7in ayr\u0131 ayr\u0131 tan\u0131mlanabilir. \u00d6rne\u011fin, bir Pod say\u0131s\u0131 art\u0131r\u0131ld\u0131ktan sonra HPA, yeni Pod'lar\u0131n kullan\u0131ma haz\u0131r olmas\u0131 ve metriklerin stabil hale gelmesi i\u00e7in belirli bir s\u00fcre bekler. Bu, sistemde \"churn\" (s\u00fcrekli Pod olu\u015fturma\/silme) olu\u015fumunu azalt\u0131r ve daha tutarl\u0131 bir performansa katk\u0131da bulunur.<\/p>\n<p><strong>5. HPA'y\u0131 \u00f6zel zaman aral\u0131klar\u0131nda veya g\u00fcn\u00fcn belirli saatlerinde farkl\u0131 kurallarla \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131rabilir miyim?<\/strong><\/p>\n<p>HPA'n\u0131n kendisi do\u011frudan zaman bazl\u0131 kurallar sunmaz. Ancak, bu t\u00fcr bir ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in farkl\u0131 stratejiler izlenebilir:<\/p>\n<ul>\n<li><strong>CronJob ile HPA Yaml'\u0131 De\u011fi\u015ftirme:<\/strong> G\u00fcn\u00fcn belirli saatlerinde HPA'n\u0131n <code_inline>minReplicas<\/code_inline>, <code_inline>maxReplicas<\/code_inline> veya hedef metrik de\u011ferlerini de\u011fi\u015ftiren bir Kubernetes CronJob tan\u0131mlayabilirsiniz.<\/li>\n<li><strong>D\u0131\u015f Otomasyon Ara\u00e7lar\u0131:<\/strong> Argo Workflows veya Jenkins gibi d\u0131\u015f otomasyon ara\u00e7lar\u0131n\u0131 kullanarak belirli zamanlarda HPA objelerini g\u00fcncelleyebilirsiniz.<\/li>\n<li><strong>Keda (Kubernetes Event-driven Autoscaling):<\/strong> HPA'n\u0131n daha geli\u015fmi\u015f bir versiyonu olarak g\u00f6r\u00fclebilen Keda, Kafka, RabbitMQ, Redis, Cron gibi \u00e7e\u015fitli event kaynaklar\u0131na g\u00f6re \u00f6l\u00e7eklenme yapabilir. Cron tabanl\u0131 \u00f6l\u00e7ekleme Keda ile do\u011frudan desteklenir ve bu ihtiyac\u0131n\u0131z\u0131 \u00e7ok daha zarif bir \u015fekilde \u00e7\u00f6zebilir.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"Kubernetes&#8217;te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1491],"tags":[],"class_list":{"0":"post-34226","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-kubernetes","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes&#039;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme<\/title>\n<meta name=\"description\" content=\"Kubernetes&#039;te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes&#039;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme\" \/>\n<meta property=\"og:description\" content=\"Kubernetes&#039;te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-13T04:01:10+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kubernetes&#8217;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme\",\"datePublished\":\"2025-11-13T04:01:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\"},\"wordCount\":2669,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Kubernetes\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\",\"name\":\"Kubernetes'te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-13T04:01:10+00:00\",\"description\":\"Kubernetes'te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes&#8217;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes'te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme","description":"Kubernetes'te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubernetes'te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme","og_description":"Kubernetes'te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.","og_url":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-13T04:01:10+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kubernetes&#8217;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme","datePublished":"2025-11-13T04:01:10+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/"},"wordCount":2669,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Kubernetes"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/","url":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/","name":"Kubernetes'te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-13T04:01:10+00:00","description":"Kubernetes'te uygulamalar\u0131n\u0131z\u0131n trafi\u011fe g\u00f6re otomatik \u00f6l\u00e7eklenmesini mi istiyorsunuz? Horizontal Pod Autoscaler (HPA) ile CPU, bellek ve \u00f6zel metrik bazl\u0131 dinamik \u00f6l\u00e7eklemeyi \u00f6\u011frenin ve maliyetten tasarruf edin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kuberneteste-horizontal-pod-autoscaler-hpa-ile-dinamik-olcekleme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes&#8217;te Horizontal Pod Autoscaler (HPA) ile Dinamik \u00d6l\u00e7ekleme"}]},{"@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\/34226","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=34226"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34226\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}