Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как настроить AKSNodeClass ресурсы для определения параметров, относящихся к Azure, для автоматической подготовки узлов (NAP) в Службе Azure Kubernetes (AKS) с помощью Karpenter.
AKSNodeClass позволяет настраивать различные аспекты узлов, которые подготавливает Карпентер, например, образ виртуальной машины (VM), размер диска операционной системы (OS), максимальное количество pod на узел и конфигурации kubelet.
Это важно
Начиная с 30 ноября 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает или предоставляет обновления безопасности для Azure Linux 2.0. Образ узла Linux 2.0 Azure заморожен в выпуске 202512.06.0. Начиная с 31 марта 2026 г. образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Выполните миграцию в поддерживаемую версию Linux Azure, обновив пулы узлов до поддерживаемой версии Kubernetes или переключив ее на osSku AzureLinux3. Дополнительные сведения см. в вопросе о прекращении поддержки на GitHub и объявлении об устаревании обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.
Обзор ресурсов AKSNodeClass
AKSNodeClass ресурсы позволяют настроить параметры, относящиеся к Azure, для NAP. Каждый NodePool ресурс должен ссылаться на AKSNodeClass с использованием spec.template.spec.nodeClassRef. Вы можете иметь несколько NodePools, которые указывают на тот же AKSNodeClass, что позволяет совместно использовать общие конфигурации Azure в разных пулах узлов.
Конфигурация семейства образов
Поле imageFamily определяет образ виртуальной машины по умолчанию и логику начальной загрузки для узлов, подготовленных через AKSNodeClass. Если вы не указываете семейство образов, по умолчанию используется Ubuntu2204. Графические процессоры поддерживаются в обоих семействах образов в совместимых размерах виртуальных машин.
Поддерживаемые семейства образов
-
Ubuntu: Ubuntu 22.04 Long Term Support (LTS) — это дистрибутив Linux по умолчанию для узлов AKS. -
AzureLinux: Azure Linux — это альтернативный дистрибутив Linux корпорации Майкрософт для рабочих нагрузок AKS. Дополнительные сведения см. в документации по Azure Linux
Пример конфигурации семейства образов
В следующем примере конфигурируется AKSNodeClass, чтобы использовать семейство образов AzureLinux.
spec:
imageFamily: AzureLinux
Конфигурация образа узла, совместимого с FIPS
Вы также можете включить образы узлов, совместимые с Федеральным стандартом обработки информации (FIPS). Дополнительные сведения о FIPS в AKS см. в нашей документации по FIPS
Поле fipsMode по умолчанию имеет значение "Отключено" и может иметь следующие параметры:
- FIPS — выбор образов узлов, совместимых с FIPS
- Отключен - не используйте образы узлов, соответствующие требованиям FIPS
Следующий пример настраивает AKSNodeClass для выбора образов узлов, совместимых с FIPS, с помощью параметра fipsModeFIPS:
spec:
fipsMode: FIPS
Конфигурация подсети виртуальной сети
Поле vnetSubnetID указывает, какую подсеть виртуальной сети Azure следует использовать для подготовки сетевых интерфейсов узлов. Это поле необязательно. Если вы не указываете подсеть, NAP использует подсеть по умолчанию, настроенную во время установки Karpenter. Дополнительные сведения см. в разделе "Конфигурации подсети" для NAP.
Пример конфигурации подсети
Идентификатор подсети должен находиться в полном формате Azure Resource Manager (ARM), как показано в следующем примере:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Конфигурация размера диска ОС
Поле osDiskSizeGB указывает размер диска ОС в гигабайтах. Значение по умолчанию — 128 ГБ, а минимальное значение — 30 ГБ.
Рассмотрите более крупные размеры дисков ОС для рабочих нагрузок, которые:
- Храните значительные данные локально.
- Требуется дополнительное пространство для образов контейнеров.
- Имеют высокие требования к вводу-выводу диска
Пример конфигурации размера диска ОС
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Эфемерная конфигурация диска ОС
NAP автоматически использует временные диски ОС , если они доступны и подходят для запрошенного размера диска. Временные диски ОС обеспечивают более высокую производительность и снижение затрат по сравнению с управляемыми дисками.
Критерии выбора эфемерного диска
Система автоматически выбирает временные диски в следующих сценариях:
- Тип экземпляра виртуальной машины поддерживает диски эфемерной ОС.
- Эфемерная емкость диска больше или равна запрошенной
osDiskSizeGB. - Виртуальная машина имеет достаточную эфемерную емкость хранилища.
Если эти условия не выполнены, система возвращается к использованию управляемых дисков.
Эфемерные типы дисков и приоритетность
Виртуальные машины Azure могут иметь различные типы эфемерного хранилища. Система использует следующий порядок приоритета:
- Диски NVMe (высокая производительность)
- Кэшировать диски (сбалансированная производительность)
- Диски ресурсов (базовая производительность)
Пример эфемерной конфигурации диска
Требования к пулу узлов можно использовать для обеспечения достаточной эфемерной емкости дисков, как показано в следующем примере:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: ephemeral-disk-pool
spec:
template:
spec:
requirements:
- key: karpenter.azure.com/sku-storage-ephemeralos-maxsize
operator: Gt
values: ["128"] # Require ephemeral disk larger than 128 GB
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: my-node-class
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: my-node-class
spec:
osDiskSizeGB: 128 # This will use ephemeral disk if available and large enough
Эта конфигурация гарантирует, что выбраны только типы экземпляров виртуальных машин с временными дисками размером более 128 ГБ, гарантируя эфемерное использование дисков для указанного размера диска ОС.
Максимальная конфигурация модулей pod
Поле maxPods указывает максимальное количество модулей pod, которые можно запланировать на узле. Этот параметр влияет как на плотность кластера, так и на конфигурацию сети.
Минимальное значение maxPods равно 10, а максимальное значение — 250.
Поведение по умолчанию для maxPods
Поведение maxPods по умолчанию зависит от конфигурации сетевого подключаемого модуля. В следующей таблице перечислены значения по умолчанию:
| Конфигурация сетевого плагина | Значение по умолчанию maxPods для каждого узла |
|---|---|
| Azure CNI с стандартными сетями (версия 1 или NodeSubnet) | 30 |
| Azure CNI с оверлейной сетью | 250 |
| Нет (нет сетевого подключаемого модуля) | 250 |
| Другие конфигурации | 110 (стандартная версия Kubernetes по умолчанию) |
Пример конфигурации максимального количества подов
spec:
maxPods: 50 # Allow up to 50 pods per node
Конфигурация LocalDNS
LocalDNS развертывает DNS-прокси уровня узла, который разрешает dns-запросы ближе к рабочим нагрузкам, уменьшая задержку запросов и повышая устойчивость во время временных сбоев DNS. Дополнительные сведения см. в документации по LocalDNS. По умолчанию localDNS имеет значение "Отключено" и может быть настроено на следующие параметры:
-
Disabled(по умолчанию) — отключает функцию LocalDNS. Запросы DNS не разрешаются локально на узле. -
Preferred— AKS управляет включением LocalDNS в зависимости от версии Kubernetes в пуле узлов. Конфигурация всегда проверяется и включается, но LocalDNS не будет включен, если не используется правильная версия Kubernetes. -
Required— LocalDNS применяется в пуле узлов, если выполнены все необходимые условия. Если требования не выполнены, развертывание не удается.
Пример конфигурации LocalDNS
Вы можете настроить конфигурации LocalDNS, такие как vnetDNSOverrides и kubeDNSOverrides. Дополнительные сведения о поддерживаемых подключаемых модулях см. в разделе "Настройка LocalDNS".
spec:
LocalDNS:
mode: Required
vnetDNSOverrides:
- zone: "."
cacheDuration: "30s"
forwardDestination: VnetDNS
forwardPolicy: Random
maxConcurrent: 80
protocol: ForceTCP
queryLogging: Log
serveStale: Immediate
serveStaleDuration: "100s"
- zone: "cluster.local"
cacheDuration: "40s"
forwardDestination: VnetDNS
forwardPolicy: Sequential
maxConcurrent: 70
protocol: PreferUDP
queryLogging: Error
serveStale: Disable
serveStaleDuration: "30s"
kubeDNSOverrides:
- zone: "."
cacheDuration: "30s"
forwardDestination: ClusterCoreDNS
forwardPolicy: RoundRobin
maxConcurrent: 100
protocol: PreferUDP
queryLogging: Log
serveStale: Immediate
serveStaleDuration: "60s"
- zone: "cluster.local"
cacheDuration: "10s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 50
protocol: PreferUDP
queryLogging: Error
serveStale: Disable
serveStaleDuration: "30s"
Конфигурация Kubelet
В kubelet этом разделе можно настроить различные параметры kubelet, влияющие на поведение узла. Эти параметры являются типичными аргументами kubelet, поэтому поставщик Azure просто передает их в kubelet на узле.
Это важно
Сначала настройте параметры kubelet и проверьте все изменения в непроизводственных средах.
Управление ЦП
Следующие параметры управляют поведением управления ЦП для kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: определяет, как kubelet выделяет ресурсы ЦП. Установите на"static"для закрепления ЦП в нагрузках, чувствительных к задержке. -
cpuCFSQuota: включает принудительное применение квоты ЦП (CFS) для контейнеров, определяющих ограничения ЦП. -
cpuCFSQuotaPeriod: задает период квоты ЦП CFS.
Сборка мусора изображения
Следующие параметры определяют поведение сбора мусора образов в kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
Эти параметры определяют, когда kubelet выполняет сборку мусора образов контейнеров:
-
imageGCHighThresholdPercent: процент использования диска, при котором активируется очистка ненужных образов. -
imageGCLowThresholdPercent: целевой процент использования диска после сборки мусора.
Управление топологией
Следующий параметр управляет политикой диспетчера топологий для kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
Диспетчер топологий помогает координировать выделение ресурсов для рабочих нагрузок с учетом задержки между ресурсами ЦП и устройств (например, GPU).
Конфигурация системы
Следующие параметры позволяют настроить дополнительные системные параметры для kubelet:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctls: список разрешенных небезопасных системных списков, которые могут использовать модули pod. -
containerLogMaxSize: Максимальный размер файлов журнала контейнера перед ротацией. -
containerLogMaxFiles: максимальное количество сохраненных файлов журнала контейнеров. -
podPidsLimit: максимальное число процессов, разрешённых в любом pod.
Конфигурация тегов ресурсов Azure
Вы можете указать теги ресурсов Azure, которые применяются ко всем экземплярам виртуальных машин, созданным с помощью определенного AKSNodeClass ресурса. Теги полезны для отслеживания затрат, организации ресурсов и требований соответствия требованиям.
Ограничения тегов
- Теги ресурсов Azure имеют ограничение в 50 тегов на ресурс.
- Имена тегов не учитывают регистр, но значения тегов чувствительны к регистру.
- Azure резервирует некоторые имена тегов, которые нельзя использовать. Дополнительные сведения см. в руководстве по тегам и ограничениях.
Пример конфигурации тегов
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
Полный AKSNodeClass пример конфигурации
В следующем примере показана полная AKSNodeClass конфигурация, которая включает все параметры, описанные в этой статье:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
nodeClassRef:
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
name: comprehensive-example
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
name: comprehensive-example
spec:
# Image family configuration
# Default: Ubuntu
# Valid values: Ubuntu, AzureLinux
imageFamily: Ubuntu
# FIPS compliant mode - allows support for FIPS-compliant node images
# Default: Disabled
# Valid values: FIPS, Disabled
fipsMode: Disabled
# LocalDNS mode - allows use of LocalDNS feature
# Default: Disabled
# Valid values: Preferred, Required, Disabled
LocalDNS:
mode: Disabled
# additional details on vnetDNSOverrides and kubeDNSOverrides can be added here
# Virtual network subnet configuration (optional)
# If not specified, uses the default --vnet-subnet-id from Karpenter installation
vnetSubnetID: "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"
# OS disk size configuration
# Default: 128 GB
# Minimum: 30 GB
osDiskSizeGB: 128
# Maximum pods per node configuration
# Default behavior depends on network plugin:
# - Azure CNI with standard networking: 30 pods
# - Azure CNI with overlay networking: 250 pods
# - Other configurations: 110 pods
# Range: 10-250
maxPods: 30
# Azure resource tags (optional)
# Applied to all VM instances created with this AKSNodeClass
tags:
Environment: "production"
Team: "platform-team"
Application: "web-service"
CostCenter: "engineering"
# Kubelet configuration (optional)
# All fields are optional with sensible defaults
kubelet:
# CPU management policy
# Default: "none"
# Valid values: none, static
cpuManagerPolicy: "static"
# CPU CFS quota enforcement
# Default: true
cpuCFSQuota: true
# CPU CFS quota period
# Default: "100ms"
cpuCFSQuotaPeriod: "100ms"
# Image garbage collection thresholds
# imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent
# Range: 0-100
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
# Topology manager policy
# Default: "none"
# Valid values: none, restricted, best-effort, single-numa-node
topologyManagerPolicy: "best-effort"
# Allowed unsafe sysctls (optional)
# Comma-separated list of unsafe sysctls or patterns
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
# Container log configuration
# containerLogMaxSize default: "50Mi"
containerLogMaxSize: "50Mi"
# containerLogMaxFiles default: 5, minimum: 2
containerLogMaxFiles: 5
# Pod process limits
# Default: -1 (unlimited)
podPidsLimit: 4096
Дальнейшие шаги
Дополнительные сведения об автоматической подготовке узлов в AKS см. в следующих статьях: