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


Использование параметров узла в AKS, включенном кластером Azure Arc

Область применения: Локальная версия Azure, версия 23H2

В этой статье описывается, как использовать тоны узлов в кластере AKS.

Обзор

Механизм планирования AKS отвечает за размещение модулей pod на узлах и основан на вышестоящем планировщике Kubernetes, планировщик kube-scheduler. Вы можете ограничить модуль pod для запуска на определенных узлах, указав узлу отклонить набор модулей pod с помощью параметров узла, которые взаимодействуют с планировщиком AKS.

Узлы запятнают работу, помечая узел, чтобы планировщик избегал размещения определенных модулей pod на помеченных узлах. Вы можете разместить терпимые методы в модуле pod, чтобы планировщик запланировать этот модуль на узле с соответствующими оттенками. Ограничения и терпимые элементы работают вместе, чтобы управлять тем, как планировщик помещает модули pod на узлы. Дополнительные сведения см . в примерах вариантов использования осложнений и толерации.

Оттенки — это пары "ключ-значение" с эффектом. При использовании параметров узла имеется три значения для поля эффекта: NoExecute, NoScheduleи PreferNoSchedule.

  • NoExecute: модули pod, уже работающие на узле, немедленно вытеснили, если они не имеют сопоставления. Если модуль pod имеет соответствующую терпимость, его можно вытеснить, если tolerationSeconds они указаны.
  • NoSchedule: на этом узле размещаются только модули pod с соответствующими терпимостями. Существующие модули pod не вытеснили.
  • PreferNoSchedule: планировщик избегает размещения любых модулей pod, которые не имеют сопоставления.

Подготовка к работе

  • В этой статье предполагается, что у вас есть существующий кластер AKS. Если вам нужен кластер AKS, можно создать его с помощью Azure CLI, Azure PowerShell или портал Azure.
  • При создании пула узлов можно добавить к нему фрагменты. При добавлении фрагмента все узлы в этом пуле узлов также получают этот фрагмент.

Внимание

Следует добавить фрагменты или метки в узлы для всего пула узлов с помощью az aksarc nodepool. Мы не рекомендуем применять kubectl фрагменты или метки к отдельным узлам в пуле узлов.

Настройка фрагментов пула узлов

Создайте пул узлов с запятой с помощью az aksarc nodepool add команды. Укажите имя taintnp и используйте --node-taints параметр, чтобы указать sku=gpu:NoSchedule для ненамеренного значения:

az aksarc nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name taintnp \
    --node-count 1 \
    --node-taints sku=gpu:NoSchedule \
    --no-wait

Проверьте состояние пула узлов с помощью az aksarc nodepool list команды:

az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster

В следующем примере выходных данных показано, что taintnp пул узлов создает узлы с указанным:nodeTaints

[
  {
    ...
    "count": 1,
    ...
    "name": "taintnp",
    ...
    "provisioningState": "Succeeded",
    ...
    "nodeTaints":  [
      "sku=gpu:NoSchedule"
    ],
    ...
  },
 ...
]

Сведения об отметках отображаются в Kubernetes для обработки правил планирования для узлов. Планировщик Kubernetes может использовать тоны и терпимые методы, чтобы ограничить рабочие нагрузки, которые могут выполняться на узлах.

  • Отметка применяется к узлу, указывая, что на него могут назначаться только определенные модули pod.
  • Затем к модуляции применяется модуль pod, который позволяет им "терпеть" ненавязчивый узел.

Настройка толерации пула узлов

На предыдущем шаге при создании пула узлов применена запятая sku=gpu:NoSchedule . В следующем примере манифест YAML использует терпимую передачу, чтобы планировщик Kubernetes выполнял pod NGINX на узле в этом пуле узлов:

Создайте файл nginx-toleration.yaml и скопируйте и вставьте следующий пример YAML:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
    name: mypod
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1
        memory: 2G
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Запланируйте модуль с помощью команды kubectl apply.

kubectl apply -f nginx-toleration.yaml

Планирование объекта Pod и извлечение образа NGINX займет несколько секунд.

Проверьте состояние с помощью kubectl describe pod команды:

kubectl describe pod mypod

В следующем сжатом примере выходных данных показано, что sku=gpu:NoSchedule применяется толерация. В разделе "События" планировщик назначил модуль pod moc-lbeof1gn6x3 узлу:

[...]
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
                 sku=gpu:NoSchedule
Events:
  Type    Reason     Age    From                Message
  ----    ------     ----   ----                -------
  Normal  Scheduled  54s  default-scheduler   Successfully assigned default/mypod to moc-lbeof1gn6x3
  Normal  Pulling    53s  kubelet             Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Pulled     48s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 3.025148695s (3.025157609s including waiting)
  Normal  Created    48s  kubelet             Created container
  Normal  Started    48s  kubelet             Started container

На узлах в узлах taintnpможно запланировать только модули pod, которые имеют эту терпимую возможность. Все остальные модули pod запланированы в пуле узлов nodepool1 . При создании дополнительных пулов узлов можно использовать тоны и терпимые элементы, чтобы ограничить запланированные модули pod на этих ресурсах узлов.

Обновление пула узлов кластера для добавления фрагмента узла

Обновите кластер, чтобы добавить запятую узла с помощью az aksarc update команды и --node-taints параметра, чтобы указать sku=gpu:NoSchedule для ненамеренного значения. Все существующие оттенки заменяются новыми значениями. Старые оттенки удаляются:

az aksarc update -g myResourceGroup --cluster-name myAKSCluster --name taintnp --node-taints "sku=gpu:NoSchedule"   

Следующие шаги