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
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 YAML der Podspezifikation einnodeSelector
(Windows oder Linux) an, 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 „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 -osSku Windows2022 -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 -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 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
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 die Verwendung von Taints betrachten, um dies zu unterstützen: Windows Server-Knoten können mit dem folgenden Schlüssel-Wert-Paar versiert werden: node.kubernetes.io/os=windows:NoSchedule
Weitere Informationen zu Taints und Toleranzen finden Sie unter Taints und Toleranzen.
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: