Adattare le applicazioni per l'uso nei 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 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. Questa guida pratica descrive come assicurarsi che l'applicazione venga pianificata nel sistema operativo host corretto usando selettori di nodo o taints e tollerazioni.

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 abilitato da Arc.

Selettori nodi

Un selettore di nodo è un campo semplice nella specifica del pod YAML che vincola i pod solo a essere pianificati in nodi integri corrispondenti al sistema operativo. Nella specifica del pod YAML specificare un nodeSelector valore di Windows 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

I contenitori e le tolleranze interagiscono per garantire che i pod non siano pianificati involontariamente nei nodi. Un nodo può essere "tainted" per rifiutare i pod che non tollerano esplicitamente il suo taint tramite una "tolerazione" nella specifica del pod YAML.

I nodi del sistema operativo Windows in AKS Arc possono essere inclusi quando vengono creati con i comandi New-AksHciNodePool o New-AksHciCluster . È anche possibile usare questi comandi per i nodi del sistema operativo Linux taint. Nell'esempio seguente sono presenti nodi Windows.

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 tollerazione per un pod nella specifica del pod YAML. La tollerazione seguente "corrisponde" al taint creato dalla kubectl linea taint illustrata nell'esempio precedente. Il risultato è che un pod con la tollerazione può pianificare nei nodi tainted.

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

I passaggi descritti in questa sezione funzionano bene se si ha il controllo della specifica di pod che si sta distribuendo. In alcuni casi, tuttavia, gli utenti hanno un numero elevato di distribuzioni preesistenti per i contenitori Linux, nonché un ecosistema di configurazioni comuni, ad esempio i grafici Helm della community. Non sarà possibile accedere 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 itaints 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( 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: