Gestire pod in cluster Kubernetes multi-pool

Completato

Gli sviluppatori Contoso stanno lavorando alla trasformazione di applicazioni Windows e Linux sviluppate internamente in immagini basate su Docker distribuibili tramite chart Helm. Nella pianificazione dell'implementazione di cluster Kubernetes in Azure Stack HCI, è necessario garantire il supporto per entrambe le piattaforme del sistema operativo.

Che cosa sono i pool di nodi nei cluster Kubernetes in Azure Stack HCI

AKS in Azure Stack HCI supporta più pool di nodi nello stesso cluster Kubernetes. Ogni pool è costituito da macchine virtuali configurate in modo identico, in base alle impostazioni specificate durante il provisioning del pool.

Raggruppando i nodi in pool separati, è possibile scegliere come destinazione le distribuzioni di pod nel set appropriato di macchine virtuali. Ad esempio, è possibile che siano presenti carichi di lavoro in contenitori supportati solo dal sistema operativo Windows o che richiedano hardware specializzato, ad esempio unità processore di grafica.

Controllare la distribuzione dei pod in pool di nodi nei cluster Kubernetes su Azure Stack HCI

Per impostazione predefinita, Kubernetes pianifica il provisioning dei carichi di lavoro in contenitori in tutti i nodi di lavoro disponibili in modo da ottimizzare l'utilizzo delle risorse. Per modificare questo comportamento, è possibile applicare vincoli alla scelta dei nodi in base ai criteri personalizzati specificati. Questi vincoli includono selettori nodi, taint e tolleranze.

Selettori nodi

Selettore nodi è un'impostazione all'interno della definizione basata su YAML di un pod o di una distribuzione che identifica i nodi di destinazione in cui può essere pianificato il pod corrispondente. Se si intende designare i nodi di destinazione in base al sistema operativo, è possibile fare affidamento sulle etichette predefinite assegnate automaticamente ai nodi da Kubernetes. A seconda del sistema operativo previsto, il selettore nodi avrà il formato kubernetes.io/os = Windows o kubernetes.io/os = Linux . Ad esempio, il manifesto del pod basato su YAML seguente designa i nodi Linux come destinazioni di distribuzione:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    kubernetes.io/os = Linux

Taint e tolleranze

Taint e tolleranze offrono un approccio alternativo al controllo del posizionamento dei pod. Con questo approccio, i taint fanno parte della configurazione del nodo e le tolleranze fanno parte delle specifiche del pod. Contaminando un nodo, si impedisce in modo efficace che ospiti qualsiasi pod senza la corrispondente tolleranza specifica del taint.

Ad esempio, in AKS in Azure Stack HCI, se si vuole consentire la pianificazione di un pod in un nodo Windows, è necessario aggiungere la tolleranza seguente alla relativa definizione:

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

Inoltre, è necessario aggiungere il taint node.kubernetes.io/os=Windows:NoSchedule a ogni nodo di Windows che si vuole rendere disponibile esclusivamente per la distribuzione di pod con la tolleranza corrispondente. A tale scopo, è possibile usare l'utilità della riga di comando kubectl e quindi, dopo la connessione al cluster di destinazione, eseguire il comando seguente per ognuno dei nodi nell'ambito (dove il segnaposto <node_name> definisce il nome del nodo di destinazione):

kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule

Nota

I selettori nodi applicano le posizioni dei pod in un set specifico di nodi. Le tolleranze consentono l'esecuzione dei pod in un set designato di nodi non contaminati, ma non ne impediscono il posizionamento nei nodi senza taint.

Verifica delle conoscenze

1.

Contoso sta pianificando la distribuzione di carichi di lavoro Windows e Linux in contenitori in AKS in Azure Stack HCI. È necessario documentare la procedura che garantisce che i pod basati su Windows siano distribuiti nei nodi del cluster Kubernetes che eseguono Windows. A questo scopo si è deciso di usare i taint e le tolleranze. A quale componente del cluster è necessario applicare il taint?