Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как настроить пулы узлов для автоматической подготовки узлов (NAP) в Azure Kubernetes Service (AKS), включая селекторы SKU, ограничения ресурсов и вес приоритета. Он также содержит примеры, которые помогут вам приступить к работе.
AkS Automatic включает NAP по умолчанию. Для кластеров AKS Standard необходимо включить NAP перед настройкой пулов узлов.
Как NAP выбирает виртуальные машины для пулов узлов
NAP использует требования SKU виртуальной машины для выбора лучших виртуальных машин для ожидающих рабочих нагрузок. Вы можете настроить:
- Семейства SKU и определенные типы экземпляров.
- Ограничения ресурсов и приоритеты.
- Точечные экземпляры или экземпляры по запросу.
- Требования к архитектуре, GPU и другим возможностям.
Ресурс NodePool определяет ограничения для узлов, создаваемых NAP, и для подов, работающих на этих узлах. Когда вы включаете NAP с конфигурацией пула узлов по умолчанию, заданной как Auto, создаются ресурсы пула узлов по умолчаниюNodePool. Эти пулы узлов можно изменить или создать дополнительные пулы узлов в соответствии с требованиями рабочей нагрузки.
Как NAP оценивает и выбирает пулы узлов
При настройке NodePools для NAP следует учитывать следующее поведение:
- Для работы NAP требуется по крайней мере один
NodePool. - NAP оценивает каждый настроенный
NodePoolпараметр. - NAP пропускает
NodePoolsс запятыми не допускается модулем pod. - NAP применяет ограничения запуска к подготовленным узлам, но не требует допуска pod.
- NAP лучше всего работает с взаимоисключающими
NodePoolsтребованиями, требования которых не перекрываются таким образом, чтобы каждый модуль pod соответствовал только одному пулу. При несколькихNodePoolsсовпадениях NAP использует один с наибольшим весом.
Проверка конфигурации пула узлов по умолчанию
Конфигурация Карпентера NodePool по умолчанию, созданного default NAP, выглядит следующим образом:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
template:
spec:
nodeClassRef:
group: karpenter.azure.com
kind: AKSNodeClass
name: default
expireAfter: Never
# Requirements that constrain the parameters of provisioned nodes.
# These requirements are combined with pod.spec.affinity.nodeAffinity rules.
# Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- key: kubernetes.io/os
operator: In
values:
- linux
- key: karpenter.sh/capacity-type
operator: In
values:
- on-demand
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
NAP также создает пул узлов system-surge, который предоставляет по запросу ресурсы Linux AMD64 для критически важных системных дополнений. Если ожидающий под допускает метку taint CriticalAddonsOnly=true:NoSchedule и соответствует требованиям пула, NAP может создать узел из этого пула. Узлы, созданные пулом, имеют метку kubernetes.azure.com/mode: system.
Управление пулами узлов по умолчанию
При создании нового кластера AKS с поддержкой NAP с помощью Azure CLI укажите флаг --node-provisioning-default-pools, чтобы определить, будет ли AKS создавать NodePools NAP по умолчанию. Этот флаг также можно использовать при az aks update включении NAP в существующем кластере.
Флаг --node-provisioning-default-pools принимает следующие значения:
-
Auto(по умолчанию): создает два стандартаNodePoolsдля немедленного использования. -
None: не создает никакихNodePools. Необходимо определить свой собственный.
Предупреждение
Переход с Auto на None: если вы измените параметр с на Auto в существующем кластере, настройки None по умолчанию не удаляются автоматически. Перед их удалением определите подходящую емкость замены для критически важных надстроек системы. Если они больше не нужны, необходимо удалить значение по умолчанию NodePools вручную.
Параметры конфигурации пула узлов
В следующих разделах описаны различные параметры конфигурации в NodePools NAP, включая известные метки и селекторы SKU, ограничения пула узлов и вес пула узлов.
Известные метки и селекторы SKU
Kubernetes определяет хорошо известные метки, которые реализует Azure. Эти метки можно определить в spec.requirements разделе NodePool API. NAP также поддерживает метки Azure для более продвинутого планирования.
В следующей таблице перечислены метки, которые можно использовать в spec.requirements разделе API для определения характеристик виртуальной NodePool машины для узлов:
| Selector | Description | Example |
|---|---|---|
karpenter.sh/capacity-type |
Тип выделения виртуальной машины (Spot/On-demand) | Пятно |
karpenter.azure.com/sku-family |
Семейство SKU виртуальной машины | D, F, L и т. д. |
karpenter.azure.com/sku-series |
Серия SKU виртуальной машины | Dpls_v6 |
karpenter.azure.com/sku-name |
Явное имя SKU | Standard_A1_v2 |
karpenter.azure.com/sku-version |
Версия SKU (без "v", может использовать 1) | 1, 2 |
karpenter.azure.com/sku-cpu |
Количество ЦП в виртуальной машине | 16 |
karpenter.azure.com/sku-memory |
Объем памяти в виртуальной машине (в МиБ) | 131072 |
karpenter.azure.com/sku-gpu-name |
Имя GPU | A100 |
karpenter.azure.com/sku-gpu-manufacturer |
Производитель GPU | NVIDIA |
karpenter.azure.com/sku-gpu-count |
Количество GPU на виртуальную машину | 2 |
karpenter.azure.com/sku-networking-accelerated |
Есть ли у виртуальной машины ускорение сети | [истина, ложь] |
karpenter.azure.com/sku-storage-premium-capable |
Поддерживает ли виртуальная машина хранилище операций ввода-вывода класса Premium | [истина, ложь] |
karpenter.azure.com/sku-storage-ephemeralos-maxsize |
Ограничение размера для временного диска операционной системы (ОС) в ГБ | 92 |
kubernetes.azure.com/sku-cpu |
Количество ЦП в виртуальной машине | 16 |
kubernetes.azure.com/sku-memory |
Объем памяти в виртуальной машине (в МиБ) | 131072 |
kubernetes.azure.com/cluster |
Имя кластера AKS | мой-кластер |
kubernetes.azure.com/mode |
Режим пула узлов | [система, пользователь] |
kubernetes.azure.com/priority |
Priority | [точка, обычный] |
kubernetes.azure.com/os-sku |
Номер SKU операционной системы | [Ubuntu, AzureLinux] |
kubernetes.azure.com/fips_enabled |
Включена ли функция FIPS | true |
topology.kubernetes.io/zone |
Зоны доступности | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os |
Операционная система | Линукс |
kubernetes.io/arch |
Архитектура ЦП (AMD64 или ARM64) | [amd64, arm64] |
Значения селектора памяти в этой таблице — это значения MiB, сообщаемые на узлах, созданных NAP. Перед добавлением селектора проверьте метки на узлах, чтобы подтвердить значение, используемое кластером.
Примеры семейства SKU
karpenter.azure.com/sku-family Селектор позволяет нацеливаться на определенные семейства VM.
| Семья | Description |
|---|---|
| Серия D | Виртуальные машины общего назначения с сбалансированным соотношением ЦП и памяти |
| Серия F | Оптимизированные для вычислений виртуальные машины с высоким соотношением ЦП и памяти |
| Серия E | Оптимизированные для памяти виртуальные машины для приложений с большим объемом памяти |
| Серия L | Оптимизированные для хранения виртуальные машины с высокой пропускной способностью диска |
| N-серия | Виртуальные машины с поддержкой GPU для ресурсоемких рабочих нагрузок |
Пример конфигурации с помощью семейства SKU:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- D
- F
Пример SKU GPU
Чтобы подготовить к использованию узлы NVIDIA GPU с помощью NAP, создайте NodePool, который выбирает размеры виртуальных машин с поддержкой GPU. Следующий пример позволяет NAP выбирать SKU графических процессоров NVIDIA серии N:
requirements:
- key: karpenter.azure.com/sku-family
operator: In
values:
- N
- key: karpenter.azure.com/sku-gpu-manufacturer
operator: In
values:
- nvidia
Если вы хотите, чтобы AKS устанавливал и управлял драйвером NVIDIA GPU, плагином устройства, экспортером метрик Data Center GPU Manager (DCGM) и сигналами состояния GPU на GPU-узлах, подготовленных с помощью NAP, настройте управляемые GPU в указанном документе AKSNodeClass. Дополнительные сведения см. в статье "Создание пула узлов GPU, управляемого AKS".
Примеры имен SKU
karpenter.azure.com/sku-name Селектор позволяет указать точный тип экземпляра виртуальной машины.
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
Примеры версий SKU
karpenter.azure.com/sku-version Селектор нацелен на определенные поколения SKU виртуальных машин.
requirements:
- key: karpenter.azure.com/sku-version
operator: In
values:
- "3" # v3 generation
- "5" # v5 generation
Пример зоны доступности
topology.kubernetes.io/zone Селектор позволяет указать зоны доступности для узлов.
requirements:
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
Замечание
Чтобы получить список размеров виртуальных машин, поддерживающих зоны доступности в регионе, используйте az vm list-skus команду с параметрами --location <region> --zone --output table . Убедитесь, что выбранный размер виртуальной машины поддерживает зоны в требованиях NodePool .
Пример архитектуры
kubernetes.io/arch Селектор позволяет указать архитектуру ЦП для узлов. NAP поддерживает оба узла amd64 и arm64.
requirements:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- arm64
Пример ОС
kubernetes.io/os Селектор позволяет указать операционную систему для узлов.
requirements:
- key: kubernetes.io/os
operator: In
values:
- linux
Пример типа емкости
karpenter.sh/capacity-type Селектор позволяет указать, следует ли использовать экземпляры Spot или On-Demand.
Замечание
NAP отдает предпочтение экземплярам Spot при указании как Spot, так и On-demand.
requirements:
- key: karpenter.sh/capacity-type
operator: In
values:
- spot
- on-demand
Ограничения пула узлов
По умолчанию NAP пытается запланировать рабочие нагрузки в пределах доступной квоты Azure. Для пула динамических узлов можно указать агрегированные ограничения ресурсов на всех узлах, подготовленных этим пулом. В следующем примере cpu: "1000" ограничивает пул 1000 ядер VCPU и memory: 1000Gi ограничивает его 1000 гибибайтами памяти:
spec:
# Resource limits constrain the total size of the node pool.
# Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
Вес пула узлов
Если у вас определено несколько пулов узлов, вы можете указать предпочтительное место для планирования рабочей нагрузки, задав относительный вес в определениях пулов узлов. Поле weight принимает целое число от 1 до 100, а более высокие значения дают пулу узлов более высокий приоритет. Если опущено weight, его значение фактически равно 0. Рассмотрим пример.
spec:
# Priority given to the node pool when the scheduler considers which to select.
# Higher weights indicate higher priority when comparing node pools.
# Specifying no weight is equivalent to specifying a weight of 0.
weight: 10
Пулы статических узлов
Пулы статических узлов поддерживают фиксированное число узлов, подготовленных NAP, указанное в поле replicas, независимо от потребности в подах. Чтобы изменить число узлов, явным образом масштабируйте NodePool, например, с помощью kubectl scalenodepool static-node-pool --replicas=7. Необязательное limits.nodes значение ограничивает явное масштабирование и временную емкость, созданную во время замены узла. Для статических пулов узлов nodes — это единственное поддерживаемое поле в разделе limits; нельзя задать ограничения для ЦП или памяти.
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: static-node-pool
spec:
replicas: 5
template:
spec:
requirements:
- key: karpenter.azure.com/sku-name
operator: In
values:
- Standard_D4s_v3
- Standard_F8s_v2
- key: topology.kubernetes.io/zone
operator: In
values:
- eastus-1
- eastus-2
- eastus-3
limits:
nodes: 10
Замечание
Для пулов статических узлов можно задать только nodes в limits поле. Нельзя задать ограничения ресурсов или weight, и консолидация сбоев не применяется. После создания NodePoolне удается переключить его между статическими и динамическими режимами, добавив или удалив replicas поле.
Дальнейшие шаги
Дополнительные сведения об автоматической подготовке узлов в AKS см. в следующих статьях: