Dela via


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: