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 : nodeSelector
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
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:NoSchedule
chiave-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:
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per