Поделиться через


Настройка пулов узлов для автоматической подготовки узлов (NAP) в Azure Kubernetes Service (AKS)

В этой статье объясняется, как настроить пулы узлов для автоматической подготовки узлов (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 см. в следующих статьях: