Автоматическое масштабирование кластера в соответствии с требованиями приложения в Службе контейнеров Azure

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

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

Перед началом

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

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

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

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

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

Оба этих средства могут уменьшать количество pod и узлов, когда в них отпадает надобность. Средство автомасштабирования кластера уменьшает количество узлов, если в течение определенного периода времени существует неиспользуемая емкость. Pod на узле, который будет удаляться, безопасно перемещаются средством автомасштабирования в другое расположение в том же кластере. Средство автомасштабирования кластера не сможет уменьшить масштаб, если pod невозможно переместить, например в следующих ситуациях:

  • если pod создан напрямую на узле, а не через объект контроллера, например в наборе развертывания или реплик;
  • если бюджет неработоспособности pod имеет слишком строгие условия и не допускает снижение числа pod ниже определенного порогового значения;
  • если pod использует селекторы узла или свойства удаления сходства, которые невозможно выполнить, так как они запланированы на другом узле.

Дополнительные сведения о причинах, которые препятствуют средству автомасштабирования вертикально уменьшать масштаб, описаны в разделе Какие типы pod могут помешать средству автомасштабирования кластера удалить узел?

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

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

Примечание

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

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

Если вам нужен новый кластер AKS, выполните команду az aks create. Чтобы включить и настроить средство автомасштабирования кластера в пуле узлов для этого кластера, примените параметр --enable-cluster-autoscaler и укажите минимальное ( --min-count) и максимальное ( --max-count) число узлов.

Важно!

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

В следующем примере создается кластер AKS с одним пулом узлов на базе масштабируемого набора виртуальных машин. Он также включает средство автомасштабирования кластера в пуле узлов для этого кластера и задает минимальное (1) и максимальное (3) число узлов.

# First create a resource group
az group create --name myResourceGroup --location eastus

# Now create the AKS cluster and enable the cluster autoscaler
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

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

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

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

Важно!

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

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

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

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

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

Важно!

Если в кластере AKS имеется несколько пулов узлов, перейдите в раздел об автомасштабировании с несколькими пулами агентов. Для изменения свойств конкретного пула узлов в кластерах с несколькими пулами агентов вместо az aks необходимо использовать набор команд az aks nodepool.

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

Чтобы изменить число узлов, используйте команду az aks update.

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

В приведенном выше примере число узлов в средстве автомасштабирования кластера обновляется в пуле с одним узлом в myAKSCluster до минимального (1) и максимального (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 Интервал между сбоем вертикального уменьшения масштаба и возобновлением оценки для его вертикального уменьшения 3 минуты
scale-down-unneeded-time Время простоя узла, по истечении которого допустимо вертикальное уменьшение масштаба 10 минут.
scale-down-unready-time Время простоя неготового узла, по истечении которого допустимо вертикальное уменьшение масштаба 20 минут
scale-down-utilization-threshold Уровень использования узла (сумма затребованных ресурсов, деленная на емкость), ниже которого допустимо вертикальное уменьшение масштаба 0,5
max-graceful-termination-sec Максимальное время (в секундах), в течение которого средство автомасштабирования кластера ожидает завершения работы pod при попытке вертикального уменьшения масштаба узла 600 секунд
balance-similar-node-groups Обнаружение схожих пулов узлов и балансировка количества узлов между ними false
expander Тип расширения пула узлов, который будет использоваться при вертикальном увеличении масштаба. Возможные значения: most-pods, random, least-waste, priority random
skip-nodes-with-local-storage Если установлено значение true, средство автомасштабирования кластера никогда не будет удалять узлы, содержащие pod с локальным хранилищем, например EmptyDir или HostPath false
skip-nodes-with-system-pods Если установлено значение true, средство автомасштабирования кластера никогда не будет удалять узлы с pod из kube-system (за исключением DaemonSet или зеркальных pod) Да
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 Число разрешенных непрочтенных узлов, независимо от значения max-total-unready-percentage 3 узла

Важно!

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

Для профиля автомасштабирования кластера требуется Azure CLI 2.11.1 или более поздней версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

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

Чтобы назначить профиль средства автомасштабирования кластера своему кластеру, используйте команду az aks update с параметром cluster-autoscaler-profile. В следующем примере для интервала сканирования в профиле задается значение 30 с.

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

Если включить средство автомасштабирования кластера (CA) в пулах узлов в кластере, для этих пулов узлов с включенным CA также будет использоваться профиль этого средства. Пример:

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

Важно!

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

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

При создании кластера можно также использовать параметр 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

Приведенная выше команда создает кластер AKS и определяет интервал сканирования в 30 секунд для профиля автомасштабирования в масштабе кластера. Команда также включает средство автомасштабирования кластера в начальном пуле узлов, устанавливает минимальное число узлов, равное 1, а максимальное — 3.

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

Чтобы сбросить профиль средства автомасштабирования кластера в кластере, используйте команду az aks update.

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

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

Когда отпадет потребность в средстве автомасштабирования кластера, его можно отключить с помощью команды 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.

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

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

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

Чтобы настроить принудительную отправку журналов из средства автомасштабирования кластера в Log Analytics, выполните следующие действия.

  1. Настройте правило для журналов ресурсов, чтобы журналы средства автоматического масштабирования кластера принудительно отправлялись в Log Analytics. Подробные инструкции приведены в этой статье. Не забудьте при выборе параметров в разделе "Журналы" установить флажок для cluster-autoscaler.
  2. На портале Azure щелкните раздел "Журналы" для своего кластера.
  3. Введите следующий пример запроса в Log Analytics:
AzureDiagnostics
| where Category == "cluster-autoscaler"

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

Журналы Log Analytics

Средство автомасштабирования кластера также записывает состояние работоспособности в файл configmap с именем cluster-autoscaler-status. Чтобы получить эти журналы, воспользуйтесь следующей командой kubectl. Для каждого пула узлов, настроенного в средстве автомасштабирования кластера, будет указано состояние работоспособности.

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

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

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

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

Приведенная ниже команда предполагает, что вы выполнили начальные инструкции, приведенные ранее в этом документе, и хотите обновить максимальное число имеющихся в пуле узлов с 3 до 5. Чтобы обновить параметры пула узлов, используйте команду 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 с помощью профиля автомасштабирования. Это позволит успешно провести автомасштабирование и при этом постараться сохранить размеры сбалансированных пулов узлов.

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

Kubernetes поддерживает горизонтальное автомасштабирование pod для изменения числа pod в развертывании в зависимости от использования ЦП или других выбранных метрик. Сервер метрик используется для предоставления сведений об использовании ресурсов в Kubernetes. Вы можете настроить горизонтальное автомасштабирование pod с помощью команды kubectl autoscale или манифеста. Дополнительные сведения об использовании горизонтального автомасштабирования pod см. в инструкциях по HorizontalPodAutoscaler.

Дальнейшие действия

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

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