Anpassa program för användning i Kubernetes-kluster med blandade operativsystem
Gäller för: AKS på Azure Stack HCI 22H2, AKS på Windows Server
MED AKS som aktiveras av Azure Arc kan du köra Kubernetes-kluster med både Linux- och Windows-noder, men du måste göra små ändringar i dina appar för användning i dessa kluster med blandade operativsystem. I den här instruktionsguiden lär du dig att se till att ditt program schemaläggs på rätt värdoperativsystem med hjälp av antingen nodväljare eller taints och toleranser.
Den här artikeln förutsätter en grundläggande förståelse av Kubernetes-begrepp. Mer information finns i Viktiga Kubernetes-begrepp för AKS som aktiveras av Arc.
Nodväljare
En nodväljare är ett enkelt fält i poddspecifikationen YAML som begränsar poddar så att de endast schemaläggs till felfria noder som matchar operativsystemet. I din poddspecifikation YAML anger du värdet nodeSelector
Windows eller Linux, som du ser i följande exempel:
kubernetes.io/os = Windows
Eller
kubernetes.io/os = Linux
Mer information om nodeSelectors finns i nodväljare.
Taints och toleranser
Taints och toleranser fungerar tillsammans för att säkerställa att poddar inte schemaläggs oavsiktligt på noder. En nod kan "fläckas" för att avvisa poddar som inte uttryckligen tolererar dess taint via en "tolerans" i poddspecifikationen YAML.
Windows OS-noder i AKS Arc kan fläckas när de skapas med kommandona New-AksHciNodePool eller New-AksHciCluster . Du kan också använda dessa kommandon för att taint Linux OS-noder. I följande exempel används Windows-noder.
Tillämpa taint på nytt kluster
Om du även skapar ett nytt kluster kör du följande kommando för att skapa en Windows-nodpool med en taint. Om du har ett befintligt kluster som du vill lägga till en nodpool till med en taint, se nästa exempel, som använder New-AksHciNodePool
kommandot .
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Lägga till en tainted-nodpool i ett befintligt kluster
Om du vill lägga till en tainted-nodpool i ett befintligt kluster kör du följande kommando:
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Kontrollera att nodpoolen har distribuerats med taint genom att köra följande kommando:
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
Exempel på utdata:
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}
Ange tolerans för podd
Du kan ange en tolerans för en podd i poddspecifikationen YAML. Följande tolerans "matchar" den taint som skapades av kubectl
taint-raden som visas i föregående exempel. Resultatet är att en podd med toleransen kan schemalägga till de fläckade noderna.
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
Stegen i det här avsnittet fungerar bra om du har kontroll över poddspecifikationen som du distribuerar. I vissa fall har användarna dock ett befintligt stort antal distributioner för Linux-containrar, samt ett ekosystem med vanliga konfigurationer, till exempel Helm-diagram för communityn. Du har inte åtkomst till poddspecifikationen om du inte vill ladda ned och redigera diagrammet.
Om du distribuerar dessa Helm-diagram till en miljö med blandade kluster med både Linux- och Windows-arbetsnoder misslyckas dina programpoddar med felet "ImagePullBackOff". Exempel:
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
I det här fallet kan du använda taints för att hjälpa till med detta. Windows Server-noder kan vara fläckade med nyckel/värde-paret node.kubernetes.io/os=windows:NoSchedule
.
Mer information om taints och toleranser finns i Taints och Toleranser.
Nästa steg
I den här instruktionsguiden har du lärt dig hur du lägger till nodväljare eller taints och toleranser i Kubernetes-kluster med kubectl. Därefter kan du:
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för