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
, NoSchedule
a 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, pokudtolerationSeconds
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
Pomocí příkazu vytvořte fond uzlů s taintem
az aks nodepool add
a pomocí parametru--node-taints
zadejtesku=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
Zkontrolujte stav fondu uzlů.
Aktualizace fondu uzlů pro přidání taintu uzlu
Aktualizujte fond uzlů tak, aby pomocí příkazu přidal taint
az aks nodepool update
uzlu a pomocí parametru--node-taints
určilsku=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
Zkontrolujte stav fondu uzlů.
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říkazuaz --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 neboaz 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
NodeInitializationTaintsPreview
Pomocí příkazu zaregistrujte příznakaz feature register
funkce.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Zobrazení stavu Zaregistrované trvá několik minut.
Pomocí příkazu ověřte stav
az feature show
registrace.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
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
Pomocí příkazu a parametru
--node-initialization-taints
pro určenísku=gpu:NoSchedule
taintu vytvořte cluster s taintemaz 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
Zkontrolujte stav fondu uzlů.
Aktualizace clusteru pro přidání taintu inicializace uzlu
Aktualizujte cluster tak, aby pomocí příkazu a parametru
--node-initialization-taints
prosku=gpu:NoSchedule
taint přidal taintaz 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"
Zkontrolujte stav fondu uzlů.
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ů jeCreating
uzly se zadanýmnodeTaints
kó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ů jeCreating
uzly se zadanýmnodeInitializationTaints
kó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á zadanouTaints
:[ ... 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ů
Pomocí kroků v části Odebrání taintů inicializace uzlů dočasně odeberte taint inicializace uzlu pomocí rozhraní Kubernetes API.
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
- Přečtěte si další informace o ukázkových případech použití taintů a tolerance.
- Přečtěte si další informace o osvědčených postupech pro pokročilé funkce plánovače AKS.
- Další informace o popiscích Kubernetes najdete v dokumentaci k popiskům Kubernetes.
Azure Kubernetes Service