Knooppunttaints gebruiken in een AKS-cluster dat is ingeschakeld door Een Azure Arc-cluster
Van toepassing op: Azure Local, versie 23H2
In dit artikel wordt beschreven hoe u knooppunttaints gebruikt in een AKS-cluster.
Overzicht
Het AKS-planningsmechanisme is verantwoordelijk voor het plaatsen van pods op knooppunten en is gebaseerd op de upstream Kubernetes scheduler, kube-scheduler. U kunt een pod beperken om op bepaalde knooppunten uit te voeren door het knooppunt opdracht te geven een set pods af te wijzen met behulp van knooppunttaints, die communiceren met de AKS-scheduler.
Knooppunt-taints werken door een knooppunt te markeren, zodat de scheduler voorkomt dat bepaalde pods op de gemarkeerde knooppunten worden geplaatst. U kunt toleranties op een pod plaatsen zodat de planner die pod op een knooppunt kan plannen met een overeenkomende taint. Taints en toleranties werken samen om te bepalen hoe de scheduler pods op knooppunten plaatst. Zie voorbeeldgebruiksvoorbeelden van taints en toleranties voor meer informatie.
Taints zijn sleutel-waardeparen met een effect. Er zijn drie waarden voor het effectveld bij het gebruik van knooppunttaints: NoExecute
, NoSchedule
en PreferNoSchedule
.
NoExecute
: Pods die al op het knooppunt worden uitgevoerd, worden onmiddellijk verwijderd als ze geen overeenkomende tolerantie hebben. Als een pod een overeenkomende tolerantie heeft, wordt deze mogelijk verwijderd alstolerationSeconds
deze is opgegeven.NoSchedule
: Alleen pods met een overeenkomende tolerantie worden op dit knooppunt geplaatst. Bestaande pods worden niet verwijderd.PreferNoSchedule
: De scheduler vermijdt het plaatsen van pods die geen overeenkomende tolerantie hebben.
Voordat u begint
- In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, kunt u er een maken met behulp van Azure CLI, Azure PowerShell of Azure Portal.
- Wanneer u een knooppuntgroep maakt, kunt u er taints aan toevoegen. Wanneer u een taint toevoegt, krijgen alle knooppunten in die knooppuntgroep die taint ook.
Belangrijk
U moet taints of labels toevoegen aan knooppunten voor de hele knooppuntgroep met behulp van az aksarc nodepool
. Het wordt afgeraden kubectl
taints of labels toe te passen op afzonderlijke knooppunten in een knooppuntgroep.
Taints van knooppuntgroep instellen
Maak een knooppuntgroep met een taint met behulp van de az aksarc nodepool add
opdracht. Geef de naam taintnp
op en gebruik de --node-taints
parameter die u wilt opgeven sku=gpu:NoSchedule
voor de taint:
az aksarc nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name taintnp \
--node-count 1 \
--node-taints sku=gpu:NoSchedule \
--no-wait
Controleer de status van de knooppuntgroep met behulp van de az aksarc nodepool list
opdracht:
az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster
In de volgende voorbeelduitvoer ziet u dat de taintnp
knooppuntgroep knooppunten maakt met de opgegeven nodeTaints
:
[
{
...
"count": 1,
...
"name": "taintnp",
...
"provisioningState": "Succeeded",
...
"nodeTaints": [
"sku=gpu:NoSchedule"
],
...
},
...
]
De taint-informatie is zichtbaar in Kubernetes voor het verwerken van planningsregels voor knooppunten. De Kubernetes-planner kan taints en toleranties gebruiken om te beperken welke workloads op knooppunten kunnen worden uitgevoerd.
- Een taint wordt toegepast op een knooppunt dat aangeeft dat alleen specifieke pods erop kunnen worden gepland.
- Vervolgens wordt een tolerantie toegepast op een pod waarmee ze de taint van een knooppunt kunnen 'tolereren'.
Toleranties voor knooppuntgroepen instellen
In de vorige stap hebt u de sku=gpu:NoSchedule
taint toegepast toen u de knooppuntgroep maakte. In het volgende YAML-manifest wordt een tolerantie gebruikt om de Kubernetes-scheduler toe te staan een NGINX-pod uit te voeren op een knooppunt in die knooppuntgroep:
Maak een bestand met de naam nginx-toleration.yaml en kopieer/plak het volgende voorbeeld 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"
Plan de pod met behulp van de kubectl apply
opdracht:
kubectl apply -f nginx-toleration.yaml
Het duurt enkele seconden om de pod te plannen en de NGINX-installatiekopie op te halen.
Controleer de status met behulp van de kubectl describe pod
opdracht:
kubectl describe pod mypod
In de volgende verkorte voorbeelduitvoer ziet u dat de sku=gpu:NoSchedule
tolerantie wordt toegepast. In de sectie Gebeurtenissen heeft de planner de pod toegewezen aan het moc-lbeof1gn6x3
knooppunt:
[...]
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
Alleen pods waarop deze tolerantie is toegepast, kunnen worden gepland op knooppunten in taintnp
. Alle andere pods worden gepland in de knooppuntgroep nodepool1 . Als u meer knooppuntgroepen maakt, kunt u taints en toleranties gebruiken om te beperken welke pods op deze knooppuntresources kunnen worden gepland.
Een clusterknooppuntgroep bijwerken om een knooppunt-taint toe te voegen
Werk een cluster bij om een knooppunt-taint toe te voegen met behulp van de az aksarc update
opdracht en de --node-taints
parameter die moet worden opgegeven sku=gpu:NoSchedule
voor de taint. Alle bestaande taints worden vervangen door de nieuwe waarden. De oude tainten worden verwijderd:
az aksarc update -g myResourceGroup --cluster-name myAKSCluster --name taintnp --node-taints "sku=gpu:NoSchedule"
Volgende stappen
- Labels gebruiken in een AKS-cluster met Azure Arc.