Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как включить или отключить автоматическую подготовку узла (NAP) в Azure Kubernetes Service (AKS) с помощью шаблонов Azure CLI или Azure Resource Manager (ARM).
Если вы хотите создать кластер AKS с поддержкой NAP с пользовательской виртуальной сетью и подсетями, см. статью "Создание кластера автоматической подготовки узла (NAP) в пользовательской виртуальной сети.
Перед тем как начать
Прежде чем приступить к работе, ознакомьтесь с обзором автоматической подготовки узлов (NAP) в статье AKS, в которой описано, как работает NAP, предварительные требования и ограничения.
Включение автоматической подготовки узла (NAP) в кластере AKS
В следующих разделах объясняется, как включить NAP в новом или существующем кластере AKS:
Замечание
Вы можете включить метрики управляющей плоскости, чтобы просмотреть журналы и операции автоподготовки узлов с помощью надстройки Azure Monitor Managed Service для 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 CLIaz aks update, установив флаг--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" } } } ] }
Переход с самостоятельно размещённого Karpenter с открытым исходным кодом на управляемое автоматическое выделение узлов (NAP)
Если Karpenter был установлен из Helm-чарта с открытым исходным кодом, вы по-прежнему можете включить NAP для своего кластера. В этих инструкциях предполагается, что чарт Helm Karpenter уже установлен.
Это важно
Перед началом миграции убедитесь, что у вас установлена последняя версия Karpenter. NAP всегда работает с последней версией.
Это важно
Будьте осторожны, чтобы не удалить CRD Karpenter в ходе этого процесса миграции. Если CRD удаляются, это приводит к удалению базовых объектов NodeClaim, что может нарушить работу ваших рабочих нагрузок.
Чтобы CRD Karpenter не были деинсталлированы на шаге 2, удалите метки и аннотации
managed-by=Helm.kubectl get crds -l app.kubernetes.io/managed-by=Helm -o name | grep karpenter.azure.com | xargs -I{} kubectl patch {} --type=json -p ' [ {"op":"remove","path":"/metadata/annotations/meta.helm.sh~1release-name"}, {"op":"remove","path":"/metadata/annotations/meta.helm.sh~1release-namespace"}, {"op":"remove","path":"/metadata/labels/app.kubernetes.io~1managed-by"} ]'Удалите чарт Helm, чтобы удалить объект Deployment, Service, Role и другие ресурсы, которые использует открытый код-проект Karpenter. На этом этапе Карпентер больше не реагирует на события масштабирования, но существующие узлы продолжают функционировать.
helm uninstall karpenter -n kube-system # If you installed Karpenter into a different namespace than kube-system, specify that here instead of kube-systemВключите NAP в кластере:
az aks update --name ${CLUSTER_NAME} --resource-group ${RESOURCE_GROUP} --node-provisioning-mode Auto --node-provisioning-default-pools NoneЭта команда отключает пулы узлов NodePools, используемые по умолчанию, поскольку у вас уже есть существующие NodePools и вы хотите продолжать использовать их. Если вы хотите включить пулы автоподготовки узлов по умолчанию, вы можете опустить
--node-provisioning-default-pools Noneиз командыaz aks update.Проверьте, что миграция завершена: когда
az aks updateиз шага 3 успешно завершится, миграция завершена. Вы также можете подтвердить, что миграция выполняется, проверив заметки на crD Karpenter. Вы должны увидеть:meta.helm.sh/release-name: aks-managed-karpenter-overlay-base meta.helm.sh/release-namespace: kube-systemНа этом этапе NAP включен, а автоматическое масштабирование должно возобновиться.
Мониторинг автоматического развертывания узла
Получение журналов и состояния Karpenter
Журналы и обновления состояния можно получить из Karpenter, чтобы помочь в диагностике и отладке событий, связанных с NAP. AKS управляет автоматическим предоставлением узлов от вашего имени и запускает этот процесс в управляемом контрольном уровне. Вы можете включить журналы контрольной плоскости для просмотра журналов и операций Karpenter в ходе автоматического предоставления узлов. Дополнительные сведения о журналах плоскости управления см. в документации по журналам плоскости управления AKS
Настройте правило для журналов ресурсов, чтобы отправлять журналы автозамещения узла в Log Analytics с помощью инструкций инструкции здесь. Убедитесь, что вы отметили флажок
node-auto-provisioningпри выборе параметров для журналов.Выберите раздел "Журнал" в кластере.
Введите следующий пример запроса в Log Analytics:
AKSControlPlane | where Category == "karpenter-events"Просмотр событий автоматической подготовки узла в CLI:
kubectl get events --field-selector source=karpenter-events
Метрики автоматической подготовки узла
Вы можете включить метрики плоскости управления (предварительная версия) чтобы просмотреть конкретные метрики и операции Karpenter из node auto-provisioning с помощью управляемой службы Azure Monitor для надстройки Prometheus.
Дальнейшие шаги
Дополнительные сведения об автоматической подготовке узлов в AKS см. в следующих статьях:
- Автоматическое предоставление узлов в вашей пользовательской виртуальной сети
- Настройка сети для автоматической подготовки узлов в AKS
- Настройка пулов узлов для автоматической подготовки узлов в AKS
- Настройка политик прерываний для автоматического предоставления узлов в AKS
- Обновление образов узлов для автоматического предоставления узлов в AKS