Использование средства автомасштабирования кластера в Службе контейнеров Azure
Чтобы обеспечить соответствие требованиям приложений в AKS, может потребоваться настроить количество узлов, выполняющих рабочие нагрузки. Компонент автомасштабирования кластера наблюдает за модулями pod в кластере, которые не могут быть запланированы из-за ограничений ресурсов. Когда средство автомасштабирования кластера обнаруживает проблемы, оно масштабирует число узлов в пуле узлов для удовлетворения требований приложения. Он также регулярно проверяет узлы на наличие нехватки запущенных модулей pod и масштабирует количество узлов по мере необходимости.
В этой статье показано, как включить автомасштабирование кластера и управлять ими в AKS, которая основана на версии Kubernetes с открытым исходным кодом.
Подготовка к работе
Для этой статьи требуется Azure CLI версии 2.0.76 или более поздней. Чтобы узнать версию, выполните команду az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Использование автомасштабирования кластера в кластере AKS
Внимание
Компонент Kubernetes является средством автомасштабирования кластера. Хотя для узлов в кластере AKS используется масштабируемый набор виртуальных машин, не включайте и не изменяйте вручную параметры автомасштабирования масштабируемого набора. Разрешите средству автомасштабирования кластера Kubernetes устанавливать необходимые параметры масштабирования. Дополнительные сведения см. в разделе часто задаваемых вопросов Можно ли изменять теги и другие свойства ресурсов AKS в группе ресурсов узла?.
Включение автомасштабирования кластера в новом кластере
Создайте группу ресурсов с помощью
az group create
команды.az group create --name myResourceGroup --location eastus
Создайте кластер 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 минут. Если не заданы другие параметры, при включении средства автомасштабирования кластера используется профиль по умолчанию.
Внимание
Профиль автомасштабирования кластера влияет на все пулы узлов, использующие автомасштабирование кластера. Такой профиль нельзя задать отдельно для каждого пула узлов. При настройке профиля все существующие пулы узлов с включенным автомасштабированием кластера немедленно начинают использовать профиль.
Параметры профиля автомасштабирования кластера
В следующей таблице перечислены доступные параметры для профиля автомасштабирования кластера:
Параметр | Описание: | 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-waste priority . |
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 |
Количество разрешенных непрочитанных узлов, независимо от максимального общего числа непрочитанных узлов. | Три узла |
Примечание.
Параметры 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 управляет средством автомасштабирования кластера от вашего имени и запускает его на управляемом уровне управления. Вы можете включить узел уровня управления для просмотра журналов и операций из автомасштабирования кластера.
Настройте правило для журналов ресурсов для отправки журналов автомасштабирования кластера в Log Analytics с помощью приведенных ниже инструкций. Установите флажок
cluster-autoscaler
при выборе параметров для журналов.Выберите раздел "Журнал" в кластере.
Введите следующий пример запроса в Log Analytics:
AzureDiagnostics | where Category == "cluster-autoscaler"
Просмотр событий автомасштабирования кластера без активации событий в CLI.
kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
Просмотр событий предупреждения автомасштабирования кластера в CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
Средство автомасштабирования кластера также записывает состояние работоспособности в именованное
configmap
cluster-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".
Azure Kubernetes Service