Sdílet prostřednictvím


Použití taintů uzlů v clusteru Azure Kubernetes Service (AKS)

Tento článek popisuje, jak používat tainty uzlů v clusteru Azure Kubernetes Service (AKS).

Přehled

Plánovací mechanismus AKS zodpovídá za umístění podů na uzly a je založený na upstreamovém plánovači Kubernetes, kube-scheduleru. Pod můžete omezit tak, aby běžel na konkrétních uzlech, a to připojením podů k sadě uzlů pomocí spřažení uzlů nebo pokynem uzlu, aby odpušil sadu podů pomocí taintů uzlů, které pracují s plánovačem AKS.

Tainty uzlů fungují tak, že označí uzel, aby plánovač zabránil umístění určitých podů na označené uzly. Tolerance můžete umístit na pod, aby plánovač naplánoval tento pod na uzlu s odpovídajícím taintem. Taints a tolerace spolupracují, aby vám pomohly řídit, jak plánovač umístí pody na uzly. Další informace najdete v příkladu případů použití taintů a tolerance.

Tainty jsou páry klíč-hodnota s efektem. Pole efektu má při použití taintů uzlů tři hodnoty: NoExecute, NoSchedulea PreferNoSchedule.

  • NoExecute: Pody, které už běží na uzlu, se okamžitě vyřadí, pokud nemají odpovídající tolerance. Pokud má pod odpovídající tolerance, může být vyřazen, pokud tolerationSeconds jsou zadány.
  • NoSchedule: Na tomto uzlu se umístí pouze pody s odpovídajícími tolerancemi. Existující pody se nevyřadí.
  • PreferNoSchedule: Plánovač se vyhne umístění podů, které nemají odpovídající tolerance.

Možnosti taintu uzlu

Existují dva typy taintů uzlů, které se dají použít na uzly AKS: tainty uzlů a inicializační tainty uzlů.

  • Tainty uzlů mají zůstat trvale na uzlu pro plánování podů se spřažením uzlů. Tainty uzlů je možné přidat, aktualizovat nebo úplně odebrat pomocí rozhraní API AKS.
  • Tainty inicializace uzlů se umístí do uzlu při spuštění a mají být použity dočasně, například ve scénářích, kde možná budete potřebovat další čas k nastavení uzlů. Taint inicializace uzlů můžete odebrat pomocí rozhraní KUBERNEtes API a během životního cyklu uzlu není zaručená. Zobrazí se až po vertikálním navýšení nebo upgradu nebo obnovení uzlu. Nové uzly mají po škálování stále taint inicializace uzlu. Tainty inicializace uzlů se zobrazí na všech uzlech po upgradu. Pokud chcete inicializační tainty úplně odebrat, můžete je odebrat pomocí rozhraní API AKS po zrušení uzlu pomocí rozhraní Kubernetes API. Jakmile odeberete tainty inicializace ze specifikace clusteru pomocí rozhraní API AKS, nově vytvořené uzly nepřicházejí s těmito inicializačními tainty. Pokud taint inicializace stále existuje na existujících uzlech, můžete ji trvale odebrat provedením operace upgradu image uzlu.

Poznámka:

Tainty a popisky uzlů použité pomocí rozhraní API fondu uzlů AKS se neupravují z rozhraní API Kubernetes a naopak. Úpravy systémových taintů nejsou povoleny.

To neplatí pro tainty inicializace uzlů.

Použití taintů uzlů

Požadavky

Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, můžete ho vytvořit pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.

Vytvoření fondu uzlů s taintem uzlu

  1. Pomocí příkazu vytvořte fond uzlů s taintem az aks nodepool add a pomocí parametru --node-taints zadejte sku=gpu:NoSchedule pro 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. Zkontrolujte stav fondu uzlů.

  3. Zkontrolujte, jestli je taint nastavený na uzlu.

Aktualizace fondu uzlů pro přidání taintu uzlu

  1. Aktualizujte fond uzlů tak, aby pomocí příkazu přidal taint az aks nodepool update uzlu a pomocí parametru --node-taints určil sku=gpu:NoSchedule pro 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. Zkontrolujte stav fondu uzlů.

  3. Zkontrolujte, jestli je taint nastavený na uzlu.

Použití taintů inicializace uzlů (Preview)

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Předpoklady a omezení

  • Potřebujete nainstalovanou a nakonfigurovanou verzi 3.0.0b3 Azure CLI nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
  • Tainty inicializace můžete použít pouze prostřednictvím vytvoření nebo upgradu clusteru při použití rozhraní API AKS. Pokud používáte šablony ARM, můžete během vytváření a aktualizace fondu uzlů určit tainty inicializace uzlů.
  • Inicializační tainty nemůžete použít u fondů uzlů Windows pomocí Azure CLI.

Získání přihlašovacích údajů pro cluster

  • Pomocí příkazu získejte přihlašovací údaje pro cluster az aks get-credentials AKS.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

aks-preview Instalace rozšíření Azure CLI

  • Zaregistrujte nebo aktualizujte rozšíření aks-preview pomocí az extension add příkazu nebo az extension update příkazu.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

Registrace příznaku NodeInitializationTaintsPreview funkce

  1. NodeInitializationTaintsPreview Pomocí příkazu zaregistrujte příznak az feature register funkce.

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

    Zobrazení stavu Zaregistrované trvá několik minut.

  2. Pomocí příkazu ověřte stav az feature show registrace.

    az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    
  3. Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí az provider register příkazu.

    az provider register --namespace Microsoft.ContainerService
    

Vytvoření clusteru s taintem inicializace uzlu

  1. Pomocí příkazu a parametru --node-initialization-taints pro určení sku=gpu:NoSchedule taintu vytvořte cluster s taintem az aks create inicializace uzlu.

    Důležité

    Tainty inicializace uzlů, které zadáte, platí pro všechny fondy uzlů v clusteru. Pokud chcete použít taint inicializace na konkrétní uzel, můžete místo rozhraní příkazového řádku použít šablonu ARM.

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --node-count 1 \
        --node-init-taints "sku=gpu:NoSchedule" \
        --generate-ssh-keys
    
  2. Zkontrolujte stav fondu uzlů.

  3. Zkontrolujte, jestli je taint nastavený na uzlu.

Aktualizace clusteru pro přidání taintu inicializace uzlu

  1. Aktualizujte cluster tak, aby pomocí příkazu a parametru --node-initialization-taints pro sku=gpu:NoSchedule taint přidal taint az aks update inicializace uzlu.

    Důležité

    Při aktualizaci clusteru pomocí taintu inicializace uzlu se tainty vztahují na všechny fondy uzlů v clusteru. Aktualizace taintů inicializace uzlů můžete zobrazit v uzlu po operaci opětovného vytvoření.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints "sku=gpu:NoSchedule"
    
  2. Zkontrolujte stav fondu uzlů.

  3. Zkontrolujte, jestli je taint nastavený na uzlu.

Kontrola stavu fondu uzlů

  • Po použití taintu nebo inicializace uzlu pomocí příkazu zkontrolujte stav fondu az aks nodepool list uzlů.

    az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
    

    Pokud jste použili tainty uzlů, následující příklad výstupu ukazuje, že <node-pool-name> fond uzlů je Creating uzly se zadaným nodeTaintskódem:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

    Pokud jste použili tainty inicializace uzlu, následující příklad výstupu ukazuje, že <node-pool-name> fond uzlů je Creating uzly se zadaným nodeInitializationTaintskódem:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeInitializationTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

Zkontrolujte, jestli je taint nastavený na uzlu.

  • Pomocí příkazu zkontrolujte tainty a inicializaci uzlů v konfiguraci kubectl describe node uzlu.

    kubectl describe node $NODE_NAME
    

    Pokud jste použili tainty uzlů, následující příklad výstupu ukazuje, že <node-pool-name> fond uzlů má zadanou Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: sku=gpu:NoSchedule
        ...
        ],
        ...
     ...
    ]
    

Odebrání taintů uzlů

Odebrání taintu určitého uzlu

  • Pomocí příkazu odeberte tainty az aks nodepool update uzlů. Následující ukázkový příkaz odebere "sku=gpu:NoSchedule" taint uzlu z fondu uzlů.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --node-taints "sku=gpu:NoSchedule"
    

Odebrání všech taintů uzlů

  • Pomocí příkazu odeberte všechny tainty uzlů z fondu az aks nodepool update uzlů. Následující ukázkový příkaz odebere všechny tainty uzlů z fondu uzlů.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $NODE_POOL_NAME \
    --node-taints ""
    

Odebrání taintů inicializace uzlů

Z uzlu můžete odebrat tainty inicializace uzlů pomocí následujících možností:

  • Pomocí rozhraní API Kubernetes dočasně odeberte tainty inicializace uzlů. Pokud je tímto způsobem odeberete, tainty se znovu zobrazí po škálování nebo upgradu uzlu. Nové uzly mají po škálování stále taint inicializace uzlu. Tainty inicializace uzlů se zobrazí na všech uzlech po upgradu.
  • Odeberte tainty inicializace uzlů trvale tím, že uzel zrušíte pomocí rozhraní Kubernetes API a pak odeberete taint pomocí rozhraní API AKS. Jakmile se inicializační tainty odeberou ze specifikace clusteru pomocí rozhraní API AKS, nově vytvořené uzly po opakovaných operacích opětovného vytvoření už nebudou mít inicializační tainty.

Když odeberete všechny výskyty taintu inicializace z replik fondu uzlů, stávající inicializační taint se může znovu objevit po upgradu s novými inicializačními tainty.

Dočasné odebrání taintů inicializace uzlů

  • Pomocí příkazu dočasně kubectl taint nodes odeberte tainty inicializace uzlů.

    Tento příkaz odebere taint pouze ze zadaného uzlu. Pokud chcete odebrat taint z každého uzlu ve fondu uzlů, musíte spustit příkaz pro každý uzel, ze kterého chcete taint odebrat.

    kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
    

    Po odebrání se tainty inicializace uzlů znovu zobrazí po škálování nebo upgradu uzlu.

Trvalé odebrání taintů inicializace uzlů

  1. Pomocí kroků v části Odebrání taintů inicializace uzlů dočasně odeberte taint inicializace uzlu pomocí rozhraní Kubernetes API.

  2. Pomocí příkazu odeberte taint z uzlu pomocí az aks update rozhraní API AKS. Tento příkaz odebere taint inicializace uzlu z každého uzlu v clusteru.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints ""
    

Zkontrolujte, jestli byl taint odebrán z uzlu.

  • Pomocí příkazu zkontrolujte tainty a inicializaci uzlů v konfiguraci kubectl describe node uzlu.

    kubectl describe node $NODE_NAME
    

    Pokud jste odebrali taint uzlu, následující příklad výstupu ukazuje, že <node-pool-name> fond uzlů nemá odebraný taint:Taints

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

Další kroky