Delen via


Toepassingen aanpassen voor gebruik in Kubernetes-clusters met gemengd besturingssysteem

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

Met AKS die door Arc is ingeschakeld, 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 instructiegids wordt beschreven 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-kernconcepten voor AKS die zijn ingeschakeld door Arc voor meer informatie.

Knooppuntkiezers

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

kubernetes.io/os = Windows

of

kubernetes.io/os = Linux

Zie knooppuntkiezers voor meer informatie over knooppuntkiezers.

Taints en toleranties

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

Windows OS-knooppunten 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 Linux-knooppunten te tainten. In het volgende voorbeeld worden Windows-knooppunten gemarkeerd.

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 wilt toevoegen met een taint, 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

Eentainted-knooppuntgroep toevoegen aan een bestaand cluster

Voer de volgende opdracht uit om een getainted 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 taintregel die in het vorige voorbeeld wordt weergegeven. Het resultaat is dat een pod met de tolerantie kan plannen op de opgegeven 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 community Helm-grafieken. U hebt geen toegang tot de podspecificatie, tenzij u de grafiek wilt downloaden en bewerken.

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

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 dit te helpen. Windows Server-knooppunten kunnen worden besmet met het sleutel-waardepaar node.kubernetes.io/os=windows:NoSchedule.

Zie Taints en Tolerations voor meer informatie over taints en toleraties.

Volgende stappen

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