Sdílet prostřednictvím


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, NoSchedulea 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, pokud tolerationSeconds 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 nodeTaintskó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 taintnpnaplá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