Настройка автоматического масштабирования
Вы можете развернуть несколько механизмов автоматического масштабирования в кластере Managed Kubernetes:
- Создайте Cluster Autoscaler (CA), чтобы динамически изменять количество узлов в группе.
- Создайте Horizontal Pod Autoscaler (HPA), чтобы изменять количество подов на узле в зависимости от нагрузки.
- Создайте Vertical Pod Autoscaler (VPA), чтобы автоматически выделять дополнительные ресурсы vCPU и RAM для подов.
Перед развертыванием изучите рекомендации по планированию автоматического масштабирования, а также ограничения по совместимости для Vertical Pod Autoscaler.
Для проведения нагрузочного тестирования механизмов автоматического масштабирования обратитесь к инструкции.
Создать Cluster Autoscaler
Заголовок раздела «Создать Cluster Autoscaler»- Веб-консоль
- MWS CLI
- Terraform
- API
Укажите параметры Cluster Autoscaler при создании или изменении группы узлов:
В блоке Масштабирование включите опцию Автомасштабирование.
Укажите настройки автоматического масштабирования:
- Минимальное число узлов — количество узлов группы при минимальной нагрузке.
- Максимальное число узлов — максимально допустимое количество узлов в группе.
Примените изменения.
Развернуть Metrics Server
Заголовок раздела «Развернуть Metrics Server»Metrics Server необходим для работы Horizontal Pod Autoscaler и Vertical Pod Autoscaler. Этот компонент собирает данные о потреблении ресурсов (vCPU и RAM) с узлов и подов кластера, и передает их в системы автоматического масштабирования.
Чтобы установить Metrics Server:
Скачайте установочный манифест:
bash wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlОткройте файл
components.yamlи удалите символ#перед строкой--kubelet-insecure-tls. Это безопасно: Metrics Server находится в том же кластере, что и системы автоматического масштабирования, и не требует использования TLS-сертификатов для работы.Создайте Metrics Server:
bash kubectl apply -f components.yamlУбедитесь, что сервер метрик создан и работает:
bash kubectl get apiservice | grep metricsПроверьте, что сервер поставляет метрики:
bash kubectl top pods
Создать Horizontal Pod Autoscaler
Заголовок раздела «Создать Horizontal Pod Autoscaler»Установите Metrics Server, если он еще не развернут в вашем кластере.
Создайте Horizontal Pod Autoscaler для вашего приложения:
bash kubectl autoscale deployment/<имя приложения> --cpu-percent=20 --min=1 --max=5Здесь:
--cpu-percent— желаемая нагрузка пода на vCPU, в процентах;--min— минимальное количество подов;--max— максимальное количество подов.
Убедитесь, что Horizontal Pod Autoscaler для вашего приложения успешно создан:
bash kubectl describe hpa/<имя приложения>
Когда нагрузка на под превысит значение cpu-percent, Horizontal Pod Autoscaler создаст новые поды для обеспечения бесперебойной работы приложения. Например, если cpu-percent имеет значение 20, а нагрузка на под составляет 60%, будет создано еще два дополнительных пода.
Создать Vertical Pod Autoscaler
Заголовок раздела «Создать Vertical Pod Autoscaler»Установите Metrics Server, если он еще не развернут в вашем кластере.
Установите Vertical Pod Autoscaler из GitHub-репозитория:
bash git clone https://github.com/kubernetes/autoscaler.git && \cd autoscaler/vertical-pod-autoscaler/hack && \./vpa-up.shУбедитесь, что поды Vertical Pod Autoscaler подняты и работают:
bash kubectl get pods -n kube-system | awk '/vpa/'Создайте манифест Vertical Pod Autoscaler для вашего приложения:
bash apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: <имя приложения>-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: <имя приложения>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:
bash kubectl apply -f <имя файла с манифестом VPA>Посмотрите рекомендации, которые Vertical Pod Autoscaler предоставляет для вашего приложения:
bash kubectl describe vpa <имя приложения>В блоке
Container Recommendations:Lower Bound— минимально допустимый объем запрошенных ресурсов (requests), при котором сохраняется работоспособность приложения;Target— оптимальный объем запрошенных ресурсов, который Vertical Pod Autoscaler рекомендует для приложения с учетом текущей нагрузки;Uncapped Target— рекомендация по объему запрошенных ресурсов, рассчитанная без учета ограничивающих политик;Upper Bound— максимальный разумный объем запрошенных ресурсов для приложения.
Проверить работу автоматического масштабирования
Заголовок раздела «Проверить работу автоматического масштабирования»Вы можете проверить работу Horizontal Pod Autoscaler и Vertical Pod Autoscaler с помощью нагрузочного тестирования. Для этого вы можете использовать как простое тестовое приложение, так и ваше собственное — если оно поддерживает работу с HTTP-запросами.
- Тестовое приложение
- Собственное приложение
Создайте файл с манифестом для тестового приложения и сервиса:
yaml apiVersion: apps/v1kind: Deploymentmetadata:name: simple-applabels:app: simple-appspec:replicas: 1selector:matchLabels:app: simple-apptemplate:metadata:labels:app: simple-appspec:containers:- name: nginx-containerimage: nginx:latestimagePullPolicy: Alwaysports:- containerPort: 80resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "200m"memory: "256Mi"Разверните приложение:
bash kubectl apply -f <файл с манифестом тестового приложения>Убедитесь, что под и сервис тестового приложения работают:
bash kubectl get pods,svc | grep simple-appСоздайте Horizontal Pod Autoscaler или Vertical Pod Autoscaler для приложения
simple-app.В отдельном окне запустите эмуляцию нагрузки:
bash kubectl run -it --rm load-generator \--image=alpine/curl \--restart=Never \-- sh -c "while true; do curl -s http://simple-app-service > /dev/null; done"Этот скрипт будет бесконечно выполнять cURL-запрос к приложению
simple-app, что приведет к росту нагрузки. Если нагрузка недостаточна для срабатывания автоматического масштабирования, запустите эмуляцию нагрузки еще в нескольких окнах.Наблюдайте за изменениями в масштабировании подов:
Для Horizontal Pod Autoscaler:
bash kubectl get hpa -wПоле
REPLICASотражает текущее и новое количество подов, обслуживающих приложение. Вывод команды обновляется динамически с ростом или уменьшением количества подов.Для Vertical Pod Autoscaler:
bash kubectl describe vpa simple-app-vpaИнформация в
Container Recommendationsотображает текущее и рекомендуемое состояние для объема запрошенных ресурсов (requests).
Чтобы снять нагрузку с сервиса и остановить эмуляцию, нажмите CTRL + C.
Удалите созданные механизмы автоматического масштабирования.
Удалите тестовое приложение:
bash kubectl delete -f <файл с манифестом тестового приложения>
Отключить автоматическое масштабирование
Заголовок раздела «Отключить автоматическое масштабирование»Отключить Cluster Autoscaler
Заголовок раздела «Отключить Cluster Autoscaler»Чтобы отключить Cluster Autoscaler, укажите фиксированное значение для количества узлов в группе при изменении группы узлов.
- Веб-консоль
- MWS CLI
- Terraform
- API
- В блоке Масштабирование выключите опцию Автомасштабирование.
- Укажите нужное число количество узлов.
- Примените изменения.
Отключить Horizontal Pod Autoscaler
Заголовок раздела «Отключить Horizontal Pod Autoscaler»Узнайте имя HPA, которое нужно удалить:
bash kubectl get hpa -wВыполните команду:
bash kubectl delete hpa/<имя HPA>
Отключить Vertical Pod Autoscaler
Заголовок раздела «Отключить Vertical Pod Autoscaler»Чтобы удалить Vertical Pod Autoscaler, выполните команду:
kubectl delete -f <имя файла с манифестом VPA>