Использование параметров узла в 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"
Следующие шаги
- Используйте метки в кластере AKS с поддержкой Azure Arc.