Skip to content

Настройка автоматического масштабирования

Вы можете развернуть несколько механизмов автоматического масштабирования в кластере Managed Kubernetes:

Перед развертыванием изучите рекомендации по планированию автоматического масштабирования, а также ограничения по совместимости для Vertical Pod Autoscaler.

Для проведения нагрузочного тестирования механизмов автоматического масштабирования обратитесь к инструкции.

Создать Cluster Autoscaler

Развернуть Metrics Server

Metrics Server необходим для работы Horizontal Pod Autoscaler и Vertical Pod Autoscaler. Этот компонент собирает данные о потреблении ресурсов (vCPU и RAM) с узлов и подов кластера, и передает их в системы автоматического масштабирования.

Чтобы установить Metrics Server:

  1. Скачайте установочный манифест:

    bash
    wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  2. Откройте файл components.yaml и удалите символ # перед строкой --kubelet-insecure-tls. Это безопасно: Metrics Server находится в том же кластере, что и системы автоматического масштабирования, и не требует использования TLS-сертификатов для работы.

  3. Создайте Metrics Server:

    bash
    kubectl apply -f components.yaml
  4. Убедитесь, что сервер метрик создан и работает:

    bash
    kubectl get apiservice | grep metrics
  5. Проверьте, что сервер поставляет метрики:

    bash
    kubectl top pods

Создать Horizontal Pod Autoscaler

  1. Установите Metrics Server, если он еще не развернут в вашем кластере.

  2. Создайте Horizontal Pod Autoscaler для вашего приложения:

    bash
    kubectl autoscale deployment/<имя приложения> --cpu-percent=20 --min=1 --max=5

    Здесь:

    • --cpu-percent — желаемая нагрузка пода на vCPU, в процентах;
    • --min — минимальное количество подов;
    • --max — максимальное количество подов.
  3. Убедитесь, что Horizontal Pod Autoscaler для вашего приложения успешно создан:

    bash
    kubectl describe hpa/<имя приложения>

Когда нагрузка на под превысит значение cpu-percent, Horizontal Pod Autoscaler создаст новые поды для обеспечения бесперебойной работы приложения. Например, если cpu-percent имеет значение 20, а нагрузка на под составляет 60%, будет создано еще два дополнительных пода.

Создать Vertical Pod Autoscaler

  1. Установите Metrics Server, если он еще не развернут в вашем кластере.

  2. Установите Vertical Pod Autoscaler из GitHub-репозитория:

    bash
    git clone https://github.com/kubernetes/autoscaler.git && \
    cd autoscaler/vertical-pod-autoscaler/hack && \
    ./vpa-up.sh
  3. Убедитесь, что поды Vertical Pod Autoscaler подняты и работают:

    bash
    kubectl get pods -n kube-system | awk '/vpa/'
  4. Создайте манифест Vertical Pod Autoscaler для вашего приложения:

    bash
    apiVersion: 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.

  5. Создайте Vertical Pod Autoscaler:

    bash
    kubectl apply -f <имя файла с манифестом VPA>
  6. Посмотрите рекомендации, которые 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-запросами.

Отключить автоматическое масштабирование

Отключить Cluster Autoscaler

Чтобы отключить Cluster Autoscaler, укажите фиксированное значение для количества узлов в группе при изменении группы узлов.

Отключить Horizontal Pod Autoscaler

  1. Узнайте имя HPA, которое нужно удалить:

    bash
    kubectl get hpa -w
  2. Выполните команду:

    bash
    kubectl delete hpa/<имя HPA>

Отключить Vertical Pod Autoscaler

Чтобы удалить Vertical Pod Autoscaler, выполните команду:

bash
kubectl delete -f <имя файла с манифестом VPA>