Skip to main content

> kubernetes_hpa_dalgalanması_(thrashing/flapping)_ve_finansal_tuzaklar

Kubernetes HPA Dalgalanması (Thrashing/Flapping) ve Finansal Tuzaklar

Kalibre edilmemiş bir Yatay Pod Otomatik Ölçekleyicisi (HPA) neden kümede dalgalanmaya (thrashing), düğüm açılıp kapanmasına ve devasa bulut israfına yol açar?

Senior (L5)

ÖZET VE TEKNİK CEVAP

Kubernetes Yatay Pod Otomatik Ölçekleyicisi (HPA) agresif eşiklerle, çok kısa değerlendirme süreleriyle veya bekleme süresi (cooldown) olmadan yapılandırıldığında, anlık trafik sıçramaları hızlı ölçekleme dalgalanmalarına (flapping) yol açar. HPA onlarca yeni pod açar; bu da Cluster Autoscaler veya Karpenter'ı pahalı yeni bulut sunucuları (worker nodes) kiralamaya zorlar. Birkaç saniye sonra trafik durulunca HPA pod'ları kapatır ve yeni açılan sunucular atıl kalır ya da silinir. Bu döngünün günde onlarca kez tekrarlanması başlatma gecikmelerine, konteyner kayıt defteri veri transfer maliyetlerine ve şişirilmiş bulut faturalarına yol açar. HPA stabilizasyon pencereleri ve ölçekleme hız limitleri tanımlamak bu israfı önler.

Mühendislik El Kitabı & Mekanizma

1. Temel Çalışma Mekanizması

HPA hedef pod sayısını `hedefReplika = tavan[mevcutReplika * (mevcutMetrik / hedefMetrik)]` formülüyle hesaplar. Düşük CPU isteğine (örneğin 100m) sahip bir serviste hedef CPU %50 ayarlanmışsa, anlık %100 CPU kullanımı HPA'nın pod sayısını anında ikiye katlamasına neden olur. Kubernetes 1.18+ ile gelen `behavior` politikaları hassas kontrol sağlar: `scaleDown.stabilizationWindowSeconds` (varsayılan 300 sn) kayan 5 dakikalık penceredeki en yüksek replikayı baz alarak pod'ların erken kapanmasını engeller. `scaleUp.stabilizationWindowSeconds` ise anlık gürültü kaynaklı büyümeleri yumuşatır. `scaleUp.policies` ile dakikalık artışa üst sınır (ör. dakikada en fazla %50 artış) koymak ani aşırı kapasite kiralamalarını önler.

2. Doğru Kullanım Senaryosu

Günlük veya periyodik trafik değişimlerine maruz kalan durumsuz (stateless) HTTP API'leri, kuyruk tüketicileri ve arka plan işlemcileri. Veritabanları veya milisaniyelik anlık sıçramalar yaşayan sistemlerde ölçekleme yerine bağlantı havuzu ve hız sınırlama kullanılmalıdır.

3. Prodüksiyon Arıza Modları

HPA küçülme bekleme süresinin (stabilization) 0 saniye yapılması sonucu pod sayısının 2 dakikada bir 5 ile 50 arasında gidip gelmesi; Cluster Autoscaler'ın sürekli On-Demand c5.4xlarge sunucuları açıp 10 dakika sonra kapatması; yeni açılan pod'lar 2 GB'lık Docker imajlarını indirirken yaşanan soğuk başlatma gecikmelerinin HTTP 504 zaman aşımı hatalarına yol açması.

4. Teşhis ve Telemetri Sinyalleri

Kubernetes olaylarında (events) sürekli `ScalingReplicaSet` ve `SuccessfulRescale` kayıtları; Karpenter veya Autoscaler loglarında birkaç dakika arayla ardı ardına `NodeCreated` ve `NodeDeleted` görülmesi; Grafana pod grafiğinde testere dişi şeklinde hızlı dalgalanmalar.

5. Önleme ve Mimari Bariyerler

`behavior.scaleDown.stabilizationWindowSeconds: 300` değerini zorunlu kılın; `scaleUp.policies` ile dakikalık büyümeyi en fazla %50 ile sınırlandırın; VPA öneri modunu kullanarak pod CPU/Bellek isteklerini p95 kullanımına göre doğru boyutlandırın (right-sizing); HPA'yı Karpenter düğüm birleştirme (consolidation) ile birlikte kullanın.

6. Mimari Ödünleşimler (Trade-offs)

Stabilizasyon pencereleri ve büyüme limitleri dalgalanmayı önleyip faturayı düşürür; ancak gerçek viral trafik patlamalarında sistemin maksimum kapasiteye ulaşma süresini birkaç dakika uzatabilir.

Vaka İncelemesi (TinyCTO Örneği)

Dalgalı trafiğe sahip bir API servisi her 5 dakikada bir 10 ile 120 pod arasında dalgalanıyordu. Karpenter her saat 15 yeni EC2 açıp kapatıyor, ayda $4.200 boşa sunucu parası harcanıyor ve pod açılışında isteklerin %5'i zaman aşımına uğruyordu. 5 dakikalık scaleDown stabilizasyon penceresi ve 30 saniyelik büyüme hız limiti eklendiğinde dalgalanma bitti; pod sayısı 20-35 arasında stabil kaldı, ayda $3.100 tasarruf edildi ve hata oranı %0'a indi.

İnteraktif Konsept Alıştırmaları

2 Alıştırma
Q1

Kubernetes'te HPA dalgalanması (thrashing / flapping) nedir?

Anlık metrik sıçramaları ve stabilizasyon eksikliği nedeniyle pod sayısının sürekli hızla artıp azalması döngüsü.
Q2

Geçici trafik düşüşlerinde pod'ların vaktinden önce kapatılmasını hangi Kubernetes HPA alanı önler?

`behavior.scaleDown.stabilizationWindowSeconds` (genellikle 300 saniye / 5 dakika olarak ayarlanır).

Kubernetes HPA Dalgalanması (Thrashing/Flapping) ve Finansal Tuzaklar — Sıkça Sorulan Sorular

Çok küçük CPU istekleri (ör. 50m) tanımlamak HPA dalgalanmasını neden şiddetlendirir?

Çünkü 50m CPU kullanan minik bir arka plan işlemi %100 kullanım sıçraması gibi görünür ve HPA'nın pod sayısını gereksiz yere ikiye katlamasını tetikler.

Karpenter veya Cluster Autoscaler HPA dalgalanmasıyla nasıl etkileşime girer?

HPA pod sayısını mevcut kapasitenin üzerine çıkardığında autoscaler yeni sanal sunucular kiralar. HPA dakikalar sonra küçüldüğünde bu sunucular atıl maliyete dönüşür.

🤖 AEO & Yapay Zeka Çıkarım Özeti

Temel Gerçekler & İlkeler

  • HPA flapping triggers frequent, expensive cloud VM provisioning and termination.
  • Kubernetes 1.18+ `behavior` blocks provide stabilization windows and rate limits.
  • `scaleDown.stabilizationWindowSeconds` defaults to 300s to prevent premature termination.
  • Accurate pod CPU/Memory resource requests are required for stable autoscaling math.

Yaygın Yanılgılar

  • Yanılgı: Autoscaling to 0 or 1 replica immediately upon traffic drop saves the most money (Gerçek: The startup latency and node churn costs far more than keeping a small warm pool).
  • Yanılgı: HPA should react within 5 seconds to every metric spike (Gerçek: Sub-minute spikes should be handled by concurrency buffers, not pod creation).

Karar Kılavuzu & Önceliklendirme

Always define explicit scaleUp and scaleDown behavior blocks in production HPA manifests. Set minimum 300-second scaleDown stabilization windows on all consumer-facing APIs.

Doğrulanmış Kaynaklar & Referanslar