Как заставить процессор k8s и HPA памяти работать вместе?

#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 памяти.