Toepassingen aanpassen voor gebruik in Kubernetes-clusters met gemengde besturingssystemen

Van toepassing op: AKS in Azure Stack HCI 22H2, AKS op Windows Server

Met AKS die wordt ingeschakeld door Azure Arc kunt u Kubernetes-clusters uitvoeren met zowel Linux- als Windows-knooppunten, maar u moet kleine wijzigingen aanbrengen in uw apps voor gebruik in deze clusters met gemengde besturingssystemen. In deze handleiding leert u hoe u ervoor kunt zorgen dat uw toepassing wordt gepland op het juiste hostbesturingssysteem met behulp van knooppuntkiezers of taints en toleranties.

In dit artikel wordt ervan uitgegaan dat u basiskennis hebt van Kubernetes-concepten. Zie Kubernetes core concepts for AKS enabled by Arc (Kernconcepten van Kubernetes voor AKS die worden ingeschakeld door Arc) voor meer informatie.

Knooppuntkiezers

Een knooppuntkiezer is een eenvoudig veld in de YAML van de podspecificatie waarmee wordt beperkt dat pods alleen worden gepland op gezonde knooppunten die overeenkomen met het besturingssysteem. Geef in de YAML van uw podspecificatie een nodeSelector waarde op van Windows of Linux, zoals wordt weergegeven in de volgende voorbeelden:

kubernetes.io/os = Windows

Of

kubernetes.io/os = Linux

Zie knooppuntkiezers voor meer informatie over nodeSelectors.

Taints en toleranties

Taints en toleranties werken samen om ervoor te zorgen dat pods niet onbedoeld op knooppunten worden gepland. Een knooppunt kan worden 'bevlekt' om pods af te wijzen die de taint niet expliciet tolereren via een 'tolerantie' in de YAML van de podspecificatie.

Windows-besturingssysteemknooppunten in AKS Arc kunnen worden besmet wanneer ze worden gemaakt met de opdrachten New-AksHciNodePool of New-AksHciCluster . U kunt deze opdrachten ook gebruiken om knooppunten van het Linux-besturingssysteem te tainten. In het volgende voorbeeld worden Windows-knooppunten weergegeven.

Taint toepassen op een nieuw cluster

Als u ook een nieuw cluster maakt, voert u de volgende opdracht uit om een Windows-knooppuntgroep met een taint te maken. Als u een bestaand cluster hebt waaraan u een knooppuntgroep met een taint wilt toevoegen, raadpleegt u het volgende voorbeeld, waarin de New-AksHciNodePool opdracht wordt gebruikt.

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

Een bevlekte knooppuntgroep toevoegen aan een bestaand cluster

Voer de volgende opdracht uit om een bevlekte knooppuntgroep toe te voegen aan een bestaand cluster:

New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Voer de volgende opdracht uit om te controleren of de knooppuntgroep is geïmplementeerd met de taint:

Get-AksHciNodePool -clusterName <cluster-name> -name taintnp

Voorbeelduitvoer:

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}

Tolerantie voor pod opgeven

U kunt een tolerantie voor een pod opgeven in de YAML van de podspecificatie. De volgende tolerantie komt overeen met de taint die is gemaakt door de kubectl taint-lijn die in het vorige voorbeeld wordt weergegeven. Het resultaat is dat een pod met de tolerantie kan plannen op de bevlekte knooppunten.

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

De stappen in deze sectie werken goed als u controle hebt over de podspecificatie die u implementeert. In sommige gevallen hebben gebruikers echter een bestaand groot aantal implementaties voor Linux-containers, evenals een ecosysteem van algemene configuraties, zoals Helm-grafieken van de community. U hebt geen toegang tot de podspecificatie, tenzij u de grafiek wilt downloaden en bewerken.

Als u deze Helm-grafieken implementeert in een omgeving met gemengde clusters met zowel Linux- als Windows-werkknooppunten, mislukken uw toepassingspods met de fout ImagePullBackOff. Bijvoorbeeld:

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 dit geval kunt u taints gebruiken om hierbij te helpen. Windows Server-knooppunten kunnen worden bevlekt met het sleutel-waardepaar node.kubernetes.io/os=windows:NoSchedule.

Zie Taints and Tolerations (Taints and Tolerations) voor meer informatie over taints en toleranties.

Volgende stappen

In deze handleiding hebt u geleerd hoe u knooppuntkiezers of taints en toleranties toevoegt aan uw Kubernetes-clusters met behulp van kubectl. Vervolgens kunt u het volgende doen: