Kubernetes: Criando Pools de Workers usando Labels e NodeSelector: Difference between revisions
(Criou a página com " = Ver também = * Mais Artigos sobre Kubernetes * Docker: Trabalhando com Containers * Artigos sobre Cloud * Tecnologias| Mais Artigos...") |
No edit summary |
||
Line 1: | Line 1: | ||
Um pool de servidores em um cluster Kubernetes é um grupo de Workers Nodes que tem a mesma função ou característica. | |||
Em um exemplo podemos ter um grande cluster Kubernetes para a empresa e termos pools de workers nodes para aplicações específicas, por departamentos, por tipo de carga que necessite um disco SSD ou que tem a necessidade de workers com GPU. | |||
Para que exista essa separação precisamos definir um '''Label''' para um '''Worker Node''', e através de um '''Deployment''' definirmos a opção '''NodeSelector'''. Assim quando o Pod for executar, ele será executado apenas no(s) worker(s) daquele pool. | |||
= Exemplo = | |||
== Definindo o label para os Workers Nodes == | |||
kubectl label node worker-node10 appDept=RH | |||
kubectl label node worker-node11 appDept=Financeiro | |||
Você poderá confirmar usando o comando: | |||
kubectl label nodes worker-node10 --list | |||
== Definindo o nodeSelector == | |||
Criamos o arquivo '''rh-deployment.yaml''' com o conteúdo: | |||
apiVersion: apps/v1 | |||
kind: Deployment | |||
metadata: | |||
labels: | |||
run: nginx | |||
name: rh-deployment | |||
namespace: default | |||
spec: | |||
replicas: 1 | |||
selector: | |||
matchLabels: | |||
run: nginx | |||
template: | |||
metadata: | |||
creationTimestamp: null | |||
labels: | |||
run: nginx | |||
spec: | |||
containers: | |||
- image: nginx | |||
imagePullPolicy: Always | |||
name: nginx2 | |||
ports: | |||
- containerPort: 80 | |||
protocol: TCP | |||
resources: {} | |||
terminationMessagePath: /dev/termination-log | |||
terminationMessagePolicy: File | |||
dnsPolicy: ClusterFirst | |||
restartPolicy: Always | |||
schedulerName: default-scheduler | |||
securityContext: {} | |||
terminationGracePeriodSeconds: 30 | |||
'''nodeSelector:''' | |||
'''appDept: RH''' | |||
E executamos com o comando: | |||
kubectl create -f rh-deployment.yaml | |||
Faça uma cópia do arquivo rh-deployment.yaml para | |||
cp rh-deployment.yaml financeiro-deployment.yaml | |||
E altere somente | |||
name: financeiro-deployment | |||
'''nodeSelector:''' | |||
'''appDept: Financeiro''' | |||
kubectl create -f financeiro-deployment.yaml | |||
= Conferindo o resultado = | |||
Você poderá verificar o resultado com o comando | |||
# kubectl get pods -o wide | |||
NAME READY STATUS RESTARTS AGE IP NODE | |||
rh-deployment-12d9... 1/1 Running 0 12m 172.17.0.5 worker-node10 | |||
financeiro-deployment-4z9f... 1/1 Running 0 13m 172.17.0.6 worker-node11 | |||
Revision as of 20:45, 26 June 2020
Um pool de servidores em um cluster Kubernetes é um grupo de Workers Nodes que tem a mesma função ou característica.
Em um exemplo podemos ter um grande cluster Kubernetes para a empresa e termos pools de workers nodes para aplicações específicas, por departamentos, por tipo de carga que necessite um disco SSD ou que tem a necessidade de workers com GPU.
Para que exista essa separação precisamos definir um Label para um Worker Node, e através de um Deployment definirmos a opção NodeSelector. Assim quando o Pod for executar, ele será executado apenas no(s) worker(s) daquele pool.
Exemplo
Definindo o label para os Workers Nodes
kubectl label node worker-node10 appDept=RH
kubectl label node worker-node11 appDept=Financeiro
Você poderá confirmar usando o comando:
kubectl label nodes worker-node10 --list
Definindo o nodeSelector
Criamos o arquivo rh-deployment.yaml com o conteúdo:
apiVersion: apps/v1 kind: Deployment metadata: labels: run: nginx name: rh-deployment namespace: default spec: replicas: 1 selector: matchLabels: run: nginx template: metadata: creationTimestamp: null labels: run: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx2 ports: - containerPort: 80 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 nodeSelector: appDept: RH
E executamos com o comando:
kubectl create -f rh-deployment.yaml
Faça uma cópia do arquivo rh-deployment.yaml para
cp rh-deployment.yaml financeiro-deployment.yaml
E altere somente
name: financeiro-deployment
nodeSelector: appDept: Financeiro
kubectl create -f financeiro-deployment.yaml
Conferindo o resultado
Você poderá verificar o resultado com o comando
# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE rh-deployment-12d9... 1/1 Running 0 12m 172.17.0.5 worker-node10 financeiro-deployment-4z9f... 1/1 Running 0 13m 172.17.0.6 worker-node11