#kubernetes #hpa #horizontal-pod-autoscaling
Вопрос:
Я использую шаблон HPA k8s для процессора и памяти, как показано ниже:
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: {{.Chart.Name}}-cpu
labels:
app: {{.Chart.Name}}
chart: {{.Chart.Name}}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{.Chart.Name}}
minReplicas: {{.Values.hpa.min}}
maxReplicas: {{.Values.hpa.max}}
targetCPUUtilizationPercentage: {{.Values.hpa.cpu}}
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: {{.Chart.Name}}-mem
labels:
app: {{.Chart.Name}}
chart: {{.Chart.Name}}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{.Chart.Name}}
minReplicas: {{.Values.hpa.min}}
maxReplicas: {{.Values.hpa.max}}
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageValue: {{.Values.hpa.mem}}
Наличие двух разных HPA приводит к тому, что любые новые модули, запущенные для запуска ограничения HPA памяти, немедленно прекращаются HPA процессора, поскольку загрузка процессора модулей ниже триггера уменьшения масштаба для процессора.
Он всегда завершает запуск новейшего модуля, который удерживает старые модули и снова запускает HPA памяти, вызывая бесконечный цикл.
Есть ли способ дать указание CPU HPA каждый раз завершать модули с более высокой нагрузкой, а не зарождающиеся модули?
Комментарии:
1. Я вижу, что оба ваших HPA получают одинаковое развертывание. Почему бы просто не использовать один HPA с показателями как для процессора, так и для памяти?
2. HPA для автоматического масштабирования памяти и процессора имеет разные версии @rock’nrolla
3. @rock’nrolla Спасибо за предложение, мне раньше не приходило в голову просто использовать автоматическое масштабирование apiVersion v2beta2 для процессора. Это решило мою проблему.
Ответ №1:
Согласно предложению в комментариях, использование одного HPA решило мою проблему. Мне просто нужно было переместить HPA процессора в ту же версию, что и HPA памяти.