Adattare le app per i cluster Kubernetes misti usando i selettore di nodi o le taints e le tolerazioni nel servizio Azure Kubernetes ibrido

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

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

Questa guida presuppone una comprensione di base dei concetti di Kubernetes. Per altre informazioni, vedere Concetti di base di Kubernetes per il servizio Azure Kubernetes ibrido.

Selettori nodi

Un selettore di nodi è un campo semplice nella specifica del pod YAML che limita i pod solo a essere pianificati in nodi integri corrispondenti al sistema operativo. Nella specifica del pod YAML specificare un nodeSelector oggetto per Windows o Linux, come illustrato negli esempi seguenti.

kubernetes.io/os = Windows

o

kubernetes.io/os = Linux

Per altre informazioni, vedere Selettore di nodi.

Taint e tolleranze

Taints e tolerations funzionano insieme per garantire che i pod non siano pianificati in modo imprevisto nei nodi. Un nodo può essere "tainted" non accettare pod che non tollerano esplicitamente il suo taint tramite una "tolerazione" nella specifica del pod YAML.

I nodi del sistema operativo Windows nell'ambiente ibrido del servizio Azure Kubernetes possono essere tainted quando vengono creati con il comando New-AksHciNodePool o il comando New-AksHciCluster . È anche possibile usare questi comandi per modificare i nodi del sistema operativo Linux. 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, passare all'esempio successivo, che usa il New-AksHciNodePool comando .

New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType windows -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 -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 tolerazione per il pod

Specificare una tolerazione per un pod nella specifica del pod YAML. La tolerazione seguente "corrisponde" il taint creato dalla kubectl linea taint illustrata sopra. Il risultato è che un pod con la tolerazione sarà in grado di pianificare nei nodi tainted.

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

Uso di taints quando non è possibile accedere alla specifica del pod

I passaggi in questa sezione funzionano bene se si è in controllo della specifica del pod che si sta distribuendo. Tuttavia, in alcuni casi, gli utenti hanno un numero elevato di distribuzioni preesistenti per contenitori Linux, nonché un ecosistema di configurazioni comuni, ad esempio 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 avranno esito negativo con l'errore "ImagePullBackOff", ad esempio:

C:\>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 è consigliabile esaminare l'uso di taints per facilitare questa operazione. I nodi di Windows Server possono essere tainted con la coppia chiave-valore seguente: node.kubernetes.io/os=windows:NoSchedule

Per altre informazioni sulle taints e le tolerazioni, visitare Taints e Tolerations.

Passaggi successivi

In questa guida introduttiva si è appreso come aggiungere selettori o tolerazioni dei nodi ai cluster Kubernetes usando kubectl. Successivamente, sarà possibile: