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: