Come utilizzare i selettori di nodo in Kubernetes
Su questa pagina
- Prerequisiti
- Cosa faremo
- Configura i selettori di nodo
- Conclusione
Possiamo limitare un pod in modo che possa essere eseguito solo su un particolare nodo. Ci possono esserci alcune situazioni in cui potremmo desiderare un maggiore controllo su un nodo in cui atterra un pod.
nodeSelector è una delle forme di vincolo di selezione dei nodi. nodeSelector è un campo di PodSpec. Si tratta di una semplice funzionalità di pianificazione dei pod che consente di pianificare un pod su un nodo le cui etichette corrispondono alle etichette nodeSelector container.style.width=100%;var ins=document.createElement(ins);ins.id=slotId+-asloaded;ins. className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive=true;}
Per saperne di più su Node Selects, fai clic qui per andare alla pagina ufficiale di Kubernetes.
In questo articolo, non avremo alcuna contaminazione sul nodo master in modo che i pod possano essere distribuiti anche sul nodo master. Quindi creeremo i pod per vederli distribuiti sul nodo di lavoro e sul nodo principale. Quindi allegheremo un'etichetta al nodo master e ai point pod per eseguire il deployment sul nodo master solo utilizzando nodeSelector.
Prerequisiti
- Cluster Kubernetes con almeno 1 nodo di lavoro.
Se vuoi imparare a creare un cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu 18.04 EC2.
Cosa faremo
- Configura selettori di nodo
Configura i selettori di nodo
Innanzitutto, estraiamo i dettagli dei nodi nel cluster utilizzando il seguente comando.
kubectl get nodes #Get nodes available in the cluster
kubectl describe nodes node01 | grep Taint #Describe node1 node to extract details regarding Taints
kubectl describe nodes master | grep Taint #Describe master node to extract details regarding Taints
Quanto sopra mostra che i nodi non hanno contaminazioni, ciò significa che i pod possono essere posizionati su qualsiasi nodo, sia su master che su node01.
Ora, creiamo una distribuzione che non contiene alcun selettore di nodo.
vim my-deployment-without-node-selector.yaml #Create a deployment definition
apiVersion: apps/v1 kind: Deployment metadata: labels: app: frontend name: frontend spec: replicas: 3 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - image: httpd:2.4-alpine name: frontend
Ora siamo pronti per creare una distribuzione utilizzando il seguente comando.
kubectl get pods #Get pods available in the cluster
kubectl create -f my-deployment-without-node-selector.yaml #Create a deployment
kubectl get pods ##Get nodes available in the cluster
Ora, modifica il numero di repliche nella distribuzione modificando il file e applica le modifiche.
kubectl apply -f my-deployment-without-node-selector.yaml #Apply changes made in the deployment definition file
kubectl get pods -o wide # Get more details regarding pods using -o wide option
Nello screenshot sopra, si può vedere che vengono creati nuovi pod e che vengono pianificati anche sul nodo master.
La ragione di ciò è che entrambi i nodi, master e node01, non hanno contaminazioni.
Quindi, per limitare la pianificazione e assicurarsi che i pod ottengano posti solo sul nodo master, creiamo un'etichetta sul nodo master.
kubectl label nodes master on-master=true #Create a label on the master node
kubectl describe node master #Get more details regarding the master node
Nello screenshot qui sopra, si può vedere che il nodo master ha un'etichetta come \on-master=true\
Ora, creiamo un nuovo deployment con nodeSelector:on-master=true al suo interno per assicurarci che i pod vengano implementati solo sul nodo master.
vim my-deployment-with-node-selector.yaml #Create a deployment definition file
apiVersion: apps/v1 kind: Deployment metadata: name: streamer-v4-deployment labels: app: streamer-v4 spec: replicas: 2 selector: matchLabels: app: streamer-v4 template: metadata: labels: app: streamer-v4 spec: containers: - name: streamer-v4 image: nginx ports: - containerPort: 8880 nodeSelector: on-master: "true"
È ora possibile creare una nuova distribuzione con nodeSelector con il seguente comando.
kubectl create -f my-deployment-with-node-selector.yaml #Create a deployment
kubectl get pods -o wide | grep streamer-v4-deployment #Get more details of the pods
Nello screenshot sopra, si può vedere che i pod sono stati distribuiti solo sul nodo master.
Ora, cambiamo \replica=50\ per vedere dove verranno distribuiti i pod.
vim my-deployment-with-node-selector.yaml #Change a deployment definition
Applica le modifiche più recenti con un comando indicato di seguito.
kubectl apply -f my-deployment-with-node-selector.yaml #Apply changes to the deployment
Qui puoi vedere che tutti i pod vengono creati e distribuiti solo sul nodo \master\.
Conclusione
In questo articolo abbiamo visto come i pod possono essere limitati per essere distribuiti sul nodo specifico solo utilizzando label e nodeSelector.
Abbiamo anche visto che se il nodo master non ha Taint, i pod possono essere distribuiti su di esso.