Kubernetes: Criando Pools de Workers usando Labels e NodeSelector: Difference between revisions

From Wiki
(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
 
(7 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.


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.


= 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.

Ver também