Dela via


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, NoScheduleoch 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 om tolerationSeconds 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

  1. Skapa en nodpool med en taint med kommandot az aks nodepool add och använd parametern --node-taints för att ange sku=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
    
  2. Kontrollera nodpoolens status.

  3. Kontrollera att taint har angetts på noden.

Uppdatera en nodpool för att lägga till en nodtaint

  1. 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 ange sku=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
    
  2. Kontrollera nodpoolens status.

  3. Kontrollera att taint har angetts på noden.

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ör az --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 eller az 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

  1. 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.

  2. Kontrollera registreringsstatusen az feature show med kommandot .

    az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    
  3. 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

  1. 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 ange sku=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
    
  2. Kontrollera nodpoolens status.

  3. Kontrollera att taint har angetts på noden.

Uppdatera ett kluster för att lägga till en nodinitieringstaint

  1. 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 ange sku=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"
    
  2. Kontrollera nodpoolens status.

  3. Kontrollera att taint har angetts på noden.

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> är Creating noder med angivet nodeTaints:

    [
      {
        ...
        "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> är Creating noder med angivna nodeInitializationTaints:

    [
      {
        ...
        "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 angivna Taints:

    [
        ...
        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

  1. Följ stegen i Ta bort nodinitieringsflikar tillfälligt för att ta bort taint för nodinitiering med kubernetes-API:et.

  2. 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 under Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

Nästa steg