調整應用程式以在混合 OS Kubernetes 叢集中使用
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
Azure Arc 所啟用的 AKS 可讓您同時執行具有 Linux 和 Windows 節點的 Kubernetes 叢集,但您必須對應用程式進行小型編輯,才能用於這些混合 OS 叢集。 在本操作指南中,您將了解如何使用節點選取器或污點和容許處,以確保您的應用程式會在正確的主機作業系統上排程。
本文章假設您對 Kubernetes 概念有基本瞭解。 如需詳細資訊,請參閱 AKS 混合式的 Kubernetes 核心概念。
節點選取器
節點選取器是 pod 規格 YAML 中的簡單欄位,可將 pod 限制為只排程至符合作業系統的狀況良好節點。 在 Pod 規格 YAML 中,指定 nodeSelector
:Windows 或 Linux,如下列範例所示:
kubernetes.io/os = Windows
或者,
kubernetes.io/os = Linux
如需 nodeSelectors 的詳細資訊,請參閱 節點選取器。
汙點和容許處
污點和容許處會一起運作,以確保不會在節點上意外排程 pod。 節點可以「遭拒」,以拒絕未明確容忍 Pod 規格 YAML 中的“toleration” 的 Pod。
使用 New-AksHciNodePool 或 New-AksHciCluster 命令建立時,AKS Arc 中的 Windows OS 節點可能會被破壞。 您也可以使用這些命令來污染 Linux OS 節點。 下列範例會擷取 Windows 節點。
將 Taint 套用至新的叢集
如果您也建立新的叢集,請執行下列命令來建立具有 Taint 的 Windows 節點集區。 如果您有想要使用 taint 新增節點集區的現有叢集,請參閱下一個使用 命令的 New-AksHciNodePool
範例。
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
將有害節點集區新增至現有的叢集
若要將汙染節點集區新增至現有叢集,請執行下列命令:
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
執行下列命令,以檢查是否已成功使用汙點部署節點集區:
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
範例輸出︰
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}
指定 Pod 的 Toleration
您可以在 Pod 規格 YAML 中指定 Pod 的容忍。 下列 Toleration 會「比對」上一個範例所示的 kubectl
taint 行所建立的 Taint。 結果是具有 Toleration 的 Pod 可以排程到有害的節點。
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
如果您控制要部署的Pod規格,本節中的步驟會正常運作。 不過,在某些情況下,使用者在 Linux 容器中會有大量預先存在的部署,以及常見設定的生態系統,例如社群 Helm 圖表。 除非您想要下載並編輯圖表,否則您將無法存取 Pod 規格。
如果您將這些 Helm 圖表部署至具有 Linux 和 Windows 背景工作節點的混合叢集環境,您的應用程式 Pod 就會失敗,並出現「ImagePullBackOff」錯誤。 例如:
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
在此實例中,您可以使用 taints 來協助解決此問題。 Windows Server 節點可以使用索引鍵/值組 node.kubernetes.io/os=windows:NoSchedule
來刪除。
如需 Taint 和 tolerations 的詳細資訊,請參閱 Taints 和 Tolerations。
後續步驟
在本操作指南中,您已了解如何使用 kubectl 將節點選取器或污點和容許處新增至 Kubernetes 叢集。 接著,您可以:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應