Anpassen von Apps für Kubernetes-Cluster mit gemischtem Betriebssystem mithilfe von Knotenselektoren oder Taints und Toleranzen in AKS-Hybriden

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

Mit AKS-Hybrid 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, damit sie in diesen Clustern mit gemischten Betriebssystemen verwendet werden können. In dieser Anleitung erfahren Sie, wie Sie mithilfe von Knotenselektoren oder Taints und Toleranzen sicherstellen, dass Ihre Anwendung auf dem richtigen Hostbetriebssystem geplant wird.

Für diese Schrittanleitung werden Grundkenntnisse in Bezug auf die Kubernetes-Konzepte vorausgesetzt. Weitere Informationen finden Sie unter Kubernetes-Kernkonzepte für AKS-Hybrid.

Knotenselektoren

Eine Knotenauswahl ist ein einfaches Feld in der Podspezifikation YAML, das pods einschränkt, nur auf fehlerfreie Knoten zu planen, die dem Betriebssystem entsprechen. Geben Sie in Ihrer Podspezifikation YAML einen nodeSelector für Windows oder Linux an, wie in den folgenden Beispielen gezeigt.

kubernetes.io/os = Windows

-oder-

kubernetes.io/os = Linux

Weitere Informationen 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 „verfälscht“ sein, um keine Pods zu akzeptieren, die seinen Taint nicht ausdrücklich durch eine „Toleranz“ in der YAML-Datei der Podspezifikation zu tolerieren.

Windows-Betriebssystemknoten in AKS-Hybrid können bei der Erstellung mit dem Befehl New-AksHciNodePool oder dem Befehl New-AksHciCluster beschädigt 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

Führen Sie den folgenden Befehl aus, um einen Windows-Knotenpool mit einem Taint zu erstellen, wenn Sie auch einen neuen Cluster erstellen. Wenn Sie über einen vorhandenen Cluster verfügen, dem Sie einen Knotenpool mit einem Taint hinzufügen möchten, fahren Sie mit dem nächsten Beispiel fort, in dem der New-AksHciNodePool Befehl verwendet wird.

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

Hinzufügen eines verfleckten Knotenpools zum 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 -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 Pods

Sie geben eine Toleranz für einen Pod in der YAML der Podspezifikation an. Die folgende Toleranz weist eine Übereinstimmung mit dem Taint auf, der mit der obigen kubectl-Taintzeile erstellt wurde. Das Ergebnis ist, dass es für einen Pod mit der Toleranz möglich ist, die Planung auf den Knoten mit Taint durchzuführen.

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

Verwenden von Taints, wenn Sie nicht auf die Podspezifikation zugreifen können

Die Schritte in diesem Abschnitt funktionieren gut, wenn Sie die Podspezifikation steuern, die Sie bereitstellen. 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, z. B.:

C:\>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 sollten Sie sich die Verwendung von Taints ansehen, um dies zu unterstützen. Windows Server-Knoten können mit dem folgenden Schlüssel-Wert-Paar befleckt werden: node.kubernetes.io/os=windows:NoSchedule

Weitere Informationen zu Taints und Toleranzen finden Sie unter Taints und Tolerations.

Nächste Schritte

In dieser Anleitung haben Sie erfahren, wie Sie Ihren Kubernetes-Clustern kubectlmithilfe von Knotenselektoren oder Taints und Toleranzen hinzufügen. Als Nächstes haben Sie folgende Möglichkeiten: