Настройка автоматического масштабирования
Вы можете развернуть несколько механизмов автоматического масштабирования в кластере Managed Kubernetes:
- Создайте Cluster Autoscaler (CA), чтобы динамически изменять количество узлов в группе.
- Создайте Horizontal Pod Autoscaler (HPA), чтобы изменять количество подов на узле в зависимости от нагрузки.
- Создайте Vertical Pod Autoscaler (VPA), чтобы автоматически выделять дополнительные ресурсы vCPU и RAM для подов.
Перед развертыванием изучите рекомендации по планированию автоматического масштабирования, а также ограничения по совместимости для Vertical Pod Autoscaler.
Для проведения нагрузочного тестирования механизмов автоматического масштабирования обратитесь к инструкции.
Создать Cluster Autoscaler
Развернуть Metrics Server
Metrics Server необходим для работы Horizontal Pod Autoscaler и Vertical Pod Autoscaler. Этот компонент собирает данные о потреблении ресурсов (vCPU и RAM) с узлов и подов кластера, и передает их в системы автоматического масштабирования.
Чтобы установить Metrics Server:
Скачайте установочный манифест:
bashwget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlОткройте файл
components.yamlи удалите символ#перед строкой--kubelet-insecure-tls. Это безопасно: Metrics Server находится в том же кластере, что и системы автоматического масштабирования, и не требует использования TLS-сертификатов для работы.Создайте Metrics Server:
bashkubectl apply -f components.yamlУбедитесь, что сервер метрик создан и работает:
bashkubectl get apiservice | grep metricsПроверьте, что сервер поставляет метрики:
bashkubectl top pods
Создать Horizontal Pod Autoscaler
Установите Metrics Server, если он еще не развернут в вашем кластере.
Создайте Horizontal Pod Autoscaler для вашего приложения:
bashkubectl autoscale deployment/<имя приложения> --cpu-percent=20 --min=1 --max=5Здесь:
--cpu-percent— желаемая нагрузка пода на vCPU, в процентах;--min— минимальное количество подов;--max— максимальное количество подов.
Убедитесь, что Horizontal Pod Autoscaler для вашего приложения успешно создан:
bashkubectl describe hpa/<имя приложения>
Когда нагрузка на под превысит значение cpu-percent, Horizontal Pod Autoscaler создаст новые поды для обеспечения бесперебойной работы приложения. Например, если cpu-percent имеет значение 20, а нагрузка на под составляет 60%, будет создано еще два дополнительных пода.
Создать Vertical Pod Autoscaler
Установите Metrics Server, если он еще не развернут в вашем кластере.
Установите Vertical Pod Autoscaler из GitHub-репозитория:
bashgit clone https://github.com/kubernetes/autoscaler.git && \ cd autoscaler/vertical-pod-autoscaler/hack && \ ./vpa-up.shУбедитесь, что поды Vertical Pod Autoscaler подняты и работают:
bashkubectl get pods -n kube-system | awk '/vpa/'Создайте манифест Vertical Pod Autoscaler для вашего приложения:
bashapiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: <имя приложения>-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: <имя приложения> updatePolicy: updateMode: "<режим работы VPA>"Настройка
updateModeможет принимать несколько значений:Off— Vertical Pod Autoscaler предоставляет рекомендации по управлению ресурсами, но не изменяет их.Recreate(по умолчанию) — Vertical Pod Autoscaler применяет рекомендации по ресурсам при создании и обновлении подов. Существующие поды пересоздаются методом вытеснения (Eviction), при этом учитываются правила PodDisruptionBudget.InPlaceOrRecreate— Vertical Pod Autoscaler пытается обновить ресурсы существующих подов «на лету» (без перезапуска). Если это невозможно, он пересоздает под с помощью методаRecreate.Initial— Vertical Pod Autoscaler назначает запросы ресурсов только при создании пода и больше никогда их не меняет.
Подробнее о режимах работы Vertical Pod Autoscaler см. в документации Kubernetes.
Создайте Vertical Pod Autoscaler:
bashkubectl apply -f <имя файла с манифестом VPA>Посмотрите рекомендации, которые Vertical Pod Autoscaler предоставляет для вашего приложения:
bashkubectl describe vpa <имя приложения>В блоке
Container Recommendations:Lower Bound— минимально допустимый объем запрошенных ресурсов (requests), при котором сохраняется работоспособность приложения;Target— оптимальный объем запрошенных ресурсов, который Vertical Pod Autoscaler рекомендует для приложения с учетом текущей нагрузки;Uncapped Target— рекомендация по объему запрошенных ресурсов, рассчитанная без учета ограничивающих политик;Upper Bound— максимальный разумный объем запрошенных ресурсов для приложения.
Проверить работу автоматического масштабирования
Вы можете проверить работу Horizontal Pod Autoscaler и Vertical Pod Autoscaler с помощью нагрузочного тестирования. Для этого вы можете использовать как простое тестовое приложение, так и ваше собственное — если оно поддерживает работу с HTTP-запросами.
Отключить автоматическое масштабирование
Отключить Cluster Autoscaler
Чтобы отключить Cluster Autoscaler, укажите фиксированное значение для количества узлов в группе при изменении группы узлов.
Отключить Horizontal Pod Autoscaler
Узнайте имя HPA, которое нужно удалить:
bashkubectl get hpa -wВыполните команду:
bashkubectl delete hpa/<имя HPA>
Отключить Vertical Pod Autoscaler
Чтобы удалить Vertical Pod Autoscaler, выполните команду:
kubectl delete -f <имя файла с манифестом VPA>