Поделиться через


Использование автомасштабировщика кластеров в службе Azure Kubernetes (AKS)

Чтобы обеспечить соответствие требованиям приложений в 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 \
    --generate-ssh-keys
    

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

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

  • Обновите существующий кластер с помощью команды 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 минут. Если не заданы другие параметры, при включении средства автомасштабирования кластера используется профиль по умолчанию.

Внимание

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

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

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

Настройка Описание: Значение по умолчанию
scan-interval Как часто кластер переоценен для увеличения или уменьшения масштаба. 10 секунд
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 Следует ли игнорировать поды 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, средство автомасштабирования кластера не удаляет узлы с подами из kube-system (за исключением DaemonSet или зеркальных подов). true
max-empty-bulk-delete Максимальное количество пустых узлов, которые можно удалить одновременно. 10 узлов
new-pod-scale-up-delay В таких сценариях, как пиковое/пакетное масштабирование, когда не требуется, чтобы CA вмешивался до того, как планировщик Kubernetes сможет распределить все pod, вы можете указать CA игнорировать незапланированные pod, прежде чем они достигнут определенного возраста. 0 секунд
max-total-unready-percentage Максимальный процент неготовых узлов в кластере. После превышения этого процента ЦС останавливает операции. 45 %
max-node-provision-time Максимальное время, когда средство автомасштабирования ожидает подготовки узла. 15 минут
ok-total-unready-count Количество разрешенных непрочитанных узлов, независимо от максимального общего числа непрочитанных узлов. Три узла

Примечание.

Параметры ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes и daemonset-eviction-for-occupied-nodes доступны в общем доступе начиная с версии API 2024-05-01. Если вы используете CLI для обновления этих флагов, убедитесь, что вы используете версию 2.63 или более позднюю.

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

  • Создайте кластер 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 \
        --generate-ssh-keys
    

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

  • Задайте автомасштабирование кластера в существующем кластере с помощью 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=0m,scale-down-delay-after-failure=1m,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"
    
  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, на которых выполняется приложение. Инструкции по использованию горизонтального автомасштабирования подов см. в статье Масштабирование приложений в Службе Azure Kubernetes (AKS).

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