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: