Kubernetes: Criando Pools de Workers usando Labels e NodeSelector

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 toda e termos pools de workers nodes para aplicações específicas, como:


 * Por tipo de cliente
 * Por departamentos
 * Por tipo de carga, isto é, uma aplicação 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

 * 1) kubectl label node worker-node10 appDept=RH
 * 1) kubectl label node worker-node11 appDept=RH
 * 1) kubectl label node worker-node12 appDept=Financeiro
 * 1) kubectl label node worker-node13 appDept=Financeiro

Você poderá confirmar usando o comando:

appDept=RH disk=SSD kubernetes.io/hostname=worker-node10
 * 1) 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: 2 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

E executamos com o comando:


 * 1) kubectl create -f financeiro-deployment.yaml

Conferindo o resultado
Você poderá verificar o resultado com o comando

NAME                          READY STATUS  RESTARTS  AGE  IP           NODE rh-deployment-12d9... 2/2  Running  0        12m  172.17.0.5   worker-node10 rh-deployment-348e... 2/2  Running  0        12m  172.17.0.6   worker-node11 financeiro-deployment-4z9f... 2/2  Running  0        13m  172.17.0.7   worker-node12 financeiro-deployment-6765... 2/2  Running  0        13m  172.17.0.8   worker-node13
 * 1) kubectl get pods -o wide

Aqui temos a aplicação de RH executando apenas no works 10 e 11, enquanto a aplicação do financeiro somente no 12 e 13, respectivamente.

= Ver também =


 * Mais Artigos sobre Kubernetes
 * Docker: Trabalhando com Containers
 * Artigos sobre Cloud
 * Mais Artigos sobre Cloud / WebDev / Tecnologias