Sdílet prostřednictvím


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

Platí pro: AKS v Azure Stack HCI 22H2, AKS na Windows Serveru

Služba AKS povolená službou Arc umožňuje spouštět clustery Kubernetes s uzly Linuxu i Windows, ale pro použití v těchto clusterech se smíšeným operačním systémem musíte provádět malé úpravy aplikací. Tento návod popisuje, jak zajistit, aby se aplikace naplánoval na správném hostitelském operačním systému pomocí selektorů uzlů nebo taintů a tolerance.

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

Selektory uzlů

Selektor uzlu je jednoduché pole ve specifikaci podu YAML, které omezuje pody pouze na uzly, které jsou v pořádku, které odpovídají operačnímu systému. Ve specifikaci podu YAML zadejte nodeSelector hodnotu Systému 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 selektorech uzlů najdete v tématu selektory uzlů.

Tainty a tolerance

Taints a tolerace spolupracují, aby se zajistilo, že pody nejsou neúmyslně naplánované na uzlech. Uzel může být "tainted" a odmítnout pody, které explicitně netolerují její taint prostřednictvím "tolerance" ve specifikaci podu YAML.

Uzly operačního systému Windows ve službě AKS Arc lze při vytváření pomocí rutin New-AksHciNodePool nebo New-AksHciCluster vytvořit taint. Tyto příkazy můžete použít také k taintu uzlů operačního systému Linux. Následující příklad taints windows nodes.

Použití taintu na nový cluster

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ý tento příkaz používá New-AksHciNodePool .

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

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

Pokud chcete přidat fond uzlů s tainted 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

Pokud chcete zkontrolovat úspěšné nasazení fondu uzlů pomocí taintu, spusťte následující příkaz:

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

Můžete zadat tolerance pro pod ve specifikaci podu YAML. Následující tolerance "odpovídá" taintu vytvořenému čárou kubectl taintu znázorněnou v předchozím příkladu. Výsledkem je, že pod s tolerací může plánovat na tainted uzly.

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

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

Pokud tyto grafy Helm nasadíte do smíšeného clusterového prostředí s linuxovými i pracovními uzly Windows, pody vaší aplikace 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 Windows Serveru mohou být taintovány pomocí páru node.kubernetes.io/os=windows:NoScheduleklíč-hodnota .

Další informace o taintech a tolerancech naleznete v tématu Taints a 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: