Docker & Kubernetes
HPA ile ölçekleme
HPA ile otomatik ölçekleme yazarsın.
HPA ile ölçekleme
API, yük arttığında HPA ile ölçeklenir. HPA açıkken Deployment şablonu replicas alanını yazmamalıdır; aksi hâlde her helm upgrade kopya sayısını sıfırlar:
# templates/api-deployment.yaml
spec:
{{- if not .Values.api.autoscaling.enabled }}
replicas: {{ .Values.api.replicas }}
{{- end }}
# templates/api-hpa.yaml
{{- if .Values.api.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api
spec:
scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: api}
minReplicas: {{ .Values.api.autoscaling.min }}
maxReplicas: {{ .Values.api.autoscaling.max }}
metrics:
- type: Resource
resource:
name: cpu
target: {type: Utilization, averageUtilization: {{ .Values.api.autoscaling.cpu }}}
{{- end }}
Kaynak istekleri zorunlu
HPA'nın CPU yüzdesini hesaplayabilmesi için API container'ında requests.cpu olmalıdır. İstekler de values'tan gelir:
resources:
{{- toYaml .Values.api.resources | nindent 12 }}
# values.yaml
api:
resources:
requests: {cpu: 200m, memory: 256Mi}
limits: {memory: 512Mi}
toYaml ve nindent, bir değer bloğunu doğru girintiyle şablona yerleştirir.
Uygulama HPA'yı yükselt ve izle
Üç komut yaz: ./magaza'yı magaza release'i olarak magaza namespace'inde, yoksa kurarak, values-prod.yaml ile yükselt; magaza'daki HPA'ları listele; magaza'da app=api etiketli pod'ların kaynak kullanımını göster.
Örnek çözümü göster
helm upgrade --install magaza ./magaza -n magaza -f values-prod.yaml
kubectl get hpa -n magaza
kubectl top pods -n magaza -l app=api
Kendini test et
-
HPA 6 kopyaya çıkardıktan sonra replicas: 1 yazan bir şablonla helm upgrade yapılırsa ne olur?
- Hiçbir şey olmaz
- HPA silinir
- Yükseltme başarısız olur
- Kopya sayısı kısa süreliğine 1'e düşer, sonra HPA yeniden yükseltir
Cevabı göster
Kopya sayısı kısa süreliğine 1'e düşer, sonra HPA yeniden yükseltir — Bu ani düşüş yük altında kesintiye yol açar.
-
Koşulu tersine çevir.
{{- if ____ .Values.api.autoscaling.enabled }}
replicas: {{ .Values.api.replicas }}
{{- end }}
Cevabı göster
{{- if not .Values.api.autoscaling.enabled }}
replicas: {{ .Values.api.replicas }}
{{- end }}
-
Eşleştir.
- if not autoscaling
- replicas yalnızca HPA kapalıyken
- toYaml
- Değeri YAML'a çevir
- nindent 12
- Yeni satır ve girinti
- requests.cpu
- HPA hesabı için
Sıradaki ders: Birleştirme - üretim