Adattare le applicazioni per l'uso in cluster Kubernetes con sistema operativo misto

Si applica a: servizio Azure Kubernetes in Azure Stack HCI 22H2, servizio Azure Kubernetes in Windows Server

Il servizio Azure Kubernetes abilitato da Azure Arc consente di eseguire cluster Kubernetes con nodi Linux e Windows, ma è necessario apportare piccole modifiche alle app da usare in questi cluster del sistema operativo misto. In questa guida pratica si apprenderà come assicurarsi che l'applicazione venga pianificata nel sistema operativo host corretto usando selettori di nodo o taints e tolerazioni.

Questo articolo presuppone una conoscenza di base dei concetti relativi a Kubernetes. Per altre informazioni, vedere Concetti di base di Kubernetes per il servizio Azure Kubernetes ibrido.

Selettori nodi

Un selettore di nodo è un campo semplice nella specifica del pod YAML che vincola i pod solo ai nodi integri corrispondenti al sistema operativo. Nella specifica del pod YAML specificare : nodeSelectorWindows o Linux, come illustrato negli esempi seguenti:

kubernetes.io/os = Windows

o

kubernetes.io/os = Linux

Per altre informazioni sui selettori di nodo, vedere Selettori di nodo.

Taint e tolleranze

Le taints e le tolleranze interagiscono per garantire che i pod non siano pianificati in modo involontario nei nodi. Un nodo può essere "tainted" per rifiutare i pod che non tollerano esplicitamente il proprio taint tramite una "tollerazione" nella specifica del pod YAML.

I nodi del sistema operativo Windows in AKS Arc possono essere tainted quando vengono creati con i comandi New-AksHciNodePool o New-AksHciCluster . È anche possibile usare questi comandi per i nodi del sistema operativo Linux.You can also use these commands to taint Linux OS nodes. Nell'esempio seguente i nodi Di Windows sono taints.

Applicare taint al nuovo cluster

Se si crea anche un nuovo cluster, eseguire il comando seguente per creare un pool di nodi Windows con un taint. Se si dispone di un cluster esistente a cui si vuole aggiungere un pool di nodi con un taint, vedere l'esempio successivo, che usa il New-AksHciNodePool comando .

New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Aggiungere un pool di nodi tainted al cluster esistente

Per aggiungere un pool di nodi tainted a un cluster esistente, eseguire il comando seguente:

New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule

Per verificare che il pool di nodi sia stato distribuito correttamente con il taint, eseguire il comando seguente:

Get-AksHciNodePool -clusterName <cluster-name> -name taintnp

Output di esempio:

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}

Specificare la tolleranza per il pod

È possibile specificare una tolleranza per un pod nella specifica del pod YAML. La tollerazione seguente "corrisponde" al taint creato dalla kubectl riga taint illustrata nell'esempio precedente. Il risultato è che un pod con la tolleranza può pianificare nei nodi tainted.

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

I passaggi di questa sezione funzionano bene se si è in controllo della specifica di pod che si sta distribuendo. In alcuni casi, tuttavia, gli utenti hanno un numero elevato di distribuzioni preesistenti per contenitori Linux, nonché un ecosistema di configurazioni comuni, ad esempio i grafici Helm della community. Non si avrà accesso alla specifica del pod, a meno che non si voglia scaricare e modificare il grafico.

Se si distribuiscono questi grafici Helm in un ambiente cluster misto con nodi di lavoro Linux e Windows, i pod dell'applicazione hanno esito negativo con l'errore "ImagePullBackOff". Ad esempio:

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 questa istanza è possibile usare taints per facilitare questa operazione. I nodi di Windows Server possono essere tainted con la coppia node.kubernetes.io/os=windows:NoSchedulechiave-valore .

Per altre informazioni su taints e tolerations, vedere Taints and Tolerations.For more information about taints and tolerations, see Taints and Tolerations.

Passaggi successivi

In questa guida pratica si è appreso come aggiungere selettori di nodo o taints e tolerazioni ai cluster Kubernetes usando kubectl. Successivamente, sarà possibile: