
Kubernetes HPA ile Otomatik Ölçekleme: Yük Altında Pod Sayısını Artırma
Trafik artışlarında manuel olarak replica sayısını artırmak hem yavaş hem de hata yapmaya açıktır. Kubernetes Horizontal Pod Autoscaler (HPA), CPU kullanımı, bellek tüketimi veya özel metriklere göre Pod sayısını otomatik olarak artırıp azaltır. Bu rehberde HPA'yı sıfırdan yapılandırmayı, Metrics Se
Elif Demir
Cloud Solutions Architect
Trafik artışlarında manuel olarak replica sayısını artırmak hem yavaş hem de hata yapmaya açıktır. Kubernetes Horizontal Pod Autoscaler (HPA), CPU kullanımı, bellek tüketimi veya özel metriklere göre Pod sayısını otomatik olarak artırıp azaltır. Bu rehberde HPA'yı sıfırdan yapılandırmayı, Metrics Server kurulumunu ve üretim ortamı için en iyi uygulamaları ele alıyoruz.
HPA Nasıl Çalışır?
HPA, belirli aralıklarla (varsayılan 15 saniye) Metrics API'den Pod metriklerini sorgular. Mevcut metrik değerini hedef değerle karşılaştırır ve gerekli replica sayısını hesaplar. Formül basittir:
💡 Formül: istenenReplica = ceil(mevcutReplica * (mevcutMetrik / hedefMetrik)). Örneğin 3 Pod %80 CPU kullanıyorsa ve hedef %50 ise: ceil(3 * 80/50) = ceil(4.8) = 5 Pod gerekir.
Metrics Server Kurulumu
HPA'nın çalışması için cluster'da Metrics Server kurulu olmalıdır. Metrics Server, kubelet'lerden CPU ve bellek metriklerini toplar ve Metrics API üzerinden sunar.
# Metrics Server kur
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# Kurulumu dogrula
kubectl get deployment metrics-server -n kube-system
# Node ve Pod metriklerini kontrol et
kubectl top nodes
kubectl top pods
CPU Tabanlı HPA Yapılandırması
En yaygın HPA senaryosu CPU kullanımına göre ölçeklemedir. Aşağıdaki örnekte ortalama CPU kullanımı %60'ı aştığında Pod sayısı artırılır, düştüğünde azaltılır.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
⚠️ Önemli: HPA'nın çalışması için Deployment'taki container'larda resources.requests.cpu tanımlı olmalıdır. CPU request olmadan HPA yüzde hesaplaması yapamaz ve ölçekleme gerçekleşmez.
Bellek ve Çoklu Metrik ile Ölçekleme
CPU yanında bellek kullanımını da hedef olarak ekleyebilirsiniz. HPA birden fazla metrik tanımlandığında en yüksek replica sayısını seçer.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 30
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 75
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 50
periodSeconds: 60
behavior bölümü ölçekleme hızını kontrol eder. scaleDown.stabilizationWindowSeconds: 300 son 5 dakikadaki en yüksek replica sayısını koruyarak ani düşüşleri önler. scaleUp ise daha agresif ayarlanarak hızlı tepki verir.
HPA En İyi Uygulamaları
-
Resource Requests Doğru Ayarlayın CPU ve bellek request değerleri uygulamanın normal yük altındaki tüketimini yansıtmalıdır. Çok düşük request, gereksiz ölçeklemeye; çok yüksek request, yetersiz ölçeklemeye neden olur.
-
Scale Down Stabilizasyonu Kullanın Varsayılan 300 saniye stabilizasyon penceresi çoğu senaryo için uygundur. Kısa süreli trafik düşüşlerinde gereksiz scale down'ı önler.
-
Readiness Probe Tanımlayın Yeni oluşturulan Pod'lar hazır olmadan trafik almamalıdır. Readiness probe olmadan HPA yeni Pod'ları hemen aktif sayar ve yanıt süreleri artar.
-
HPA ile VPA'yı Aynı Metrikte Kullanmayın Vertical Pod Autoscaler (VPA) ve HPA aynı metriği (CPU) hedeflerse çakışma yaşanır. VPA'yı yalnızca bellek için, HPA'yı CPU için kullanın veya Multidimensional Pod Autoscaler tercih edin.
# HPA durumunu izle
kubectl get hpa web-app-hpa --watch
# HPA detaylarini gor
kubectl describe hpa web-app-hpa
# Yuk testi ile HPA'yi tetikle
kubectl run load-test --image=busybox --restart=Never -- \
/bin/sh -c "while true; do wget -qO- http://web-app-service; done"
Kubernetes temel kavramları için Kubernetes Giriş rehberimizi, uygulama dağıtımı için Helm Chart rehberimizi inceleyin. İzleme altyapısı için Prometheus + Grafana rehberimize göz atın. Kubernetes HPA resmi dokümantasyonu ve Metrics Server projesi ek kaynak olarak faydalıdır.
Sıkça Sorulan Sorular
HPA ne kadar hızlı ölçekleme yapar?
HPA varsayılan olarak her 15 saniyede metrikleri kontrol eder. Scale up kararı anında uygulanır ancak yeni Pod'ların hazır olması (image pull + startup) 30 saniye ile birkaç dakika arasında sürebilir.
HPA minReplicas 0 olabilir mi?
Standart HPA'da minReplicas en az 1 olmalıdır. Sıfıra ölçekleme için KEDA (Kubernetes Event-Driven Autoscaling) kullanabilirsiniz. KEDA, kuyruk uzunluğu veya HTTP istek sayısı gibi harici metriklere göre 0'dan ölçekleme destekler.
CPU hedefini yüzde kaç olarak ayarlamalıyım?
Genel öneri %50-70 arasıdır. %50 daha agresif ölçekleme sağlar (daha fazla Pod, daha düşük gecikme), %70 daha maliyet verimlidir. Uygulamanızın yanıt süresi gereksinimlerine göre ayarlayın.
Özel metriklerle HPA kullanabilir miyim?
Evet. Prometheus Adapter veya KEDA ile HTTP istek sayısı, kuyruk derinliği, veritabanı bağlantı sayısı gibi özel metriklere göre ölçekleme yapabilirsiniz. autoscaling/v2 API'si custom ve external metrik türlerini destekler.
Sonuç
Kubernetes HPA, trafik dalgalanmalarına otomatik tepki vererek hem performansı hem de maliyet verimliliğini sağlar. Metrics Server kurulumunu yapın, resource requests değerlerini doğru ayarlayın, scale down stabilizasyonu kullanın ve readiness probe tanımlayın. Özel metrikler gerektiğinde Prometheus Adapter veya KEDA ile HPA'yı genişletin.
Otomatik Ölçeklenen Altyapı
Hosted Cloud bulut sunucuları ile Kubernetes cluster'ınızı trafik artışlarına hazır tutun.
Bulut Sunucu Planlarını İncele →Elif Demir
Cloud Solutions Architect
Kurumsal bulut geçiş projeleri ve hibrit altyapı tasarımı konusunda uzman. AWS, Azure ve özel bulut ortamlarında 8 yıllık deneyime sahiptir.
Yorumlar yakında