Подстава со стороны Kubernetes HPA

Если вы работаете с Kubernetes, тогда вы слышали о такой замечательной штуке как Horizontal Pod Autoscaler, который позволяет настравать скейлинг ваших деплойментов основываясь на потреблении CPU, RAM или любых других, включая кастомные от Prometheus Operator

hpa

Что бы создать HPA нам нужно зааплаить файлик с HPA где мы указываем деплоймент и его название (вот пример деплоймента, который, я взял с оф документации)

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Обратите внимание на эти строки

kind: Deployment
name: php-apache

Как видите, мы передаем деплоймент с именем php-apache

Если у вас есть такой деплоймент - то hpa найдет все поды которые относятся к этому деплойменту и будет за ними наблюдать/скейлить/даунскейлить

Когда мы смотрим эти переменные, мы думаем, что HPA находит деплоймент ТОЛЬКО по названию name: php-apache где получает список подов.

А вот и нет.

HPA находит деплоймент с именем name: php-apache и берет от туда LABELS, по которым уже и находит нужные pod’ы.

На первый взгляд все окей, НО, что если у нас будет, 3 деплоймента (скажем - php-apache-blue, php-apache-green, php-apache-preview). Где будут указаны одни и те же лейблы (скажем - app: php)

Со стороны кубера - это 3 разных деплйомента, ну и что, что у них одни и те же лейблы, деплойменты будут отлично работать и поды будут подниматься.

Но, со стороны HPA, это будет 1 деплоймент.

Сейчас объясню.

Если вы попытаетесь создать HPA для этих 3х деплойментов, и нагрузите поды деплоймента, скажем, php-apache-preview до момента, что бы НPA увеличил количество под. То увидите, что HPA увеличит поды на всех 3х деплойментах, в независимости от того, что был нагружен только 1 деплоймент из 3х.

Если вы не укажете limits для одного из деплойментов и создадите 3 HPA (для 3х разных деплойментов) - то увидите, что ни одни из 3х HPA не будет работать и все они будут ругаться на отсутствие limits во всех 3х деплойментах.

По этому, пожалуйста, не используйте одни и те же labels если вы собираетесь использовать HPA.

comments powered by Disqus