Anpassen von Anwendungen zur Verwendung in Kubernetes-Clustern mit gemischten Betriebssystemen

Gilt für: AKS in Azure Stack HCI 22H2, AKS unter Windows Server

Mit AKS, die von Azure Arc aktiviert ist, können Sie Kubernetes-Cluster sowohl mit Linux- als auch mit Windows-Knoten ausführen. Sie müssen jedoch kleine Änderungen an Ihren Apps vornehmen, um sie in diesen Clustern mit gemischten Betriebssystemen zu verwenden. In dieser Schrittanleitung erfahren Sie, wie Sie sicherstellen können, dass Ihre Anwendung entweder mithilfe von Knotenselektoren oder Taints und Toleranzen auf dem richtigen Hostbetriebssystem 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-Hybride.

Knotenselektoren

Ein Knotenselektor ist ein einfaches Feld in der YAML-Datei der Podspezifikation, mit dem Pods nur auf fehlerfreien Knoten geplant werden können, die mit dem Betriebssystem übereinstimmen. Geben Sie in ihrer Podspezifikation YAML ein nodeSelectoran: Windows oder Linux, wie in den folgenden Beispielen gezeigt:

kubernetes.io/os = Windows

-oder-

kubernetes.io/os = Linux

Weitere Informationen zu nodeSelectors finden Sie unter Knotenselektoren.

Taints und Toleranzen

Taints und Toleranzen arbeiten zusammen, um sicherzustellen, dass Pods nicht unbeabsichtigt auf Knoten geplant werden. Ein Knoten kann "verrutscht" werden, um Pods abzulehnen, die seinen Taint nicht explizit tolerieren, durch eine "Toleranz" in der Podspezifikation YAML.

Windows-Betriebssystemknoten in AKS Arc können beim Erstellen mit den Befehlen New-AksHciNodePool oder New-AksHciCluster befleckt werden. Sie können diese Befehle auch verwenden, um Linux-Betriebssystemknoten mit einem Taint zu versehen. Das folgende Beispiel schränkt Windows-Knoten ein.

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, sehen Sie sich das nächste Beispiel an, das den New-AksHciNodePool Befehl verwendet.

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

Hinzufügen eines verfleckten Knotenpools zu einem vorhandenen 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 Toleranz für Pod

Sie können eine Toleranz für einen Pod in der Podspezifikation YAML angeben. Die folgende Tolerierung "stimmt" mit dem Taint überein, der von der kubectl taint-Linie erstellt wurde, die im vorherigen Beispiel gezeigt wurde. Das Ergebnis ist, dass ein Pod mit der Toleranz auf die verfleckten 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 Podspezifikation, die Sie bereitstellen, 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 Podspezifikation, 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 Anwendungspods mit dem Fehler "ImagePullBackOff" fehl. 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 instance können Sie Taints verwenden, um dies zu unterstützen. Windows Server-Knoten können mit dem Schlüssel-Wert-Paar node.kubernetes.io/os=windows:NoSchedulebehaftet sein.

Weitere Informationen zu Taints und Toleranzen 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: