Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как настроить пулы узлов для автоматической подготовки узлов (NAP) в службе Azure Kubernetes (AKS), включая селекторы SKU, ограничения ресурсов и вес приоритета. Он также содержит примеры, которые помогут вам приступить к работе.
Обзор пулов узлов в NAP
NAP использует требования SKU виртуальной машины для выбора лучших виртуальных машин для ожидающих рабочих нагрузок. Вы можете настроить:
- Семейства SKU и определенные типы экземпляров.
- Ограничения ресурсов и приоритеты.
- Точечные экземпляры или экземпляры по запросу.
- Требования к архитектуре и возможностям.
Ресурс NodePool определяет ограничения для узлов, создаваемых NAP, и для подов, работающих на этих узлах. При первой установке NAP создается значение по умолчанию NodePool. Этот пул узлов можно изменить или создать дополнительные пулы узлов в соответствии с требованиями рабочей нагрузки.
Ключевые NodePools характеристики в NAP
При настройке NodePools для NAP следует учитывать следующее поведение:
- Для работы NAP требуется по крайней мере один
NodePool. - NAP оценивает каждый настроенный
NodePoolпараметр. - NAP пропускает
NodePoolsс запятыми не допускается модулем pod. - NAP применяет ограничения запуска к подготовленным узлам, но не требует допуска pod.
- NAP лучше всего работает с взаимоисключающими
NodePools. При нескольких совпадениях используется тот, который имеет наибольшийNodePoolsвес.
Проверка конфигурации пула узлов по умолчанию
Конфигурация Карпентера NodePool по умолчанию, созданного default NAP, выглядит следующим образом:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
template:
spec:
nodeClassRef:
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
Он также создает system-surge пул узлов, который помогает выполнять автомасштабирование узлов системного пула.
Управление конфигурацией пула узлов по умолчанию во время создания кластера
При создании нового кластера AKS с поддержкой NAP с помощью Azure CLI можно включить --node-provisioning-default-pools флаг, чтобы управлять конфигурацией NAP по умолчанию NodePool.
Флаг --node-provisioning-default-pools управляет конфигурацией NAP NodePool по умолчанию и принимает следующие значения:
-
Auto(по умолчанию): создает два стандартаNodePoolsдля немедленного использования. -
None: не создает никакихNodePools. Необходимо определить свой собственный.
Предупреждение
Переход с Auto на None: если вы измените параметр с на Auto в существующем кластере, настройки None по умолчанию не удаляются автоматически. Их необходимо удалить вручную, если они больше не нужны.
Параметры конфигурации пула узлов
В следующих разделах описаны различные параметры конфигурации в NodePools NAP, включая известные метки и селекторы SKU, ограничения пула узлов и вес пула узлов.
Известные метки и селекторы SKU
Kubernetes определяет известные метки , которые реализует Azure. Эти метки можно определить в spec.requirements разделе NodePool API. NAP также поддерживает метки, относящиеся к Azure, для более расширенного планирования.
karpenter.azure.com Селекторы SKU
В следующей таблице перечислены karpenter.azure.com селекторы SKU, которые можно использовать в spec.requirements разделе вашего NodePool API для определения характеристик виртуальных машин для ваших узлов.
| Selector | Description | Example |
|---|---|---|
karpenter.azure.com/sku-family |
Семейство SKU виртуальной машины | D, F, L и т. д. |
karpenter.azure.com/sku-name |
Явное имя SKU | Standard_A1_v2 |
karpenter.azure.com/sku-version |
Версия SKU (без "v", может использовать 1) | 1, 2 |
karpenter.sh/capacity-type |
Тип выделения виртуальной машины (Spot/On-demand) | Пятно |
karpenter.azure.com/sku-cpu |
Количество ЦП в виртуальной машине | 16 |
karpenter.azure.com/sku-memory |
Объем памяти в виртуальной машине (в МиБ) | 131072 |
kubernetes.azure.com/sku-cpu |
Количество ЦП в виртуальной машине | 16 |
kubernetes.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.io известные метки
В следующей таблице перечислены kubernetes.io общеизвестные метки, которые можно использовать в spec.requirements разделе вашего NodePool API для определения характеристик узлов:
| Этикетка | Description | Example |
|---|---|---|
topology.kubernetes.io/zone |
Зоны доступности | [uksouth-1,uksouth-2,uksouth-3] |
kubernetes.io/os |
Операционная система | Линукс |
kubernetes.io/arch |
Архитектура ЦП (AMD64 или ARM64) | [amd64, arm64] |
Примеры семейства 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
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 account list-locations --output table команды Azure CLI.
Пример архитектуры
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. Можно также указать верхний предел ресурсов, которые использует пул узлов, указав ограничения в спецификации пула узлов. Например:
spec:
# Resource limits constrain the total size of the cluster.
# Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
limits:
cpu: "1000"
memory: 1000Gi
Вес пула узлов
При определении нескольких пулов узлов можно задать предпочтение того, где должна быть запланирована рабочая нагрузка, определив относительный вес в определениях пула узлов. Рассмотрим пример.
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
Дальнейшие шаги
Дополнительные сведения об автоматической подготовке узлов в AKS см. в следующих статьях: