Подстава со стороны Kubernetes HPA
Если вы работаете с Kubernetes, тогда вы слышали о такой замечательной штуке как Horizontal Pod Autoscaler, который позволяет настравать скейлинг ваших деплойментов основываясь на потреблении CPU, RAM или любых других, включая кастомные от Prometheus Operator
Что бы создать 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.