Kubernetes: Criando Pools de Workers usando Labels e NodeSelector: Difference between revisions
No edit summary |
No edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
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. | 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, | 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. | 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. | ||
Line 9: | Line 13: | ||
== Definindo o label para os Workers Nodes == | == Definindo o label para os Workers Nodes == | ||
kubectl label node worker-node10 appDept=RH | # kubectl label node worker-node10 appDept=RH | ||
kubectl label node worker-node11 appDept=Financeiro | # kubectl label node worker-node11 appDept=RH | ||
# kubectl label node worker-node12 appDept=Financeiro | |||
# kubectl label node worker-node13 appDept=Financeiro | |||
Você poderá confirmar usando o comando: | Você poderá confirmar usando o comando: | ||
kubectl label nodes worker-node10 --list | # kubectl label nodes worker-node10 --list | ||
appDept=RH | |||
disk=SSD | |||
kubernetes.io/hostname=worker-node10 | |||
== Definindo o nodeSelector == | == Definindo o nodeSelector == | ||
Line 30: | Line 41: | ||
namespace: default | namespace: default | ||
spec: | spec: | ||
replicas: | replicas: 2 | ||
selector: | selector: | ||
matchLabels: | matchLabels: | ||
Line 69: | Line 80: | ||
E altere somente | E altere somente | ||
name: financeiro-deployment | |||
... | |||
nodeSelector: | |||
'''appDept: Financeiro''' | '''appDept: Financeiro''' | ||
E executamos com o comando: | |||
# kubectl create -f financeiro-deployment.yaml | |||
= Conferindo o resultado = | == Conferindo o resultado == | ||
Você poderá verificar o resultado com o comando | Você poderá verificar o resultado com o comando | ||
Line 84: | Line 96: | ||
NAME READY STATUS RESTARTS AGE IP NODE | NAME READY STATUS RESTARTS AGE IP NODE | ||
rh-deployment-12d9... | rh-deployment-12d9... 2/2 Running 0 12m 172.17.0.5 worker-node10 | ||
financeiro-deployment-4z9f... | 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 | |||
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 = | = Ver também = |
Latest revision as of 21:05, 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 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
# kubectl label node worker-node10 appDept=RH # kubectl label node worker-node11 appDept=RH # kubectl label node worker-node12 appDept=Financeiro # kubectl label node worker-node13 appDept=Financeiro
Você poderá confirmar usando o comando:
# kubectl label nodes worker-node10 --list appDept=RH disk=SSD kubernetes.io/hostname=worker-node10
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:
# 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... 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
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.