Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как включить или отключить автоматическую подготовку узлов (NAP) в Службе Azure Kubernetes (AKS) с помощью шаблонов Azure CLI или Azure Resource Manager (ARM).
Если вы хотите создать кластер AKS с поддержкой NAP с пользовательской виртуальной сетью и подсетями, см. статью "Создание кластера автоматической подготовки узла (NAP) в пользовательской виртуальной сети.
Перед тем как начать
Прежде чем приступить к работе, ознакомьтесь с обзором автоматической подготовки узлов (NAP) в статье AKS, в которой описано, как работает NAP, предварительные требования и ограничения.
Включение автоматической подготовки узла (NAP) в кластере AKS
В следующих разделах объясняется, как включить NAP в новом или существующем кластере AKS:
Замечание
Вы можете включить метрики плоскости управления для просмотра журналов и операций из автоматической подготовки узла с использованием управляемой службы Azure Monitor для дополнения Prometheus.
Включение NAP в новом кластере
Включите автоподготовку узлов в новом кластере с помощью команды
az aks create, у которой установлен флаг--node-provisioning-modeAuto. Следующая команда также задает--network-pluginвazure,--network-plugin-modeвoverlayи--network-dataplaneвcilium.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --node-provisioning-mode Auto \ --network-plugin azure \ --network-plugin-mode overlay \ --network-dataplane cilium \ --generate-ssh-keys
Создайте файл с именем
nap.jsonи добавьте следующую конфигурацию шаблона ARM, установив полеproperties.nodeProvisioningProfile.modeвAuto, что включает NAP. (Значение по умолчанию —Manual.){ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": {}, "parameters": {}, "resources": [ { "type": "Microsoft.ContainerService/managedClusters", "apiVersion": "2025-05-01", "sku": { "name": "Base", "tier": "Standard" }, "name": "napcluster", "location": "uksouth", "identity": { "type": "SystemAssigned" }, "properties": { "networkProfile": { "networkPlugin": "azure", "networkPluginMode": "overlay", "networkPolicy": "cilium", "networkDataplane":"cilium", "loadBalancerSku": "Standard" }, "dnsPrefix": "napcluster", "agentPoolProfiles": [ { "name": "agentpool", "count": 3, "vmSize": "standard_d2s_v3", "osType": "Linux", "mode": "System" } ], "nodeProvisioningProfile": { "mode": "Auto" } } } ] }Включите автоподготовку узлов в новом кластере, используя команду
az deployment group createс флагом--template-file, установленным на путь к файлу шаблона ARM.az deployment group create --resource-group $RESOURCE_GROUP --template-file ./nap.json
Включение NAP в существующем кластере
Включите автоматическое ограничение узлов в существующем кластере, используя команду
az aks updateс флагом--node-provisioning-mode, установленным наAuto.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --node-provisioning-mode Auto
Отключение автоматической подготовки узла (NAP) в кластере AKS
Это важно
Вы можете отключить NAP только в кластере, если выполнены следующие условия:
- Нет существующих узлов NAP. С помощью
kubectl get nodes -l karpenter.sh/nodepoolкоманды можно проверить наличие существующих узлов, управляемых NAP. - Все существующие Karpenter
NodePoolsимеют в полеspec.limits.cpuзначение0. Это действие предотвращает создание новых узлов, но не нарушает текущий запуск узлов.
Задайте поле
spec.limits.cpuзначением0для каждого существующего KarpenterNodePool. Рассмотрим пример.apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: limits: cpu: 0Это важно
Если вы не хотите убедиться, что каждый модуль pod, ранее запущенный на узле NAP, безопасно переносится на узел, отличный от NAP, перед отключением NAP можно пропустить шаги 2 и 3 и вместо этого использовать
kubectl delete nodeкоманду для каждого управляемого NAP узла. Тем не менее, мы не рекомендуем пропускать эти шаги, так как это может оставить некоторые pod в состоянии ожидания и не учитывает бюджеты прерываний Pod (PDBs).При использовании
kubectl delete nodeкоманды будьте осторожны, чтобы удалить только узлы, управляемые NAP. Вы можете определить узлы, управляемые NAP, с помощьюkubectl get nodes -l karpenter.sh/nodepoolкоманды.Добавьте
karpenter.azure.com/disable:NoScheduleметку на каждый KarpenterNodePool. Рассмотрим пример.apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: template: spec: ... taints: - key: karpenter.azure.com/disable effect: NoScheduleЭто действие запускает процесс миграции рабочих нагрузок с узлов, управляемых NAP, на узлы, не управляющиеся NAP, с учетом ПДБ и ограничений на нарушения. Модули Pod переносятся на узлы, отличные от NAP, если они могут соответствовать. Если недостаточно мощностей фиксированного размера, некоторые узлы, управляемые NAP, остаются в сети.
Увеличьте масштаб существующего фиксированного размера
ManagedClusterAgentPoolsили создайте новый фиксированный размерAgentPools, чтобы взять на себя нагрузку с узлов, управляемых системой NAP. Так как эти узлы добавляются в кластер, узлы, управляемые NAP, удаляются, а работа переносится на узлы с фиксированным размером.Удалите все узлы, управляемые NAP, с помощью
kubectl get nodes -l karpenter.sh/nodepoolкоманды. Если узлы, управляемые NAP, по-прежнему существуют, кластер, скорее всего, не имеет емкости фиксированного размера. В этом случае необходимо добавить дополнительные узлы, чтобы остальные рабочие нагрузки могли быть перенесены.
Обновите режим NAP на
Manual, используя команду Azure CLI с флагом--node-provisioning-mode, установленным наManual.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --node-provisioning-mode Manual
Обновите поле
properties.nodeProvisioningProfile.modeнаManualв шаблоне ARM и повторно разверните его.{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": {}, "parameters": {}, "resources": [ { "type": "Microsoft.ContainerService/managedClusters", "apiVersion": "2025-05-01", "sku": { "name": "Base", "tier": "Standard" }, "name": "napcluster", "location": "uksouth", "identity": { "type": "SystemAssigned" }, "properties": { "networkProfile": { "networkPlugin": "azure", "networkPluginMode": "overlay", "networkPolicy": "cilium", "networkDataplane":"cilium", "loadBalancerSku": "Standard" }, "dnsPrefix": "napcluster", "agentPoolProfiles": [ { "name": "agentpool", "count": 3, "vmSize": "standard_d2s_v3", "osType": "Linux", "mode": "System" } ], "nodeProvisioningProfile": { "mode": "Manual" } } } ] }
Дальнейшие шаги
Дополнительные сведения об автоматической подготовке узлов в AKS см. в следующих статьях:
- Автоматическое предоставление узлов в вашей пользовательской виртуальной сети
- Настройка сети для автоматической подготовки узлов в AKS
- Настройка пулов узлов для автоматической подготовки узлов в AKS
- Настройка политик прерываний для автоматического предоставления узлов в AKS
- Обновление образов узлов для автоматического предоставления узлов в AKS