Автоматическое масштабирование — это механизм, который динамически изменяет количество подов или их ресурсы в Kubernetes в зависимости от текущей нагрузки, чтобы поддерживать стабильную работу приложений и эффективно использовать ресурсы.
В KaaS от Рег.облака можно настроить два вида автомасштабирования подов:
-
1.
Горизонтальное автомасштабирование подов (Horizontal Pod Autoscaler, HPA).
-
2.
Вертикальное автомасштабирование подов (Vertical Pod Autoscaler, VPA).
Горизонтальное автомасштабирование подов
Горизонтальное автомасштабирование (HPA) — это встроенный механизм Kubernetes, который автоматически изменяет количество реплик подов в зависимости от нагрузки. Например, если приложение начинает потреблять больше CPU, HPA создаст дополнительные поды, чтобы распределить нагрузку. Когда нагрузка снижается, HPA уменьшит количество подов, освобождая ресурсы.
В основе HPA лежит контроллер, который периодически обращается к метрикам и решает, необходимо ли масштабирование. Основная идея — поддерживать заданный уровень целевой метрики.
Подробнее о горизонтальном автомасштабировании вы можете узнать в официальной документации Kubernetes.
Настройка горизонтального автомасштабирования
- 1
-
2
Убедитесь, что вы успешно подключились к кластеру:
kubectl cluster-info -
3
Установите Metrics Server — он предоставляет HPA данные о загрузке подов:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -
4
Убедитесь, что компоненты успешно развернуты:
kubectl get pods -n kube-system | grep metrics-server -
5
Проверьте, отдаются ли метрики:
kubectl top nodes kubectl top pods -
6
Определите деплоймент приложения, для которого нужно включить автомасштабирование:
kubectl get deployments -
7
Создайте Horizontal Pod Autoscaler с помощью команды:
kubectl autoscale deployment my-app --cpu-percent=70 --min=2 --max=10Где:
my-app— имя вашего приложения,--cpu-percent— желаемая нагрузка пода на vCPU в процентах,--min— минимальное количество подов,--max— максимальное количество подов.
-
8
Проверьте состояние с помощью команды:
kubectl get hpa
Вертикальное автомасштабирование подов
Вертикальное автомасштабирование (VPA) — это механизм, который не изменяет количество подов, а подстраивает выделенные им ресурсы CPU и памяти. VPA автоматически подбирает оптимальные значения ресурсов для контейнеров, основываясь на их фактическом потреблении. Он анализирует метрики работы подов и при необходимости рекомендует или применяет новые лимиты и запросы ресурсов. При изменении конфигурации VPA пересоздает поды с обновленными параметрами, чтобы они могли эффективно использовать ресурсы кластера.
В отличие от HPA, вертикальное автомасштабирование не входит в состав Kubernetes по умолчанию. Для него существует официальный проект в GitHub.
Настройка вертикального автомасштабирования
- 1
-
2
Убедитесь, что вы успешно подключились к кластеру:
kubectl cluster-info -
3
Установите Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -
4
Убедитесь, что компоненты успешно развернуты:
kubectl get pods -n kube-system | grep metrics-server -
5
Проверьте, отдаются ли метрики:
kubectl top nodes kubectl top pods -
6
Установите Vertical Pod Autoscaler из репозитория:
cd /tmp && \ git clone https://github.com/kubernetes/autoscaler.git && \ cd autoscaler/vertical-pod-autoscaler/hack && \ ./vpa-up.sh -
7
После установки создайте манифест
vpa.yamlдля вашего приложения:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-app-vpa namespace: default spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-app updatePolicy: updateMode: "Auto"Где:
name— имя приложения,updateMode— режим работы Vertical Pod Autoscaler. Описания режимов можно найти в официальной документации Kubernetes.
-
8
Создайте объект Vertical Pod Autoscaler для вашего приложения с помощью команды:
kubectl apply -f vpa.yaml -
9
Проверить рекомендации Vertical Pod Autoscaler можно с помощью команды:
kubectl describe vpa my-app-vpaВ выводе будут указаны текущие и рекомендованные значения ресурсов.