Använda nodtaints i ett AKS-kluster (Azure Kubernetes Service)
Den här artikeln beskriver hur du använder nodtaints i ett AKS-kluster (Azure Kubernetes Service).
Översikt
AKS-schemaläggningsmekanismen ansvarar för att placera poddar på noder och baseras på den överordnade Kubernetes-schemaläggaren kube-scheduler. Du kan begränsa att en podd körs på vissa noder genom att koppla poddarna till en uppsättning noder med hjälp av nodtillhörighet eller genom att instruera noden att avvisa en uppsättning poddar med hjälp av nodtaints, som interagerar med AKS-schemaläggaren.
Nodtaints fungerar genom att markera en nod så att schemaläggaren undviker att placera vissa poddar på de markerade noderna. Du kan placera toleranser på en podd så att schemaläggaren kan schemalägga podden på en nod med matchande taint. Taints och toleranser fungerar tillsammans för att hjälpa dig att styra hur schemaläggaren placerar poddar på noder. Mer information finns i exempel på användningsfall av taints och toleranser.
Taints är nyckel/värde-par med en effekt. Det finns tre värden för effektfältet när du använder nodtaints: NoExecute
, NoSchedule
och PreferNoSchedule
.
NoExecute
: Poddar som redan körs på noden avlägsnas omedelbart om de inte har någon matchande tolerans. Om en podd har en matchande tolerans kan den avlägsnas omtolerationSeconds
den anges.NoSchedule
: Endast poddar med matchande tolerans placeras på den här noden. Befintliga poddar avlägsnas inte.PreferNoSchedule
: Schemaläggaren undviker att placera poddar som inte har någon matchande tolerans.
Alternativ för nodtaint
Det finns två typer av nodtaints som kan tillämpas på dina AKS-noder: nodtaints och nodinitieringsfläckar.
- Nodtaints är avsedda att finnas permanent på noden för schemaläggning av poddar med nodtillhörighet. Nodtaints kan bara läggas till, uppdateras eller tas bort helt med hjälp av AKS-API:et.
- Taint för nodinitiering placeras på noden vid starttiden och är avsedda att användas tillfälligt, till exempel i scenarier där du kan behöva extra tid för att konfigurera noderna. Du kan ta bort taint för nodinitiering med kubernetes-API:et och garanteras inte under nodlivscykeln. De visas först när en nod har skalats upp eller uppgraderats/omskapats. Nya noder har fortfarande nodinitieringsfliken efter skalning. Taint för nodinitiering visas på alla noder efter uppgraderingen. Om du vill ta bort initieringstainterna helt kan du ta bort dem med hjälp av AKS-API:et när du har avlägsnat noderna med kubernetes-API:et. När du tar bort initieringsflikarna från klusterspecifikationen med hjälp av AKS-API:et kommer nyligen skapade noder inte med dessa initieringsfläckar. Om initieringsfliken fortfarande finns på befintliga noder kan du ta bort den permanent genom att utföra en uppgraderingsåtgärd för nodavbildningen.
Kommentar
Nodtaints och etiketter som används med hjälp av API:et för AKS-nodpoolen kan inte ändras från Kubernetes API och vice versa. Ändringar av systemtaints tillåts inte.
Detta gäller inte för nodinitieringsflikar.
Använda nodtaints
Förutsättningar
Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du behöver ett AKS-kluster kan du skapa ett med hjälp av Azure CLI, Azure PowerShell eller Azure Portal.
Skapa en nodpool med en nodtaint
Skapa en nodpool med en taint med kommandot
az aks nodepool add
och använd parametern--node-taints
för att angesku=gpu:NoSchedule
för 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
Kontrollera nodpoolens status.
Uppdatera en nodpool för att lägga till en nodtaint
Uppdatera en nodpool för att lägga till en nodtaint med kommandot
az aks nodepool update
och använd parametern--node-taints
för att angesku=gpu:NoSchedule
för 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
Kontrollera nodpoolens status.
Använda taint för nodinitiering (förhandsversion)
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Förutsättningar och begränsningar
- Du behöver Azure CLI-versionen
3.0.0b3
eller senare installerad och konfigurerad. Köraz --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. - Du kan bara använda initieringsflikar via skapa eller uppgradera kluster när du använder AKS-API:et. Om du använder ARM-mallar kan du ange nodinitieringsflikar när nodpoolen skapas och uppdateras.
- Du kan inte tillämpa initieringsfläckar på Windows-nodpooler med hjälp av Azure CLI.
Hämta autentiseringsuppgifterna för klustret
Hämta autentiseringsuppgifterna för AKS-klustret med hjälp av
az aks get-credentials
kommandot .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Installera Azure CLI-tillägget aks-preview
Registrera eller uppdatera aks-preview-tillägget med hjälp av
az extension add
kommandot elleraz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registrera funktionsflaggan NodeInitializationTaintsPreview
Registrera funktionsflaggan
NodeInitializationTaintsPreview
az feature register
med kommandot .az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Det tar några minuter för statusen att visa Registrerad.
Kontrollera registreringsstatusen
az feature show
med kommandot .az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
När statusen visar Registrerad uppdaterar du registreringen av resursprovidern Microsoft.ContainerService med hjälp av
az provider register
kommandot .az provider register --namespace Microsoft.ContainerService
Skapa ett kluster med en taint för nodinitiering
Skapa ett kluster med en taint för nodinitiering med hjälp av
az aks create
kommandot och parametern--node-initialization-taints
för att angesku=gpu:NoSchedule
för taint.Viktigt!
De nodinitieringsflikar som du anger gäller för alla nodpooler i klustret. Om du vill använda initieringsfliken på en specifik nod kan du använda en ARM-mall i stället för CLI.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Kontrollera nodpoolens status.
Uppdatera ett kluster för att lägga till en nodinitieringstaint
Uppdatera ett kluster för att lägga till en taint för nodinitiering med hjälp av
az aks update
kommandot och parametern--node-initialization-taints
för att angesku=gpu:NoSchedule
för taint.Viktigt!
När du uppdaterar ett kluster med en nodinitieringstaint gäller tainterna för alla nodpooler i klustret. Du kan visa uppdateringar av nodinitieringsflikar på noden efter en omimeringsåtgärd.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Kontrollera nodpoolens status.
Kontrollera status för nodpoolen
När du har tillämpat nodtaint eller initieringstaint kontrollerar du statusen för nodpoolen
az aks nodepool list
med kommandot .az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
Om du har tillämpat nodtaints visar följande exempelutdata att nodpoolen
<node-pool-name>
ärCreating
noder med angivetnodeTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Om du har använt taints för nodinitiering visar följande exempelutdata att nodpoolen
<node-pool-name>
ärCreating
noder med angivnanodeInitializationTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Kontrollera att taint har angetts på noden
Kontrollera nodtainterna och nodinitieringsflikarna i nodkonfigurationen
kubectl describe node
med hjälp av kommandot .kubectl describe node $NODE_NAME
Om du har tillämpat nodtaints visar följande exempelutdata att nodpoolen
<node-pool-name>
har den angivnaTaints
:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Ta bort nodtaints
Ta bort en specifik nodtaint
Ta bort nodtaints med kommandot
az aks nodepool update
. Följande exempelkommando tar"sku=gpu:NoSchedule"
bort nodtainten från nodpoolen.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Ta bort alla nodtaints
Ta bort alla nodtaints från en nodpool med kommandot
az aks nodepool update
. Följande exempelkommando tar bort alla nodtaints från nodpoolen.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Ta bort ta bort taint för nodinitiering
Du har följande alternativ för att ta bort nodinitieringsfläckar från noden:
- Ta bort nodinitieringsflikar tillfälligt med kubernetes-API:et. Om du tar bort dem på det här sättet visas taints igen efter att nodskalning eller uppgradering har inträffat. Nya noder har fortfarande nodinitieringsfliken efter skalning. Taint för nodinitiering visas på alla noder efter uppgraderingen.
- Ta bort nodinitieringsflikar permanent genom att ta bort noden med kubernetes-API:et och sedan ta bort taint med hjälp av AKS-API:et. När initieringstainterna har tagits bort från klusterspecifikationen med hjälp av AKS-API:et har nyligen skapade noder efter omimeringsåtgärder inte längre initieringsflikar.
När du tar bort alla initieringstaint-förekomster från nodpoolrepliker kan den befintliga initieringstainten visas igen efter en uppgradering med eventuella nya initieringstaint.
Ta bort ta bort taints för nodinitiering tillfälligt
Ta bort nodinitieringsflikar tillfälligt med kommandot
kubectl taint nodes
.Det här kommandot tar bort taint från endast den angivna noden. Om du vill ta bort taint från varje nod i nodpoolen måste du köra kommandot för varje nod som du vill att tainten ska tas bort från.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
När den har tagits bort visas tainterna för nodinitiering igen när nodskalning eller uppgradering sker.
Ta bort nodinitieringsflikar permanent
Följ stegen i Ta bort nodinitieringsflikar tillfälligt för att ta bort taint för nodinitiering med kubernetes-API:et.
Ta bort taint från noden med hjälp av AKS-API:et
az aks update
med kommandot . Det här kommandot tar bort nodinitieringsfliken från varje nod i klustret.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Kontrollera att taint har tagits bort från noden
Kontrollera nodtainterna och nodinitieringsflikarna i nodkonfigurationen
kubectl describe node
med hjälp av kommandot .kubectl describe node $NODE_NAME
Om du har tagit bort en nodtaint visar följande exempelutdata att nodpoolen
<node-pool-name>
inte har den borttagna tainten underTaints
:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Nästa steg
- Läs mer om exempel på användningsfall för taints och toleranser.
- Läs mer om metodtips för avancerade AKS-schemaläggarfunktioner.
- Läs mer om Kubernetes-etiketter i dokumentationen för Kubernetes-etiketter.
Azure Kubernetes Service