Delen via


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, NoScheduleen 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 als tolerationSeconds 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

  1. Maak een knooppuntgroep met een taint met behulp van de az aks nodepool add opdracht en gebruik de --node-taints parameter om op te geven sku=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
    
  2. Controleer de status van de knooppuntgroep.

  3. Controleer of de taint is ingesteld op het knooppunt.

Een knooppuntgroep bijwerken om een knooppunt-taint toe te voegen

  1. 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 geven sku=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
    
  2. Controleer de status van de knooppuntgroep.

  3. Controleer of de taint is ingesteld op het knooppunt.

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. Voer az --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 of az 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

  1. Registreer de NodeInitializationTaintsPreview functievlag met behulp van de az feature register opdracht.

    az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    

    Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.

  2. Controleer de registratiestatus met behulp van de az feature show opdracht.

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

  1. 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 opgegeven sku=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
    
  2. Controleer de status van de knooppuntgroep.

  3. Controleer of de taint is ingesteld op het knooppunt.

Een cluster bijwerken om een knooppuntinitialisatie-taint toe te voegen

  1. 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 opgegeven sku=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"
    
  2. Controleer de status van de knooppuntgroep.

  3. Controleer of de taint is ingesteld op het knooppunt.

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 is Creating met de opgegeven nodeTaints:

    [
      {
        ...
        "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 is Creating met de opgegeven nodeInitializationTaints:

    [
      {
        ...
        "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 opgegeven Taintsheeft:

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

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

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

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

Volgende stappen