Kubernetes'te uygulamalarınızın yük altında performans kaybetmemesi ve maliyetleri optimize etmesi için Horizontal Pod Autoscaler (HPA) vazgeçilmez bir araçtır. HPA, belirlediğiniz metrikler (CPU, bellek veya özel metrikler) doğrultusunda pod sayısını otomatik olarak artırır veya azaltır. Bu adım adım rehberde, HPA'yı sıfırdan nasıl kuracağınızı, doğru yapılandırmayı ve karşılaşabileceğiniz yaygın sorunları ele alacağız.
1. Ön Koşullar: Metrics Server'ı Kurun
HPA'nın çalışması için kümenizde Metrics Server bulunmalıdır. Metrics Server, pod ve düğümlerin kaynak kullanımını toplar ve API üzerinden sunar. Aşağıdaki komutla kurabilirsiniz:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Kurulumu doğrulamak için:
kubectl get deployment metrics-server -n kube-system
2. Hedef Uygulamanızı Dağıtın
HPA'nın ölçeklendireceği bir Deployment oluşturun. Örnek olarak kaynak sınırları tanımlanmış bir Nginx deployment'ı kullanalım:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
resources:
requests:
cpu: 250m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
Uygulayın: kubectl apply -f deployment.yaml
3. Horizontal Pod Autoscaler Tanımlayın
HPA kaynağını oluşturmak için iki yöntem vardır: imperatif (kubectl autoscale) veya deklaratif (YAML). Aşağıda deklaratif bir örnek görüyorsunuz:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 200Mi
Bu yapılandırmada HPA, CPU kullanımı %50'nin üzerine çıktığında veya bellek 200Mi'yi aştığında pod sayısını artırır. kubectl apply -f hpa.yaml ile uygulayın.
4. HPA'nın Çalıştığını Doğrulayın
HPA durumunu kontrol etmek için:
kubectl get hpa nginx-hpa
Çıktıda TARGETS sütununda mevcut kullanım ve hedef değerler görünür. Örneğin:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx-hpa Deployment/nginx-deployment 35%/50%, 150Mi/200Mi 2 10 2 5m
5. Yük Testi ile Ölçeklenmeyi Tetikleyin
HPA'nın tepki verdiğini görmek için yapay bir yük oluşturun. Bunun için ayrı bir pod kullanarak sürekli istek gönderebilirsiniz:
kubectl run -it --rm load-generator --image=busybox -- /bin/sh -c "while true; do wget -q -O- http://nginx-service; done"
Birkaç dakika sonra kubectl get hpa ile pod sayısının arttığını gözlemleyin. Ardından yükü durdurduğunuzda pod sayısının tekrar düştüğünü göreceksiniz.
6. İnce Ayar: Stabilizasyon Pencereleri ve Davranış
HPA'nın ani dalgalanmalara karşı kararlı çalışması için stabilizationWindowSeconds ve behavior alanlarını yapılandırabilirsiniz. Örneğin ölçeklenme hızını sınırlamak için:
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 1
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Pods
value: 2
periodSeconds: 60
Bu, ölçek büyütme işlemini hızlandırırken küçültmeyi yavaşlatır.
7. Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Metrics Server çalışmıyor: HPA hiçbir metrik göremez ve hedef değerler "unknown" görünür. Önce Metrics Server'ın sağlıklı olduğundan emin olun.
- Kaynak limitleri tanımlanmamış: HPA yalnızca pod'ların resource request'lerine göre çalışır. Deployment'da resource limitleri belirtmezseniz ölçeklenme beklendiği gibi olmayabilir.
- Yanlış metrik türü: CPU için
Utilizationkullanırken bellek için genellikleAverageValuekullanmak daha doğrudur. - Çok agresif ölçeklenme: Stabilizasyon pencereleri ayarlanmazsa sık sık pod eklenip silinebilir (thrashing).
- HPA'nın diğer otomatik ölçeklendiricilerle çakışması: Cluster Autoscaler ile birlikte kullanırken dikkatli olun; ikisi birlikte çalışabilir ancak yanlış yapılandırma kaynak israfına yol açar.
8. HPA'yı İzleme ve Optimizasyon
HPA performansını düzenli olarak izlemek için Prometheus ve Grafana gibi araçları kullanabilirsiniz. Özellikle kube-state-metrics ve metrics-server sağladığı verilerle HPA kararlarını analiz edebilirsiniz. Daha önce yayınladığımız Sunucusuz Mimari Performans İzleme ve Optimizasyon İçin Pratik Kontrol Listesi yazısında bulunan bazı prensipler burada da geçerlidir. Ayrıca güvenlik bağlamında, HPA yapılandırmanızın zararlı etkilere yol açmaması için Fidye Yazılımına Karşı Savunma Stratejileri yazımızda bahsedilen ağ politikalarını uygulamanız önerilir.
Sonuç
Kubernetes HPA, doğru yapılandırıldığında uygulamalarınızın elastikiyetini ve kaynak verimliliğini önemli ölçüde artırır. Bu adımları izleyerek kendi ortamınızda HPA'yı kurabilir, test edebilir ve ince ayarlarla optimize edebilirsiniz. Unutmayın: Her uygulama farklıdır; metrik hedeflerinizi ve davranış politikalarınızı gerçek yük desenlerinize göre ayarlayın.
Sık Sorulan Sorular
HPA için Metrics Server zorunlu mu?
Evet, HPA'nın CPU veya bellek gibi kaynak metriklerini kullanabilmesi için Metrics Server'ın kümede çalışıyor olması gerekir. Aksi takdirde hedef değerler 'unknown' olarak kalır.
HPA neden pod sayısını artırmıyor?
En yaygın nedenler: Metrics Server çalışmıyor, pod'ların resource request'leri tanımlanmamış veya hedef metrik değerine henüz ulaşılmamış. Ayrıca minReplicas ve maxReplicas sınırlarını kontrol edin.
HPA ile Cluster Autoscaler birlikte kullanılabilir mi?
Evet, ikisi birlikte çalışabilir. HPA pod sayısını artırırken düğüm kaynağı yetersizse Cluster Autoscaler yeni düğüm ekler. Ancak yanlış yapılandırma kaynak israfına yol açabilir.
HPA hangi metrik türlerini destekler?
HPA, kaynak metrikleri (CPU, bellek), özel metrikler (Prometheus'ten alınan) ve harici metrikler olmak üzere üç tür metrik destekler. Kaynak metrikleri için Metrics Server, özel metrikler için ise custom-metrics-apiserver gerekir.






