Настройка VerticalPodAutoscaler (VPA)

Для как stateless, так и stateful приложений VerticalPodAutoscaler (VPA) автоматически рекомендует и при необходимости применяет более подходящие лимиты ресурсов CPU и памяти на основе ваших бизнес-требований, обеспечивая достаточное количество ресурсов для подов и повышая эффективность использования ресурсов кластера.

Содержание

Понимание VerticalPodAutoscalers

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

После создания VerticalPodAutoscaler платформа начинает мониторить использование ресурсов CPU и памяти подами. Когда собирается достаточное количество данных, VerticalPodAutoscaler рассчитывает рекомендуемые значения ресурсов на основе наблюдаемых шаблонов использования. В зависимости от настроенного режима обновления VPA может либо автоматически применять эти рекомендации, либо просто предоставлять их для ручного применения.

VPA работает, анализируя использование ресурсов ваших подов с течением времени и делая рекомендации на основе этого анализа. Это помогает обеспечить подам необходимые ресурсы без избыточного выделения, что ведёт к более эффективному использованию ресурсов в кластере.

Как работает VPA?

VerticalPodAutoscaler (VPA) расширяет концепцию оптимизации ресурсов подов. VPA отслеживает использование ресурсов ваших подов и предоставляет рекомендации по запросам CPU и памяти на основе наблюдаемых шаблонов использования.

VPA работает, непрерывно мониторя использование ресурсов подами и обновляя свои рекомендации по мере поступления новых данных. VPA может работать в следующих режимах:

  • Off: VPA только предоставляет рекомендации без их автоматического применения.
  • Manual Adjustment: Вы можете вручную корректировать конфигурации ресурсов на основе рекомендаций VPA.

Важно: Эластичное масштабирование может обеспечивать горизонтальное или вертикальное масштабирование подов. При наличии достаточных ресурсов эластичное масштабирование даёт хорошие результаты, но при нехватке ресурсов кластера это может привести к состоянию Pending у подов. Поэтому убедитесь, что в кластере достаточно ресурсов или установлены разумные квоты, либо настройте оповещения для мониторинга условий масштабирования.

Поддерживаемые функции

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

Важно: При ручном применении рекомендаций VPA происходит пересоздание подов, что может вызвать временные перебои в работе приложения. Рекомендуется применять рекомендации в окна обслуживания для рабочих нагрузок в продакшене.

Предварительные требования

  • Убедитесь, что компоненты мониторинга развернуты в текущем кластере и работают корректно. Вы можете проверить статус развертывания и состояние компонентов мониторинга, кликнув в правом верхнем углу платформы развернуть > Platform Health Status..
  • В вашем кластере должен быть установлен кластерный плагин Vertical Pod Autoscaler от Alauda Container Platform.

Установка плагина Vertical Pod Autoscaler

Перед использованием VPA необходимо установить кластерный плагин Vertical Pod Autoscaler:

  1. Войдите в систему и перейдите на страницу Administrators.

  2. Нажмите Marketplace > Cluster Plugins, чтобы открыть список Cluster Plugins.

  3. Найдите кластерный плагин Alauda Container Platform Vertical Pod Autoscaler, нажмите Install и перейдите на страницу установки.

Создание VerticalPodAutoscaler

Использование CLI

Вы можете создать VerticalPodAutoscaler через командную строку, определив YAML-файл и используя команду kubectl create. В следующем примере показано вертикальное автоскейлирование подов для объекта Deployment:

  1. Создайте YAML-файл с именем vpa.yaml со следующим содержимым:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-deployment-vpa
      namespace: default
    spec:
      targetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: my-deployment
      updatePolicy:
        updateMode: 'Off'
      resourcePolicy:
        containerPolicies:
          - containerName: '*'
            mode: 'Auto'
    1. Используйте API autoscaling.k8s.io/v1.
    2. Имя VPA.
    3. Укажите целевой объект рабочей нагрузки. VPA использует селектор рабочей нагрузки для поиска подов, которым требуется корректировка ресурсов. Поддерживаемые типы рабочих нагрузок: DaemonSet, Deployment, ReplicaSet, StatefulSet, ReplicationController, Job и CronJob.
    4. Укажите версию API объекта для масштабирования.
    5. Укажите тип объекта.
    6. Целевой ресурс, к которому применяется VPA.
    7. Политика обновления, определяющая, как VPA применяет рекомендации. updateMode может принимать значения:
      • Auto: Автоматически устанавливает запросы ресурсов при создании подов и обновляет текущие поды до рекомендуемых значений ресурсов. В настоящее время эквивалентно "Recreate". Этот режим может вызвать простой приложения. После поддержки обновлений ресурсов подов на месте режим "Auto" будет использовать этот механизм обновления.
      • Recreate: Автоматически устанавливает запросы ресурсов при создании подов и эвакуирует текущие поды для обновления до рекомендуемых значений ресурсов. Не использует обновления на месте.
      • Initial: Устанавливает запросы ресурсов только при создании подов, без последующих изменений.
      • Off: Не изменяет запросы ресурсов подов автоматически, только предоставляет рекомендации в объекте VPA.
    8. Политика ресурсов, позволяющая задавать конкретные стратегии для разных контейнеров. Например, установка режима контейнера в "Auto" означает, что для этого контейнера будут рассчитываться рекомендации, а "Off" — что рекомендации не будут рассчитываться.
    9. Применить политику ко всем контейнерам в поде.
    10. Установить режим в Auto или Off. Auto означает, что для этого контейнера будут генерироваться рекомендации, Off — что рекомендации не будут генерироваться.
  2. Примените YAML-файл для создания VPA:

    kubectl create -f vpa.yaml

    Пример вывода:

    verticalpodautoscaler.autoscaling.k8s.io/my-deployment-vpa created
  3. После создания VPA вы можете просмотреть рекомендации, выполнив команду:

    kubectl describe vpa my-deployment-vpa

    Пример вывода (частично):

    Status:
      Recommendation:
        Container Recommendations:
          Container Name:  my-container
          Lower Bound:
            Cpu:     100m
            Memory:  262144k
          Target:
            Cpu:     200m
            Memory:  524288k
          Upper Bound:
            Cpu:     300m
            Memory:  786432k

Использование веб-консоли

  1. Перейдите в Container Platform.

  2. В левой навигационной панели выберите Workloads > Deployments.

  3. Кликните по Имя Deployment.

  4. Пролистайте вниз до области Elastic Scaling и справа нажмите Update.

  5. Выберите Vertical Scaling и настройте правила масштабирования.

    ПараметрОписание
    Режим масштабированияВ настоящее время поддерживается режим Manual Scaling, который предоставляет рекомендуемые конфигурации ресурсов на основе анализа прошлых данных использования ресурсов. Вы можете вручную корректировать значения согласно рекомендациям. Корректировки приведут к пересозданию и перезапуску подов, поэтому выбирайте подходящее время, чтобы не повлиять на работающие приложения.
    Обычно после работы подов более 8 дней рекомендуемые значения становятся точными.
    Обратите внимание, что при нехватке ресурсов кластера масштабирование может привести к состоянию Pending у подов. Убедитесь, что в кластере достаточно ресурсов или установлены разумные квоты, либо настройте оповещения для мониторинга условий масштабирования.
    Целевой контейнерПо умолчанию выбран первый контейнер рабочей нагрузки. Вы можете включить рекомендации по лимитам ресурсов для одного или нескольких контейнеров по необходимости.
  6. Нажмите Update.

Расширенная настройка VPA

Опции политики обновления

  • updateMode: "Off" — VPA только предоставляет рекомендации без их автоматического применения. Вы можете применять рекомендации вручную по мере необходимости.
  • updateMode: "Auto" — Автоматически устанавливает запросы ресурсов при создании подов и обновляет текущие поды до рекомендуемых значений. В настоящее время эквивалентно "Recreate".
  • updateMode: "Recreate" — Автоматически устанавливает запросы ресурсов при создании подов и эвакуирует текущие поды для обновления до рекомендуемых значений.
  • updateMode: "Initial" — Устанавливает запросы ресурсов только при создании подов, без последующих изменений.
  • minReplicas: <number> — Минимальное количество реплик. Обеспечивает наличие этого минимального количества подов при эвакуации подов Updater’ом. Должно быть больше 0.

Опции политики контейнера

  • containerName: "*" — Применить политику ко всем контейнерам в поде.
  • mode: "Auto" — Автоматически генерировать рекомендации для контейнера.
  • mode: "Off" — Не генерировать рекомендации для контейнера.

Примечания:

  • Рекомендации VPA основаны на исторических данных использования, поэтому для получения точных рекомендаций поды должны работать несколько дней.
  • При применении рекомендаций VPA в режиме Auto происходит пересоздание подов, что может вызвать временные перебои в работе приложения.

Последующие действия

После настройки VPA рекомендуемые значения лимитов ресурсов CPU и памяти для целевого контейнера можно просмотреть в области Elastic Scaling. В разделе Containers выберите вкладку целевого контейнера и нажмите иконку справа от Resource Limits, чтобы обновить лимиты ресурсов согласно рекомендуемым значениям.