Come utilizzare Kubernetes nodeSelector

Come Utilizzare Kubernetes Nodeselector



Il cluster Kubernetes utilizza i vincoli di pianificazione come: contaminazioni, etichette, tolleranze e nodeSelector per separare e pianificare il carico di lavoro su diversi pool di nodi. I vincoli di pianificazione sono un requisito comune in Kubernetes per la gestione dell'infrastruttura. In questo articolo ci concentreremo sui vincoli di pianificazione di nodeSelector. Esploreremo cos'è un nodeSelector, come funziona e come può essere utilizzato in Kubernetes. Presenteremo un semplice scenario per aiutarti a capire come utilizzare in modo efficiente Kubernetes nodeSelector.

Cos'è Kubernetes nodeSelector?

Un nodeSelector è un vincolo di pianificazione in Kubernetes che specifica una mappa sotto forma di una chiave: i selettori di pod personalizzati della coppia di valori e le etichette dei nodi vengono utilizzati per definire la coppia chiave, valore. Il nodeSelector etichettato sul nodo deve corrispondere alla coppia chiave: valore in modo che un determinato pod possa essere eseguito su un nodo specifico. Per pianificare il pod, le etichette vengono utilizzate sui nodi e i nodeSelector vengono utilizzati sui pod. OpenShift Container Platform pianifica i pod sui nodi utilizzando nodeSelector abbinando le etichette.

Inoltre, etichette e nodeSelector vengono utilizzati per controllare quale pod deve essere pianificato su un nodo specifico. Quando utilizzi le etichette e nodeSelector, etichetta prima il nodo in modo che i pod non vengano annullati, quindi aggiungi nodeSelector al pod. Per posizionare un determinato pod su un determinato nodo, viene utilizzato il nodeSelector, mentre il nodeSelector a livello di cluster consente di posizionare un nuovo pod su un determinato nodo presente ovunque nel cluster. Il progetto nodeSelector viene utilizzato per inserire il nuovo pod su un determinato nodo nel progetto.







Prerequisiti

Per utilizzare Kubernetes nodeSelector, assicurati di avere i seguenti strumenti installati nel tuo sistema:



  • Ubuntu 20.04 o qualsiasi altra versione più recente
  • Cluster Minikube con almeno un nodo di lavoro
  • Strumento da riga di comando Kubectl

Passiamo ora alla sezione successiva in cui dimostreremo come utilizzare nodeSelector su un cluster Kubernetes.



Configurazione nodeSelector in Kubernetes

Un pod può essere limitato per poter essere eseguito solo su un nodo specifico utilizzando nodeSelector. Il nodeSelector è un vincolo di selezione del nodo specificato nella specifica del pod PodSpec. In parole semplici, nodeSelector è una funzione di pianificazione che ti dà il controllo sul pod per pianificare il pod su un nodo con la stessa etichetta specificata dall'utente per l'etichetta nodeSelector. Per utilizzare o configurare il nodeSelector in Kubernetes, è necessario il cluster minikube. Avvia il cluster minikube con il comando indicato di seguito:





> avviare minikube

Ora che il cluster minikube è stato avviato con successo, possiamo iniziare l'implementazione della configurazione del nodeSelector in Kubernetes. In questo documento ti guideremo a creare due distribuzioni, una senza nodeSelector e l'altra con nodeSelector.



Configura la distribuzione senza nodeSelector

Innanzitutto, estraiamo i dettagli di tutti i nodi attualmente attivi nel cluster utilizzando il comando fornito di seguito:

> kubectl ottiene i nodi

Questo comando elencherà tutti i nodi presenti nel cluster con i dettagli di nome, stato, ruoli, età e parametri di versione. Vedere l'output di esempio fornito di seguito:

Verificheremo ora quali contaminazioni sono attive sui nodi del cluster in modo da poter pianificare la distribuzione dei pod sul nodo di conseguenza. Il comando sotto riportato serve per ottenere la descrizione delle contaminazioni applicate al nodo. Non dovrebbero esserci contaminazioni attive sul nodo in modo che i pod possano essere facilmente distribuiti su di esso. Quindi, vediamo quali contaminazioni sono attive nel cluster eseguendo il seguente comando:

> kubectl descrive i nodi minikube | presa Contaminare

Dall'output fornito sopra, possiamo vedere che non è stata applicata alcuna contaminazione al nodo, esattamente ciò di cui abbiamo bisogno per distribuire i pod sul nodo. Ora, il passaggio successivo consiste nel creare una distribuzione senza specificare alcun nodeSelector al suo interno. Del resto, utilizzeremo un file YAML in cui memorizzeremo la configurazione di nodeSelector. Il comando qui allegato verrà utilizzato per la creazione del file YAML:

> nano deplond.yaml

Qui, stiamo tentando di creare un file YAML denominato deplond.yaml con il comando nano.

Dopo aver eseguito questo comando, avremo un file deplond.yaml in cui memorizzeremo la configurazione della distribuzione. Vedere la configurazione di distribuzione indicata di seguito:

Ora creeremo la distribuzione utilizzando il file di configurazione della distribuzione. Il file deplond.yaml verrà utilizzato insieme al comando 'create' per creare la configurazione. Vedere il comando completo fornito di seguito:

> kubectl crea -f deplond.yaml

Come mostrato sopra, la distribuzione è stata creata correttamente ma senza nodeSelector. Ora, controlliamo i nodi che sono già disponibili nel cluster con il comando dato di seguito:

> kubectl ottieni i pod

Questo elencherà tutti i pod disponibili nel cluster. Vedere l'output fornito di seguito:

  Testo Descrizione generata automaticamente

Successivamente, dobbiamo modificare il conteggio delle repliche che può essere fatto modificando il file deplond.yaml. Basta aprire il file deplond.yaml e modificare il valore delle repliche. Qui, stiamo cambiando le repliche: 3 in repliche: 30. Vedi la modifica nell'istantanea fornita di seguito:

Ora, le modifiche devono essere applicate alla distribuzione dal file di definizione della distribuzione e ciò può essere fatto utilizzando il seguente comando:

> kubectl si applica -f deplond.yaml

  Testo Descrizione generata automaticamente

Ora, controlliamo più dettagli dei pod usando l'opzione -o wide:

> kubectl ottieni i pod -Il largo

  Testo Descrizione generata automaticamente

Dall'output fornito sopra, possiamo vedere che i nuovi nodi sono stati creati e pianificati sul nodo poiché non vi è alcuna contaminazione attiva sul nodo che stiamo utilizzando dal cluster. Quindi, abbiamo specificamente bisogno di attivare una contaminazione per garantire che i pod vengano pianificati solo sul nodo desiderato. Per questo, dobbiamo creare l'etichetta sul nodo principale:

> kubectl label nodes master on-master= VERO

Configura la distribuzione con nodeSelector

Per configurare il deployment con un nodeSelector, seguiremo lo stesso processo seguito per la configurazione del deployment senza nodeSelector.

Innanzitutto, creeremo un file YAML con il comando 'nano' in cui dobbiamo memorizzare la configurazione della distribuzione.

> nano nd.yaml

Ora, salva la definizione della distribuzione nel file. È possibile confrontare entrambi i file di configurazione per vedere la differenza tra le definizioni di configurazione.

Ora, crea la distribuzione del nodeSelector con il comando indicato di seguito:

> kubectl crea -f nd.yaml

Ottieni i dettagli dei pod usando il flag -o wide:

> kubectl ottieni i pod -Il largo

  Testo, calendario Descrizione generata automaticamente con confidenza media

Dall'output sopra riportato, possiamo notare che i pod vengono distribuiti sul nodo minikube. Modifichiamo il conteggio delle repliche per verificare dove vengono distribuiti i nuovi pod nel cluster.

Applicare le nuove modifiche alla distribuzione utilizzando il seguente comando:

> kubectl si applica -f nd.yaml

  Testo Descrizione generata automaticamente

Conclusione

In questo articolo, abbiamo avuto una panoramica del vincolo di configurazione nodeSelector in Kubernetes. Abbiamo imparato cos'è un nodeSelector in Kubernetes e con l'aiuto di un semplice scenario abbiamo imparato come creare una distribuzione con e senza vincoli di configurazione nodeSelector. Puoi fare riferimento a questo articolo se sei nuovo nel concetto di nodeSelector e trovare tutte le informazioni pertinenti.