Přizpůsobení aplikací pro použití v clusterech Kubernetes se smíšenými operačními systémem

Platí pro: AKS ve Službě Azure Stack HCI 22H2, AKS na Windows Serveru

Služba AKS povolená službou Azure Arc umožňuje spouštět clustery Kubernetes s uzly s Linuxem i Windows, ale pro použití v těchto clusterech se smíšenými operačními systémy musíte provést malé úpravy aplikací. V tomto návodu se dozvíte, jak zajistit, aby se vaše aplikace naplánoval na správný hostitelský operační systém pomocí selektorů uzlů nebo taintů a tolerance.

Tento článek předpokládá základní znalost konceptů Kubernetes. Další informace najdete v tématu Základní koncepty Kubernetes pro AKS povolené službou Arc.

Selektory uzlů

Selektor uzlů je jednoduché pole ve specifikaci podů YAML, které omezuje, aby pody byly naplánovány pouze na uzly, které jsou v pořádku, které odpovídají operačnímu systému. Ve specifikaci podu YAML zadejte nodeSelector hodnotu Windows nebo Linux, jak je znázorněno v následujících příkladech:

kubernetes.io/os = Windows

Nebo

kubernetes.io/os = Linux

Další informace o nodeSelectorech najdete v tématu Selektory uzlů.

Taints a tolerance

Funkce taints a tolerance spolupracují, aby zajistily , že pody nebudou na uzlech neúmyslně naplánované. Uzel může být "tainted", aby odmítl pody, které explicitně netolerují jeho taint prostřednictvím "tolerance" ve specifikaci podů YAML.

Uzly operačního systému Windows ve službě AKS Arc se dají po vytvoření vytvořit pomocí příkazů New-AksHciNodePool nebo New-AksHciCluster . Tyto příkazy můžete také použít k zabarvení uzlů operačního systému Linux. Následující příklad označuje uzly Windows.

Použití taintu u nového clusteru

Pokud také vytvoříte nový cluster, spuštěním následujícího příkazu vytvořte fond uzlů Windows s taintem. Pokud máte existující cluster, do kterého chcete přidat fond uzlů s taintem, podívejte se na další příklad, který používá New-AksHciNodePool příkaz .

New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Přidání fondu uzlů s taintem do existujícího clusteru

Pokud chcete přidat fond tainted uzlů do existujícího clusteru, spusťte následující příkaz:

New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Spuštěním následujícího příkazu zkontrolujte, jestli se fond uzlů úspěšně nasadil s taintem:

Get-AksHciNodePool -clusterName <cluster-name> -name taintnp

Příklad výstupu:

Status       : {Phase, Details}
ClusterName  : mycluster
NodePoolName : taintnp
Version      : v1.20.7-kvapkg.1
OsType       : Windows
NodeCount    : 0
VmSize       : Standard_K8S3_v1
Phase        : Deployed
Taints       : {sku=Windows:NoSchedule}

Určení tolerance pro pod

Tolerance pro pod můžete zadat ve specifikaci podu YAML. Následující tolerance "odpovídá" taintu vytvořenému čárou taintu kubectl zobrazenou v předchozím příkladu. Výsledkem je, že pod s tolelací se může naplánovat na uzly s taintem.

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

Kroky v této části fungují dobře, pokud máte kontrolu nad specifikací podu, kterou nasazujete. V některých případech však mají uživatelé již existující velký počet nasazení pro kontejnery Linuxu a také ekosystém běžných konfigurací, jako jsou komunitní charty Helm. K specifikaci podu nebudete mít přístup, pokud nebudete chtít graf stáhnout a upravit.

Pokud tyto grafy Helm nasadíte do prostředí smíšeného clusteru s pracovními uzly Linuxu i Windows, pody aplikací selžou s chybou ImagePullBackOff. Příklad:

kubectl get pods
NAMESPACE              NAME                                                    READY   STATUS              RESTARTS   AGE
default                nginx-deployment-558fc78868-795dp                       0/1     ImagePullBackOff    0          6m24s
default                nginx-deployment-6b474476c4-gpb77                       0/1     ImagePullBackOff    0          11m

V tomto případě můžete s tím pomoct pomocí taintů . Uzly Systému Windows Server je možné nakreslovat pomocí páru node.kubernetes.io/os=windows:NoScheduleklíč-hodnota .

Další informace o taints a snášenlosti najdete v tématu Taints and Tolerations.

Další kroky

V tomto návodu jste zjistili, jak přidat selektory uzlů nebo tainty a tolerance do clusterů Kubernetes pomocí kubectl. Dále můžete: