Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы обеспечить соответствие требованиям приложений в 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 минут. Если не заданы другие параметры, при включении средства автомасштабирования кластера используется профиль по умолчанию.
Внимание
Профиль автомасштабирования кластера влияет на все пулы узлов, использующие автомасштабирование кластера. Невозможно задать профиль автоскалирования для пула узлов. При настройке профиля все существующие пулы узлов с включенным автомасштабированием кластера немедленно начинают использовать профиль.
Параметры профиля автомасштабирования кластера
В следующей таблице перечислены доступные параметры для профиля автомасштабирования кластера:
Настройка | Описание: | Значение по умолчанию |
---|---|---|
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-waste priority . |
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 управляет средством автомасштабирования кластера от вашего имени и запускает его на управляемом уровне управления. Вы можете включить узел управляющей плоскости, чтобы видеть журналы и операции автомасштабировщика кластера.
Настройте правило для журналов ресурсов для отправки журналов автомасштабирования кластера в 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, на которых выполняется приложение. Инструкции по использованию горизонтального автомасштабирования подов см. в статье Масштабирование приложений в Службе Azure Kubernetes (AKS).
Дополнительные сведения об улучшении использования ресурсов кластера и освобождении ресурсов ЦП и памяти для других модулей pod см. в статье "Автомасштабирование по вертикали pod".
Azure Kubernetes Service