Anpassen von Anwendungen zur Verwendung in Kubernetes-Clustern mit gemischten Betriebssystemen
Gilt für: AKS auf Azure Stack HCI 22H2, AKS unter Windows Server
Mit AKS, die von Arc aktiviert sind, können Sie Kubernetes-Cluster sowohl mit Linux- als auch mit Windows-Knoten ausführen, aber Sie müssen kleine Änderungen an Ihren Apps vornehmen, um sie in diesen gemischten Betriebssystemclustern zu verwenden. In diesem Anleitungshandbuch wird beschrieben, wie Sie sicherstellen können, dass Ihre Anwendung auf dem richtigen Hostbetriebssystem mithilfe von Knotenselektoren oder Taints und Tolerationen geplant wird.
Für diesen Artikel werden Grundkenntnisse in Bezug auf die Kubernetes-Konzepte vorausgesetzt. Weitere Informationen finden Sie unter Kubernetes Kernkonzepte für AKS, die von Arc aktiviert sind.
Knotenselektoren
Eine Knotenauswahl ist ein einfaches Feld in der Podspezifikation YAML, das die Planung von Pods nur auf fehlerfreien Knoten beschränkt, die mit dem Betriebssystem übereinstimmen. Geben Sie in Ihrer Podspezifikation YAML einen nodeSelector
Wert von Windows oder Linux an, wie in den folgenden Beispielen gezeigt:
kubernetes.io/os = Windows
oder
kubernetes.io/os = Linux
Weitere Informationen zu Knotenselektoren finden Sie unter Knotenselektoren.
Taints und Toleranzen
Taints und Tolerationen arbeiten zusammen, um sicherzustellen, dass Pods nicht unbeabsichtigt auf Knoten geplant werden. Ein Knoten kann "tainted" sein, um Pods abzulehnen, die ihren Taint nicht explizit durch eine "Toleration" in der Podspezifikation YAML tolerieren.
Windows OS-Knoten in AKS Arc können beim Erstellen mit dem New-AksHciNodePool oder den New-AksHciCluster-Befehlen enthalten sein. Sie können diese Befehle auch verwenden, um Linux-Betriebssystemknoten mit einem Taint zu versehen. Im folgenden Beispiel werden Windows-Knoten enthalten.
Anwenden von Taint auf neuen Cluster
Wenn Sie auch einen neuen Cluster erstellen, führen Sie den folgenden Befehl aus, um einen Windows-Knotenpool mit einem Taint zu erstellen. Wenn Sie über einen vorhandenen Cluster verfügen, dem Sie einen Knotenpool mit einem Taint hinzufügen möchten, lesen Sie das nächste Beispiel, in dem der New-AksHciNodePool
Befehl verwendet wird.
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Hinzufügen eines vorhandenen Knotenpools zu vorhandenem Cluster
Führen Sie den folgenden Befehl aus, um einem vorhandenen Cluster einen Knotenpool mit Taint hinzuzufügen:
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Bereitstellung des Knotenpools mit dem Taint erfolgreich war:
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
Beispielausgabe:
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}
Angeben der Tolerierung für pod
Sie können eine Toleration für einen Pod in der Podspezifikation YAML angeben. Die folgende Toleration entspricht dem Taint, der von der kubectl
taint-Zeile erstellt wurde, die im vorherigen Beispiel gezeigt wird. Das Ergebnis ist, dass ein Pod mit der Toleration auf die tainted Knoten planen kann.
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
Die Schritte in diesem Abschnitt funktionieren gut, wenn Sie die Von Ihnen bereitgestellte Pod-Spezifikation steuern. In einigen Fällen verfügen Benutzer jedoch über eine bereits vorhandene große Anzahl von Bereitstellungen für Linux-Container sowie über ein Ökosystem gängiger Konfigurationen, z. B. Helm-Communitydiagramme. Sie haben keinen Zugriff auf die Pod-Spezifikation, es sei denn, Sie möchten das Diagramm herunterladen und bearbeiten.
Wenn Sie diese Helm-Diagramme in einer gemischten Clusterumgebung mit Linux- und Windows-Workerknoten bereitstellen, schlagen Ihre Anwendungs-Pods mit dem Fehler "ImagePullBackOff" fehl. Zum Beispiel:
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
In diesem Fall können Sie dies mithilfe vonTaints unterstützen. Windows Server-Knoten können mit dem Schlüssel-Wert-Paar node.kubernetes.io/os=windows:NoSchedule
enthalten sein.
Weitere Informationen zu Taints und Tolerationen finden Sie unter "Taints" und "Tolerations".
Nächste Schritte
In dieser Schrittanleitung haben Sie erfahren, wie Sie mithilfe von kubectl Knotenselektoren oder Taints und Toleranzen zu Ihren Kubernetes-Clustern hinzufügen können. Als Nächstes haben Sie folgende Möglichkeiten: