Использование средства автомасштабирования кластера в Службе контейнеров Azure

Чтобы обеспечить соответствие требованиям приложений в AKS, может потребоваться настроить количество узлов, выполняющих рабочие нагрузки. Компонент автомасштабирования кластера наблюдает за модулями pod в кластере, которые не могут быть запланированы из-за ограничений ресурсов. Когда средство автомасштабирования кластера обнаруживает проблемы, оно масштабирует число узлов в пуле узлов для удовлетворения требований приложения. Он также регулярно проверка узлы для отсутствия запущенных модулей pod и масштабирует количество узлов по мере необходимости.

В этой статье показано, как включить автомасштабирование кластера и управлять ими в AKS, которая основана на версии Kubernetes с открытым исходным кодом.

Подготовка к работе

Для этой статьи требуется Azure CLI версии 2.0.76 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Использование автомасштабирования кластера в кластере AKS

Внимание

Компонент Kubernetes является средством автомасштабирования кластера. Хотя кластер AKS использует масштабируемый набор виртуальных машин для узлов, не включайте или не изменяйте параметры для автомасштабирования масштабируемого набора. Разрешите средству автомасштабирования кластера Kubernetes устанавливать необходимые параметры масштабирования. Дополнительные сведения см. в разделе часто задаваемых вопросов Можно ли изменять теги и другие свойства ресурсов AKS в группе ресурсов узла?.

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

  1. Создайте группу ресурсов с помощью az group create команды.

    az group create --name myResourceGroup --location eastus
    
  2. Создайте кластер AKS с помощью az aks create команды и включите и настройте автомасштабирование кластера в пуле узлов для кластера с помощью --enable-cluster-autoscaler параметра и указания узла --min-count и --max-count. Следующая команда создает кластер с одним узлом, поддерживаемым масштабируемым набором виртуальных машин, включает автомасштабирование кластера, задает не менее одного и максимум трех узлов:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3
    

    Создание кластера и настройка параметров автомасштабирования кластера занимает несколько минут.

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

  • Обновите существующий кластер с помощью команды и включите и настройте автомасштабирование кластера в пуле узлов с az aks update помощью --enable-cluster-autoscaler параметра и укажите узел --min-count и --max-count. В следующем примере команда обновляет существующий кластер AKS, чтобы включить автомасштабирование кластера в пуле узлов для кластера и задать не менее одного и максимум трех узлов:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    Обновление кластера и настройка параметров его автомасштабирования занимает несколько минут.

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

  • Отключите автомасштабирование кластера с помощью az aks update команды и --disable-cluster-autoscaler параметра.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    При отключении средства автомасштабирования кластера узлы не удаляются.

Примечание.

Вы можете вручную масштабировать кластер после отключения автомасштабирования кластера с помощью az aks scale команды. Если вы используете горизонтальное автомасштабирование pod, оно продолжает работать с отключенным автомасштабированием кластера, но модули pod могут быть запланированы, если все ресурсы узла используются.

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

Вы можете повторно включить автомасштабирование кластера в существующем кластере az aks update с помощью команды и указания --enable-cluster-autoscaler--min-countпараметров и --max-count параметров.

Использование автомасштабирования кластера в пулах узлов

Использование автомасштабирования кластера в нескольких пулах узлов

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

  • Обновите параметры в существующем пуле az aks nodepool update узлов с помощью команды.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

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

  • Отключите автомасштабирование кластера в пуле узлов с помощью az aks nodepool update команды и --disable-cluster-autoscaler параметра.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

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

Вы можете повторно включить автомасштабирование кластера в пуле узлов с помощью az aks nodepool update команды и указания --enable-cluster-autoscaler--min-countпараметров и --max-count параметров.

Примечание.

Если вы планируете использовать автомасштабирование кластера с пулами узлов, охватывающими несколько зон, и используете функции планирования, связанные с зонами, например планирование топологии томов, рекомендуется иметь один пул узлов для каждой зоны и включить --balance-similar-node-groups с помощью профиля автомасштабирования. Это гарантирует, что автомасштабирование может успешно масштабироваться и поддерживать баланс размеров пулов узлов.

Обновление параметров автомасштабирования кластера

По мере изменения требований приложения может потребоваться настроить количество узлов автомасштабирования кластера для эффективного масштабирования.

  • Измените количество узлов с помощью команды и обновите автомасштабирование кластера с помощью az aks update--update-cluster-autoscaler параметра и укажите обновленный узел --min-count и --max-count.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Примечание.

Средство автомасштабирования кластера применяет минимальное число в случаях, когда фактическое число снижается ниже минимального из-за внешних факторов, таких как во время вытеснения места или при изменении минимального значения счетчика из API AKS.

Использование профиля автомасштабирования кластера

Вы можете настроить более детализированные сведения об автомасштабировании кластера, изменив значения по умолчанию в профиле автомасштабирования на уровне кластера. Например, событие вертикального уменьшения масштаба происходит после 10-минутного снижения уровня использования узлов. Если у вас есть рабочие нагрузки, которые выполняются каждые 15 минут, может потребоваться изменить профиль автомасштабирования, чтобы уменьшить масштаб неиспользуемых узлов через 15 или 20 минут. Если не заданы другие параметры, при включении средства автомасштабирования кластера используется профиль по умолчанию.

Внимание

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

Параметры профиля автомасштабирования кластера

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

Параметр Описание: Default value
scan-interval Как часто кластер переоценен для увеличения или уменьшения масштаба. 10 seconds
scale-down-delay-after-add Сколько времени после увеличения масштаба это возобновление оценки уменьшения масштаба возобновляется. 10 минут
scale-down-delay-after-delete Как долго после удаления узла, которое возобновляет масштабирование оценки. scan-interval
scale-down-delay-after-failure Как долго после сбоя уменьшения масштаба, который возобновляет оценку уменьшения масштаба. три минуты.
scale-down-unneeded-time Как долго узел должен быть ненужным, прежде чем он имеет право на горизонтальное масштабирование. 10 минут
scale-down-unready-time Сколько времени нечитаемый узел должен быть ненужным, прежде чем он имеет право на масштабирование. 20 минут.
ignore-daemonsets-utilization (предварительная версия) Следует ли игнорировать модули pod DaemonSet при вычислении использования ресурсов для уменьшения масштаба. false
daemonset-eviction-for-empty-nodes (предварительная версия) Будут ли модули pod DaemonSet корректно завершаться с пустых узлов. false
daemonset-eviction-for-occupied-nodes (предварительная версия) Будут ли модули pod DaemonSet корректно завершаться с непустых узлов. true
scale-down-utilization-threshold Уровень использования узла, определенный как сумма запрошенных ресурсов, разделенных емкостью, в которой узел может рассматриваться для уменьшения масштаба. 0,5
max-graceful-termination-sec Максимальное время (в секундах), в течение которого средство автомасштабирования кластера ожидает завершения работы pod при попытке вертикального уменьшения масштаба узла. 600 секунд
balance-similar-node-groups Обнаруживает аналогичные пулы узлов и балансирует количество узлов между ними. false
expander Тип расширяющегося пула узлов, используемого в масштабировании. Возможные значения: most-pods, randomи least-wastepriority. random
skip-nodes-with-local-storage Если trueсредство автомасштабирования кластера не удаляет узлы с модулями pod с локальным хранилищем, например EmptyDir или HostPath. false
skip-nodes-with-system-pods Если trueсредство автомасштабирования кластера не удаляет узлы с модулями pod из kube-system (за исключением DaemonSet или модулей pod зеркало). true
max-empty-bulk-delete Максимальное количество пустых узлов, которые можно удалить одновременно. 10 узлов
new-pod-scale-up-delay В таких сценариях, как ускорение или пакетное масштабирование, в которых ЦС не требуется действовать до того, как планировщик Kubernetes может запланировать все модули pod, вы можете сообщить ЦС игнорировать незапланированные модули pod, прежде чем они достигают определенного возраста. 0 секунд
max-total-unready-percentage Максимальный процент непрочитанных узлов в кластере. После превышения этого процента ЦС останавливает операции. 45 %
max-node-provision-time Максимальное время, когда средство автомасштабирования ожидает подготовки узла. 15 минут
ok-total-unready-count Количество разрешенных непрочитанных узлов, независимо от максимального общего числа непрочитанных узлов. Три узла

Настройка профиля автомасштабирования кластера в новом кластере

  • Создайте кластер AKS с помощью az aks create команды и задайте профиль автомасштабирования кластера с помощью cluster-autoscaler-profile параметра.

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3 \
      --cluster-autoscaler-profile scan-interval=30s
    

Настройка профиля автомасштабирования кластера в существующем кластере

  • Задайте автомасштабирование кластера в существующем кластере с помощью az aks update команды и cluster-autoscaler-profile параметра. В следующем примере параметр интервала сканирования настраивается как 30s:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

Настройка профиля автомасштабирования кластера для агрессивного уменьшения масштаба

Примечание.

Горизонтальное масштабирование не рекомендуется для кластеров с частыми масштабированием и масштабированием в течение коротких интервалов, так как это может привести к увеличению времени подготовки узлов в этих обстоятельствах. Увеличение scale-down-delay-after-add может помочь в этих обстоятельствах, сохраняя узел вокруг больше времени для обработки входящих рабочих нагрузок.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Настройка профиля автомасштабирования кластера для временных рабочих нагрузок

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

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

  • Сброс профиля автомасштабирования кластера с помощью az aks update команды.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

Получение журналов и состояния средства автомасштабирования кластера

Журналы и обновления состояния можно получить из автомасштабирования кластера, чтобы помочь в диагностике и отладке событий автомасштабирования. AKS управляет средством автомасштабирования кластера от вашего имени и запускает его на управляемом уровне управления. Вы можете включить узел уровня управления для просмотра журналов и операций из автомасштабирования кластера.

  1. Настройте правило для журналов ресурсов для отправки журналов автомасштабирования кластера в Log Analytics с помощью приведенных ниже инструкций. Убедитесь, что поле проверка cluster-autoscaler при выборе параметров для журналов.

  2. Выберите раздел "Журнал" в кластере.

  3. Введите следующий пример запроса в Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    До тех пор, пока есть журналы для получения, вы увидите журналы, аналогичные следующим журналам:

    Снимок экрана: журналы Log Analytics.

  4. Просмотр событий автомасштабирования кластера без активации событий в CLI

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Просмотр событий предупреждения автомасштабирования кластера в CLI

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Средство автомасштабирования кластера также записывает состояние работоспособности в именованное configmapcluster-autoscaler-status. Эти журналы можно получить с помощью следующей kubectl команды:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Дополнительные сведения см. в разделе " Вопросы и ответы о проекте Kubernetes/autoscaler GitHub".

Метрики автомасштабирования кластера

Вы можете включить метрики плоскости управления (предварительная версия) для просмотра журналов и операций из автомасштабирования кластера с помощью управляемой службы Azure Monitor для надстройки Prometheus

Следующие шаги

В этой статье показано, как автоматически масштабировать количество узлов AKS. Также вы можете использовать средство горизонтального автомасштабирования pod для автоматической настройки числа pod, на которых выполняется приложение. Инструкции по использованию средства горизонтального автомасштабирования pod см. в статье Руководство. Масштабирование приложений в Службе Azure Kubernetes (AKS).

Дополнительные сведения об улучшении использования ресурсов кластера и освобождении ресурсов ЦП и памяти для других модулей pod см. в статье "Автомасштабирование по вертикали pod".