Включение оптимизированного по затратам масштабирования надстроек в кластере Azure Kubernetes Service (AKS) (предварительная версия)

В этой статье представлен обзор масштабирования надстроек, оптимизированных по затратам, в Службе Kubernetes в Azure (AKS). С помощью масштабирования надстроек, оптимизированного по затратам, можно управлять надстройками, которые требуют пользовательского ЦП и памяти, переопределяя конфигурации по умолчанию или включая автомасштабирование. Эта функция гарантирует, что ресурсы не чрезмерно выделяются для подключаемых модулей, что увеличивает экономию затрат и эффективность использования кластера.

Обзор

Включение масштабирования дополнений с оптимизацией затрат устанавливает дополнение Vertical Pod Autoscaler (VPA), позволяя поддерживаемым дополнениям автоматически масштабироваться в зависимости от использования.

Эта функция также позволяет настраивать запросы и лимиты ЦП и памяти ресурсов по умолчанию в Развертываниях и DaemonSets, пределы максимального и минимального разрешенного ЦП и памяти, а также режим обновления VPA в пользовательских ресурсах VPA. Дополнительные сведения см. в статье о настройке конфигурации ресурсов для надстроек AKS.

Поддерживаемые надстройки AKS

Следующие управляемые надстройки AKS поддерживают оптимизированную для затрат функцию масштабирования надстроек:

Дополнение Поведение активации Имя настраиваемого ресурса VPA Команда для проверки настраиваемого ресурса VPA
CoreDNS Включен по умолчанию в новых кластерах AKS. coredns kubectl get vpa coredns --namespace kube-system
Идентификация рабочей нагрузки Необязательная надстройка, требующая ручного включения. azure-wi-webhook-controller-manager kubectl get vpa azure-wi-webhook-controller-manager --namespace kube-system
Целостность изображений Необязательная надстройка, требующая ручного включения. ratify kubectl get vpa ratify --namespace gatekeeper-system
Наблюдаемость сети (Сетчатка) Необязательная надстройка, требующая ручного включения. retina-agent и retina-operator. kubectl get vpa retina-agent --namespace kube-system и kubectl get vpa retina-operator --namespace kube-system.

Поддерживаемые режимы VPA для масштабирования дополнений, оптимизированных по затратам.

В настоящее время VPA поддерживает следующие режимы масштабирования дополнений, оптимизированных для снижения затрат:

  • Отключено. VPA предоставляет данные рекомендаций по ресурсам, но не применяет их к целевому поду.
  • Начальный (режим по умолчанию): VPA автоматически применяет рекомендации по ЦП и памяти к целевому модулю при перезапуске, но не инициирует сам перезапуск.
  • Авто: VPA автоматически обновляет запросы ЦП и памяти для модулей pod на основе рекомендаций.

Замечание

При включении масштабирования дополнений, оптимизированного по затратам, рассмотрите следующие сведения:

  • При удалении настраиваемого ресурса Deployment, DaemonSet или VPA изменения возвращаются к начальной конфигурации надстройки AKS.
  • Оптимизированная для затрат функция масштабирования надстроек позволяет надстройке VPA автоматически масштабировать поддерживаемые надстройки AKS. Он не работает с локально размещенным VPA.
  • AKS перезапускает pod надстройки при включении масштабирования надстроек, оптимизированного для затрат. CoreDNS в настоящее время является единственным исключением, чтобы избежать потенциальных сбоев во время перезапуска. Дополнительные сведения см. в разделе "Поведение автомасштабирования CoreDNS".

Предупреждение

Убедитесь, что в пуле системных узлов достаточно вычислительных ресурсов для ваших надстроек при включении масштабирования надстроек с оптимизацией затрат. AKS рекомендует включить автомасштабирование кластера или автоматическую подготовку узла , чтобы обеспечить оптимальное распределение вычислительных ресурсов. Отслеживайте ожидающие pods надстроек при использовании функции масштабирования, оптимизированной по стоимости. VPA может рекомендовать запросы ресурсов, превышающие доступную емкость узла, что может привести к невозможности планирования подов. Это поведение можно контролировать, настраивая значения min/max для запросов и ограничений поддерживаемых надстроек.

Предпосылки

Это важно

Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

Установка расширения Azure CLI aks-preview

  1. aks-preview Установите расширение с помощью az extension add команды.

    az extension add --name aks-preview
    
  2. Обновите до последней версии расширения с помощью az extension update команды.

    az extension update --name aks-preview
    

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

  1. Зарегистрируйте оптимизированную для оптимизации затрат функцию предварительной версии надстройки с помощью az feature register команды.

    az feature register --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"
    

    В течение нескольких минут состояние отображается как зарегистрированное.

  2. Проверьте состояние регистрации с помощью az feature show команды.

    az feature show --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"
    
  3. Когда состояние отображается как зарегистрированное, обновите регистрацию поставщика Microsoft.ContainerService с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerService
    

Включение масштабирования надстроек, оптимизированного по затратам, в кластере AKS

При включении надстройки кластер AKS автоматически устанавливает надстройку VPA. Надстройки AKS, поддерживающие оптимизированную для затрат функцию масштабирования надстроек, имеют другое поведение включения.

Замечание

Если вы используете Bicep, шаблоны ARM или Terraform, установите VerticalPodAutoscaler на "True", а AddonAutoscaling на "enabled".

Включите оптимизированное по затратам масштабирование надстроек в новом кластере

  • Включите масштабирование с оптимизацией затрат для надстроек в новом кластере AKS, используя команду az aks create с флагом --enable-optimized-addon-scaling.

    az aks create --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
    

Включение оптимизированной для затрат надстройки масштабирования в существующем кластере

  • Включите масштабирование надстройки, оптимизированное для затрат, в существующем кластере AKS с помощью команды az aks update с флагом --enable-optimized-addon-scaling.

    az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
    

Отключение масштабирования дополнения, оптимизированного по затратам, в кластере AKS

  • Отключите масштабирование дополнения, оптимизированного для затрат, в кластере AKS с помощью команды az aks update и флага --disable-optimized-addon-scaling.

    az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --disable-optimized-addon-scaling
    

Замечание

Отключение оптимизированной для затрат функции масштабирования надстройки не отключает надстройку VPA по умолчанию. Сведения об отключении VPA см. в разделе "Отключить VPA" в кластере AKS.

Настройка конфигурации ресурсов по умолчанию

С функцией масштабирования надстройки, оптимизированной для затрат, включенной в вашем кластере, вы можете настроить стандартные настройки ЦП и памяти для ресурсов надстроек, а также конфигурацию VPA по умолчанию для поддерживаемых надстроек платформы AKS. Дополнительные сведения см. в статье о настройке конфигурации ресурсов для надстроек AKS.

Замечание

В начальном режиме VPA применяет рекомендуемые запросы ЦП и памяти только при создании или обновлении модуля pod. Если вы хотите, чтобы рекомендации вступили в силу немедленно, обновите поды вручную. Перед применением рекомендуемых значений вручную убедитесь, что для режима обновления VPA задано значение Initial или Auto в пользовательском ресурсе VPA.

  1. Проверьте состояние pod и загрузку ЦП или памяти, чтобы убедиться, что модуль pod работает должным образом.

    В следующем примере используется kubectl get pod команда для проверки состояния pod CoreDNS:

    kubectl get pod <coredns-pod-name> --namespace kube-system -o yaml
    

    В следующих выходных данных показан пример состояния модуля Pod CoreDNS:

    apiVersion: v1
    kind: Pod
    metadata:
      name: <coredns-pod-name>
      namespace: kube-system
    spec:
      ...
      containers:
      - name: coredns
        resources:
          limits:
            cpu: "3"
            memory: "500Mi"
          requests:
            cpu: "100m"
            memory: "70Mi"
    
  2. Получите рекомендуемое значение VPA с помощью kubectl get vpa команды.

    kubectl get vpa coredns --namespace kube-system
    

    В следующих выходных данных показан пример рекомендуемого значения VPA для модуля Pod CoreDNS:

    NAME      MODE      CPU   MEM        PROVIDED   AGE
    coredns   Initial   11m   23574998   True       44m
    
  3. Если вы хотите использовать значения, рекомендуемые VPA, вручную удалите модуль pod с помощью kubectl delete pod команды, чтобы перезапустить pod с рекомендуемыми значениями VPA.

    kubectl delete pod <coredns-pod-name> --namespace kube-system
    
  4. После перезапуска модуля pod проверьте состояние pod и обновления ЦП/памяти с помощью kubectl get pod команды.

    kubectl get pod <coredns-pod-name> --namespace kube-system -o yaml
    

    В следующих выходных данных показан пример состояния модуля pod CoreDNS после применения рекомендуемых значений VPA:

    apiVersion: v1
    kind: Pod
    metadata:
      name: <coredns-pod-name>
      namespace: kube-system
    spec:
      ...
      containers:
      - name: coredns
        resources:
          limits:
            cpu: "330m"
            memory: "168392842"
          requests:
            cpu: "11m"
            memory: "23574998"
    

Устранение неполадок

С активированной функцией масштабирования надстроек, оптимизированных по затратам, в вашем кластере можно настраивать параметры ЦП и памяти по умолчанию для ресурсов надстроек, а также изменять конфигурацию VPA по умолчанию для поддерживаемых управляемых надстроек AKS.

Если модули pod дополнений с поддержкой автомасштабирования находятся в состоянии ожидания или если вы не видите рекомендаций по VPA для дополнений с поддержкой автомасштабирования, выполните следующие действия для устранения проблемы.

Проверка состояния надстройки VPA, управляемой AKS

  1. Проверьте, выполняются ли все системные компоненты VPA с помощью kubectl get pods команды.

    kubectl get pods --namespace kube-system | grep vpa
    

    Выходные данные должны отображать три модуля pod (vpa-admission-controller, vpa-recommender и vpa-updater), выполняемые в пространстве имен, как показано в kube-system следующем примере:

    vpa-admission-controller   2/2     2            2           4m11s
    vpa-recommender            1/1     1            1           4m11s
    vpa-updater                1/1     1            1           4m11s
    
  2. Для каждого из трех модулей VPA проверьте журналы на ошибки, используя команду kubectl logs. Обязательно замените <pod-name> именами модулей VPA pod.

    kubectl logs <pod-name> --namespace kube-system | grep -e '^E[0-9]\{4\}'
    
  3. Подтвердите создание пользовательского определения ресурсов (CRD) с помощью kubectl get команды.

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

Проверьте состояние подов и использование ЦП и памяти

  1. Проверьте состояние pod с помощью kubectl get pod команды.

    kubectl get pod <pod-name> --namespace=kube-system
    
  2. Если модуль pod имеет состояние Pending, проверьте свойство состояния pod, чтобы определить причину, по которой модуль pod не выполняется.

    kubectl describe pod <pod-name> --namespace kube-system -o yaml
    

    В следующих выходных данных показан пример состояния pod с состоянием Pending:

    apiVersion: v1
    kind: Pod
    ...
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2023-05-03T17:05:26Z"
        message: '0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory.
          preemption: 0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory..'
        reason: Unschedulable
        status: "False"
        type: PodScheduled
      phase: Pending
      qosClass: Guaranteed
    
  3. Если выходные данные показывают, что модуль pod находится в состоянии Pending из-за нехватки ЦП или памяти, рассмотрите следующие действия:

    • Добавьте больше узлов, чтобы поды можно было размещать на узлах с более низкой загрузкой ресурсов.
    • Отключите VPA для целевого подключаемого модуля pod, изменив режим обновления на Off, а затем вручную обновите запросы и ограничения до значений доступных ресурсов на узле. Будьте осторожны при установке ограничений ресурсов на крайне низкие значения, так как это может привести к возникновению ошибки OOM или регулирования ЦП, если он пытается использовать больше ресурсов, чем доступно на узле.

Дальнейшие шаги