Použití taintů uzlů v AKS povoleném clusterem Azure Arc
Platí pro: Azure Local, verze 23H2
Tento článek popisuje, jak používat tainty uzlů v clusteru AKS.
Přehled
Plánovací mechanismus AKS zodpovídá za umístění podů na uzly a je založený na upstreamovém plánovači Kubernetes, kube-scheduleru. Pod můžete omezit tak, aby běžel na konkrétních uzlech tím, že uzlu dá pokyn, aby odmítl sadu podů pomocí taintů uzlů, které pracují s plánovačem AKS.
Tainty uzlů fungují tak, že označí uzel, aby plánovač zabránil umístění určitých podů na označené uzly. Tolerance můžete umístit na pod, aby plánovač naplánoval tento pod na uzlu s odpovídajícím taintem. Taints a tolerace spolupracují, aby vám pomohly řídit, jak plánovač umístí pody na uzly. Další informace najdete v příkladu případů použití taintů a tolerance.
Tainty jsou páry klíč-hodnota s efektem. Pole efektu má při použití taintů uzlů tři hodnoty: NoExecute
, NoSchedule
a PreferNoSchedule
.
NoExecute
: Pody, které už běží na uzlu, se okamžitě vyřadí, pokud nemají odpovídající tolerance. Pokud má pod odpovídající tolerance, může být vyřazen, pokudtolerationSeconds
jsou zadány.NoSchedule
: Na tomto uzlu se umístí pouze pody s odpovídajícími tolerancemi. Existující pody se nevyřadí.PreferNoSchedule
: Plánovač se vyhne umístění podů, které nemají odpovídající tolerance.
Než začnete
- Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, můžete ho vytvořit pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.
- Když vytvoříte fond uzlů, můžete do něj přidat tainty. Když přidáte taint, získají tento taint také všechny uzly v rámci fondu uzlů.
Důležité
K uzlům pro celý fond uzlů byste měli přidat tainty nebo popisky pomocí az aksarc nodepool
. Nedoporučujeme používat kubectl
tainty ani popisky u jednotlivých uzlů ve fondu uzlů.
Nastavení taintů fondu uzlů
Pomocí příkazu vytvořte fond uzlů s taintem az aksarc nodepool add
. Zadejte název taintnp
a pomocí parametru --node-taints
zadejte sku=gpu:NoSchedule
pro taint:
az aksarc nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name taintnp \
--node-count 1 \
--node-taints sku=gpu:NoSchedule \
--no-wait
Pomocí příkazu zkontrolujte stav fondu az aksarc nodepool list
uzlů:
az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster
Následující příklad výstupu ukazuje, že taintnp
fond uzlů vytváří uzly se zadaným nodeTaints
kódem:
[
{
...
"count": 1,
...
"name": "taintnp",
...
"provisioningState": "Succeeded",
...
"nodeTaints": [
"sku=gpu:NoSchedule"
],
...
},
...
]
Informace o taintu jsou viditelné v Kubernetes pro zpracování pravidel plánování pro uzly. Plánovač Kubernetes může používat tainty a tolerance k omezení úloh, které se můžou spouštět na uzlech.
- Taint se použije u uzlu, který označuje, že na nich lze naplánovat pouze konkrétní pody.
- Tolerance se pak použije na pod, který jim umožňuje "tolerovat" taint uzlu.
Nastavení tolerance fondu uzlů
V předchozím kroku jste použili sku=gpu:NoSchedule
taint při vytváření fondu uzlů. Následující příklad manifest YAML používá tolerance, aby plánovač Kubernetes mohl spustit pod NGINX na uzlu v tomto fondu uzlů:
Vytvořte soubor s názvem nginx-toleration.yaml a zkopírujte/vložte následující příklad 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"
Pomocí příkazu naplánujte pod kubectl apply
:
kubectl apply -f nginx-toleration.yaml
Naplánování podu a načtení image NGINX trvá několik sekund.
Pomocí příkazu zkontrolujte stav kubectl describe pod
:
kubectl describe pod mypod
Následující zhuštěný ukázkový výstup ukazuje, že sku=gpu:NoSchedule
se používá tolerance. V části Události plánovač přiřadil pod moc-lbeof1gn6x3
uzlu:
[...]
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
Na uzlech v uzlech v uzlu lze taintnp
naplánovat pouze pody, které mají toto tolerance. Všechny ostatní pody jsou naplánované ve fondu uzlů nodepool1 . Pokud vytváříte více fondů uzlů, můžete pomocí taintů a tolerance omezit, jaké pody je možné na těchto prostředcích uzlů naplánovat.
Aktualizace fondu uzlů clusteru pro přidání taintu uzlu uzlu
Aktualizujte cluster, aby pomocí příkazu a parametru --node-taints
pro sku=gpu:NoSchedule
taint přidal taint az aksarc update
uzlu. Všechny existující tainty se nahradí novými hodnotami. Staré tainty jsou odstraněny:
az aksarc update -g myResourceGroup --cluster-name myAKSCluster --name taintnp --node-taints "sku=gpu:NoSchedule"
Další kroky
- Používejte popisky v clusteru AKS s podporou Služby Azure Arc.