Freigeben über


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:NoScheduleenthalten 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: