Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í preferenčního pravidla uzlů nebo pokynem uzlu, aby odpuzoval sadu podů pomocí taintování 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. Na pod můžete umístit tolerance, aby plánovač mohl naplánovat tento pod na uzel s odpovídajícím taintem. Znečištění a tolerance spolupracují, aby vám pomohly řídit, jak plánovač umístí pody na uzly. Další informace najdete v příkladech použití taintů a tolerancí.
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í toleranci. Pokud má pod odpovídající tolerance, může být vyřazen, pokudtolerationSecondsjsou 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í toleranci.
Možnosti taintu uzlu
Existují dva typy taintů uzlů, které se dají použít na uzly AKS: tainty uzlů a inicializační tainty uzlů.
- Skvrny uzlů by měly zůstat trvale na uzlu pro plánování podů s afinitou uzlu. Tainty uzlů je možné přidat, aktualizovat nebo úplně odebrat pomocí rozhraní API AKS.
- Inicializační tainty uzlů jsou umístěny do uzlu během spouštění a mají být použity dočasně, například ve scénářích, kdy potřebujete více času na nastavení uzlů. Pomocí Kubernetes API můžete odstranit taint při inicializaci uzlu, nicméně během životního cyklu uzlu jejich přítomnost není zaručena. Zobrazí se na nových replikách uzlu při vertikálním navýšení kapacity nebo na všech replikách při upgradu uzlu. Pokud chcete inicializační tainty úplně odebrat, můžete je odtranit pomocí rozhraní AKS API poté, co odstraníte tainty z uzlů 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 je inicializační taint stále přítomen na existujících uzlech, můžete jej trvale odebrat provedením 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řte skupinu uzlů se značkou taint ukazující omezení
Pomocí příkazu vytvořte fond uzlů s taintem
az aks nodepool adda pomocí parametru--node-taintszadejtesku=gpu:NoSchedulepro 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
Aktualizujte fond uzlů a přidejte taint uzlu
Aktualizujte fond uzlů, abyste pomocí příkazu
az aks nodepool updatepřidali uzlu taint a pomocí parametru--node-taintsurčilisku=gpu:NoScheduleúčel taintu.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Použijte tainty pro inicializaci uzlů (ukázka)
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi, s možností dobrovolného zapojení. Verze Preview jsou poskytovány "tak, jak je" a "tak, jak jsou dostupné", a jsou vyloučeny 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.0b3Azure 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 lze použít pouze během tvorby nebo upgradu clusteru při použití AKS API. Pokud používáte šablonu ARM, která bude mít za následek operaci na úrovni spravovaného clusteru, můžete během vytváření a aktualizace fondu uzlů určit tainty inicializace uzlů. Operace na úrovni fondu agentů jsou zablokovány, když jsou v textu požadavku přítomny
NodeInitializationTaints. - 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-credentialsAKS.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 addpříkazu neboaz extension updatepříkazu.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Zaregistrujte příznak funkce NodeInitializationTaintsPreview
Příznak funkce
NodeInitializationTaintsPreviewzaregistrujte pomocí příkazuaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Zobrazení stavu Zaregistrované trvá několik minut.
Pomocí příkazu ověřte stav
az feature showregistrace.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí
az provider registerpříkazu.az provider register --namespace Microsoft.ContainerService
Vytvořte cluster s initiačním taintem uzlu
Vytvořte cluster s taintem inicializace uzlu pomocí příkazu
az aks createa parametru--node-initialization-taintspro určenísku=gpu:NoSchedulepro taint.Důležité
Tainty inicializace uzlů, které určíte, platí pro všechny fondy uzlů v klastru. 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
Aktualizace clusteru pro přidání taintu pro inicializaci uzlu
Aktualizujte cluster pomocí příkazu
az aks updatea parametru--node-initialization-taints, abyste přidali taintsku=gpu:NoSchedulepro inicializaci uzlu.Důležité
Při aktualizaci clusteru pomocí taintu inicializace uzlu se tainty vztahují na všechny pooly uzlů v clusteru. Pokud vaše uzly používají VMSS, můžete po aktualizaci modelu VMSS zobrazit aktualizace inicializace taintů uzlů (například po upgradu verze image uzlu). Inicializační tainty se na uzlech nezobrazí, dokud nedojde k operaci, která aktivuje aktualizaci modelu VMSS.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Zkontrolovat stav skupiny uzlů
Po aplikaci taintu uzlu nebo inicializačního taintu zkontrolujte stav shluku uzlů pomocí příkazu
az aks nodepool list.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAMEPokud jste použili omezení uzlů, následující příklad výstupu ukazuje, že fond uzlů
<node-pool-name>obsahuje uzlyCreatingse zadanými parametrynodeTaints.[ { ... "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 fond uzlů
<node-pool-name>obsahuje uzlyCreatingse zadanýminodeInitializationTaints:[ { ... "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
kubectl describe nodezkontrolujte tainty uzlů a inicializační tainty uzlů v konfiguraci uzlu.kubectl describe node $NODE_NAMEPokud jste použili uzlové tainty, následující příklad výstupu ukazuje, že
<node-pool-name>pool uzlů má zadanouTaints:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Důležité
Pokud uzly používají VMSS, nebudou tainty inicializace uzlů viditelné na skutečných uzlech v clusteru, dokud nedojde k operaci, která aktivuje aktualizaci modelu VMSS (například upgrade verze Kubernetes nebo upgrade verze image uzlu).
Odebrání taintů uzlů
Odebrání taintu určitého uzlu
Pomocí příkazu
az aks nodepool updateodeberte tainty uzlu. Následující ukázkový příkaz odebere zátěž uzlu"sku=gpu:NoSchedule"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ů
Odeberte všechny tainty z fondu uzlů pomocí příkazu
az aks nodepool update. 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 operacích přeobrazení 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ů
Dočasně odeberte tainty inicializace uzlů pomocí příkazu
kubectl taint nodes.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 odstranění se tainty inicializace uzlu znovu objeví 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.
Odeberte taint z uzlu pomocí příkazu
az aks updatepřes rozhraní API AKS. Tento příkaz odebere značku inicializace uzlu z každého uzlu v klastru.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
kubectl describe nodezkontrolujte tainty uzlů a inicializační tainty uzlů v konfiguraci uzlu.kubectl describe node $NODE_NAMEPokud jste odebrali taint uzlu, ukazuje následující příklad výstupu, že fond uzlů
<node-pool-name>nemá odstraněný taint podTaints:[ ... 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