Anpassa program för användning i Kubernetes-kluster med blandat operativsystem
Gäller för: AKS på Azure Stack HCI 22H2, AKS på Windows Server
MED AKS som aktiveras av 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 blandat operativsystem. Den här instruktionsguiden beskriver hur du ser till att programmet schemaläggs på rätt värdoperativsystem med 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 Kubernetes kärnbegrepp för AKS som aktiveras av Arc.
Nodväljare
En nodväljare är ett enkelt fält i poddspecifikationens YAML som begränsar poddar till att endast schemaläggas till felfria noder som matchar operativsystemet. I yaml-specifikationen för din podd anger du ett nodeSelector
värde för Windows eller Linux, som du ser i följande exempel:
kubernetes.io/os = Windows
eller
kubernetes.io/os = Linux
Mer information om nodväljare finns i nodväljare.
Taints och toleranser
Taints och toleranser fungerar tillsammans för att säkerställa att poddar inte oavsiktligt schemaläggs 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 visas Windows-noder.
Tillämpa taint på nytt kluster
Om du också 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 fläckad nodpool i ett befintligt kluster
Om du vill lägga till en fläckad 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 taint-raden kubectl
som visas i föregående exempel. Resultatet är att en podd med toleransen kan schemaläggas till de fördärvade 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 blandad klustermiljö med både Linux- och Windows-arbetsnoder misslyckas programpoddarna med felet "ImagePullBackOff". Till 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 fläckas med nyckel/värde-paret node.kubernetes.io/os=windows:NoSchedule
.
Mer information om taints och toleranser finns i Taints och Tolerations.
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 dina Kubernetes-kluster med kubectl. Sedan kan du: