Knooppunttaints gebruiken in een AKS-cluster (Azure Kubernetes Service)
In dit artikel wordt beschreven hoe u knooppunttaints gebruikt in een AKS-cluster (Azure Kubernetes Service).
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 te worden uitgevoerd door de pods te koppelen aan een set knooppunten met behulp van knooppuntaffiniteit of door het knooppunt te instrueren een set pods te verwijderen 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.
Taint-opties voor knooppunten
Er zijn twee typen knooppunttaints die kunnen worden toegepast op uw AKS-knooppunten: taints van knooppunten en initialisatie-taints voor knooppunten.
- Knooppunttaints zijn bedoeld om permanent op het knooppunt te blijven voor het plannen van pods met knooppuntaffiniteit. Knooppunttaints kunnen alleen worden toegevoegd, bijgewerkt of verwijderd met behulp van de AKS-API.
- Taints voor knooppuntinitialisatie worden tijdens het opstarten op het knooppunt geplaatst en zijn bedoeld om tijdelijk te worden gebruikt, zoals in scenario's waarin u mogelijk extra tijd nodig hebt om uw knooppunten in te stellen. U kunt de initialisatie van knooppunten verwijderen met behulp van de Kubernetes-API en worden niet gegarandeerd tijdens de levenscyclus van het knooppunt. Ze worden pas weergegeven nadat een knooppunt is opgeschaald of bijgewerkt/hersteld. Nieuwe knooppunten hebben nog steeds de initialisatie-taint van het knooppunt na het schalen. Taints voor knooppuntinitialisatie worden weergegeven op alle knooppunten na de upgrade. Als u de initialisatie-taints volledig wilt verwijderen, kunt u ze verwijderen met behulp van de AKS-API nadat u de knooppunten hebt vastgemaakt met behulp van de Kubernetes-API. Zodra u de initialisatie-taints uit de clusterspecificatie verwijdert met behulp van de AKS-API, worden nieuwe knooppunten niet weergegeven met deze initialisatietaints. Als de initialisatie-taint nog steeds aanwezig is op bestaande knooppunten, kunt u deze permanent verwijderen door een upgradebewerking voor de knooppuntinstallatiekopieën uit te voeren.
Notitie
Taints en labels van knooppunten die worden toegepast met behulp van de API voor AKS-knooppuntgroepen kunnen niet worden gewijzigd vanuit de Kubernetes-API en omgekeerd. Wijzigingen in systeemtaints zijn niet toegestaan.
Dit geldt niet voor initialisatie-taints voor knooppunten.
Knooppunttaints gebruiken
Vereisten
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.
Een knooppuntgroep maken met een knooppunt-taint
Maak een knooppuntgroep met een taint met behulp van de
az aks nodepool add
opdracht en gebruik de--node-taints
parameter om op te gevensku=gpu:NoSchedule
voor de taint.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Een knooppuntgroep bijwerken om een knooppunt-taint toe te voegen
Werk een knooppuntgroep bij om een knooppunttaint toe te voegen met behulp van de
az aks nodepool update
opdracht en gebruik de--node-taints
parameter om op te gevensku=gpu:NoSchedule
voor de taint.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Initialisatie-taints van knooppunten gebruiken (preview)
Belangrijk
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
Vereisten en beperkingen
- U hebt de Azure CLI-versie
3.0.0b3
of hoger geïnstalleerd en geconfigureerd. Voeraz --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. - U kunt initialisatie-taints alleen toepassen via cluster maken of upgraden wanneer u de AKS-API gebruikt. Als u ARM-sjablonen gebruikt, kunt u knooppuntinitialisatie-taints opgeven tijdens het maken en bijwerken van knooppuntgroepen.
- U kunt initialisatie-taints niet toepassen op Windows-knooppuntgroepen met behulp van de Azure CLI.
De referenties voor uw cluster ophalen
Haal de referenties voor uw AKS-cluster op met behulp van de
az aks get-credentials
opdracht.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
aks-preview
De Azure CLI-extensie installeren
Registreer of werk de aks-preview-extensie bij met behulp van de
az extension add
ofaz extension update
opdracht.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
NodeInitializationTaintsPreview
De functievlag registreren
Registreer de
NodeInitializationTaintsPreview
functievlag met behulp van deaz feature register
opdracht.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.
Controleer de registratiestatus met behulp van de
az feature show
opdracht.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Wanneer de status Geregistreerd weergeeft, vernieuwt u de registratie van de Microsoft.ContainerService-resourceprovider met behulp van de
az provider register
opdracht.az provider register --namespace Microsoft.ContainerService
Een cluster maken met een knooppuntinitialisatie-taint
Maak een cluster met een initialisatie-taint voor knooppunten met behulp van de
az aks create
opdracht en de--node-initialization-taints
parameter die moet worden opgegevensku=gpu:NoSchedule
voor de taint.Belangrijk
De initialisatie-taints van het knooppunt die u opgeeft, zijn van toepassing op alle knooppuntgroepen in het cluster. Als u de initialisatie-taint wilt toepassen op een specifiek knooppunt, kunt u een ARM-sjabloon gebruiken in plaats van de CLI.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Een cluster bijwerken om een knooppuntinitialisatie-taint toe te voegen
Werk een cluster bij om een initialisatie-taint voor knooppunten toe te voegen met behulp van de
az aks update
opdracht en de--node-initialization-taints
parameter die moet worden opgegevensku=gpu:NoSchedule
voor de taint.Belangrijk
Wanneer u een cluster bijwerkt met een taint voor knooppuntinitialisatie, zijn de tainten van toepassing op alle knooppuntgroepen in het cluster. U kunt updates voor initialisatie van knooppunten op het knooppunt bekijken na een herinstallatiekopiebewerking.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
De status van de knooppuntgroep controleren
Nadat u de taint van het knooppunt of de initialisatie-taint hebt toegepast, controleert u de status van de knooppuntgroep met behulp van de
az aks nodepool list
opdracht.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
Als u knooppunttaints hebt toegepast, ziet u in de volgende voorbeelduitvoer dat de
<node-pool-name>
knooppuntgroep knooppunten isCreating
met de opgegevennodeTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Als u initialisatie-taints voor knooppunten hebt toegepast, ziet u in de volgende voorbeelduitvoer dat de
<node-pool-name>
knooppuntgroep knooppunten isCreating
met de opgegevennodeInitializationTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Controleer of de taint is ingesteld op het knooppunt
Controleer de taints van het knooppunt en de initialisatie-taints van het knooppunt in de knooppuntconfiguratie met behulp van de
kubectl describe node
opdracht.kubectl describe node $NODE_NAME
Als u knooppunttaints hebt toegepast, ziet u in de volgende voorbeelduitvoer dat de
<node-pool-name>
knooppuntgroep de opgegevenTaints
heeft:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Knooppunttainten verwijderen
Een specifieke knooppunt-taint verwijderen
Verwijder knooppunttaints met behulp van de
az aks nodepool update
opdracht. Met de volgende voorbeeldopdracht wordt de taint van het"sku=gpu:NoSchedule"
knooppunt uit de knooppuntgroep verwijderd.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Alle knooppunttainten verwijderen
Verwijder alle knooppunttaints uit een knooppuntgroep met behulp van de
az aks nodepool update
opdracht. Met de volgende voorbeeldopdracht verwijdert u alle knooppunttaints uit de knooppuntgroep.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Initialisatie-taints voor knooppunten verwijderen
U hebt de volgende opties om initialisatie-taints voor knooppunten uit het knooppunt te verwijderen:
- Verwijder knooppuntinitialisatie-taints tijdelijk met behulp van de Kubernetes-API. Als u ze op deze manier verwijdert, worden de taints opnieuw weergegeven nadat het knooppunt is geschaald of bijgewerkt. Nieuwe knooppunten hebben nog steeds de initialisatie-taint van het knooppunt na het schalen. Taints voor knooppuntinitialisatie worden weergegeven op alle knooppunten na de upgrade.
- Verwijder knooppuntinitialisatie-taints permanent door het knooppunt te verwijderen met behulp van de Kubernetes-API en vervolgens de taint te verwijderen met behulp van de AKS-API. Zodra de initialisatie-taints zijn verwijderd uit de clusterspecificatie met behulp van de AKS-API, zijn nieuw gemaakte knooppunten nadat de initialisatiebewerkingen geen initialisatie-taints meer hebben.
Wanneer u alle initialisatie-taint-exemplaren verwijdert uit knooppuntgroepreplica's, kan de bestaande initialisatie-taint opnieuw worden weergegeven na een upgrade met nieuwe initialisatie-taints.
Initialisatie-taints van knooppunten tijdelijk verwijderen
Verwijder knooppuntinitialisatie-taints tijdelijk met behulp van de
kubectl taint nodes
opdracht.Met deze opdracht wordt de taint alleen verwijderd uit het opgegeven knooppunt. Als u de taint uit elk knooppunt in de knooppuntgroep wilt verwijderen, moet u de opdracht uitvoeren voor elk knooppunt waaruit u de taint wilt verwijderen.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
Nadat het knooppunt is verwijderd, worden de initialisatie-taints opnieuw weergegeven nadat het knooppunt is geschaald of geupgraded.
Initialisatie-taints voor knooppunten permanent verwijderen
Volg de stappen in Initialisatie-tainten voor knooppunten tijdelijk verwijderen om de initialisatie-taint van het knooppunt te verwijderen met behulp van de Kubernetes-API.
Verwijder de taint uit het knooppunt met behulp van de AKS-API met behulp van de
az aks update
opdracht. Met deze opdracht verwijdert u de initialisatie-taint van het knooppunt uit elk knooppunt in het cluster.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Controleer of de taint is verwijderd uit het knooppunt
Controleer de taints van het knooppunt en de initialisatie-taints van het knooppunt in de knooppuntconfiguratie met behulp van de
kubectl describe node
opdracht.kubectl describe node $NODE_NAME
Als u een knooppunt-taint hebt verwijderd, ziet u in de volgende voorbeelduitvoer dat de
<node-pool-name>
knooppuntgroep de verwijderde taint niet heeft onderTaints
:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Volgende stappen
- Meer informatie over voorbeeldgebruiksvoorbeelden voor taints en toleranties.
- Meer informatie over aanbevolen procedures voor geavanceerde AKS-scheduler-functies.
- Meer informatie over Kubernetes-labels vindt u in de documentatie over Kubernetes-labels.
Azure Kubernetes Service