top of page

Gerenciamento de Recursos de hardware com Requests e Limits no k8s

  • Foto do escritor: Rodrigo Saito
    Rodrigo Saito
  • há 20 horas
  • 3 min de leitura

Fala pessoal, tudo bem?


Gerenciar recursos é fazer com que o seu hardware possa ser controlado e aplicado conforme a aplicação necessita para entregar o que é necessário para um determinado momento.


Requests de Recursos


Requests de recursos são o mínimo de recursos necessários para a aplicação. Quando configuramos um Pod com determinado container, definimos a quantidade mínima de memória, processador.


Recursos do K8s são requisitados por container e NÃO por Pod.


Recursos requisitados por Pods são iguais a somatória de todos os recursos requisitados de todos os containers do seu Pod. Exemplo: Se voce tem dentro do seu Pod 1 container apenas, os recursos apresentados serão para 1 container. Se voce tem dentro do seu Pod 2, 3, 4 ou mais containers, será feito uma somatória de todos os recursos necessários mínimos para que a sua aplicação possa executar. Ele vai somar quantos containers têm no seu Pod sabendo qual é a quantidade de recursos mínimos que eles executem.


O escalador do K8s garante que a somatória das reequisições de todos os Pods não exceda a capacidade do Node.


Os recursos do Pod são mandatórios aos recursos de container


Fazendo a implementação de requests


Faça a criaçãode um novo arquivo dentro de sua pasta preferida com o nome de my-resources-pod.yaml, tendo o seguinte conteúdo, salvando o arquivo:

apiVersion: v1
kind: Pod
metadata:
  name: resources-pod
spec:
  containers:
  - name: apache-container
    image: httpd
  resources:
      requests:
        cpu: "500m"
        memory: "128Mi"

Dentro do container apache-conainter, teremos os recursos mínimos:

  • Cpu: 500m quer dizer que estamos definindo o recurso mínimo de 1/2 CPU

  • Memory 128Mi quer dizer que estamos definindo o recurso mínimo de 128 Megabytes


Vamos aplicar o arquivo:

kubectl apply -f my-resources-pod.yaml

Vamos fazer uma análise desse recurso:

kubectl describe pod/resources-pod

Observe na seção Requests, ele está respeitando o que configuramos no arquivo.


Vamos fazer a limpeza do nosso Pod:


kubectl get pods
kubectl delete pods resources-pod

Utilizando a tag Limits


A tag Limits define qual é o máximo de recursos que o seu container pode utilizar. Grande parte das vezes devemos definir o mínimo e o máximo de recursos para os nossos containers.


Abra o mesmo arquivo my-resources-pod.yaml, e acrescente o seguinte código e salve o arquivo:

apiVersion: v1
kind: Pod
metadata:
  name: resources-pod
spec:
  containers:
  - name: apache-container
    image: httpd
  resources:
      requests:
        cpu: "500m"
        memory: "128Mi"
      limits:
        cpu: "1000m"
        memory: "256Mi"

Vamos fazer novamente a aplicação desse mesmo arquivo:

kubectl apply -f my-resources-pod.yaml

Vamos ver os detalhes do serviço:

kubectl describe pod/resources-pod

Agora temos a definição do Limit e Requests em um único arquivo.


É totalmente possível utilizamos 1/4 de CPU, colocando 250m (mili-Cpus), ou 1/3 de CPU, colocando 333Mi.


Vamos fazer a limpeza do nosso cluster

kubectl delete pod/resources-pod


Gerenciamento de recursos de Pods com múltiplos Containers


Os recursos estão relacionados aos containers, ou seja, fazemos a limitação de requests ou limits baseados em containers, e NÃO aos Pods.


Isso quer dizer que podemos ter uma diversidade de containers no mesmo Pod, onde cada um desses containers terão uma definição de recursos totalmente diferentes se necessário.


Vamos editar o mesmo arquivo my-resources-pod.yaml e vamos modificar o conteúdo abaixo e salve o arquivo:


apiVersion: v1
kind: Pod
metadata:
  name: resources-pod
spec:
  containers:
  - name: apache-container
    image: httpd
  resources:
      requests:
        cpu: "500m"
        memory: "128Mi"
      limits:
        cpu: "1000m"
        memory: "256Mi"
- name: redis-container
    image: redis
    resources:
      requests:
        cpu: "400m"
        memory: "64Mi"
      limits:
        cpu: "500m"
        memory: "128Mi"

Aplique o arquivo novamente:

kubectl apply -f my-resources-pod.yaml

Vamos detalhar o Pod criado, e podemos verificar que ele é maior. Execute o seguinte comando:

kubectl describe pod/resources-pod

Observe que agora temos os 2 containers apache e redis, com recursos definidos:



Veja que no final do log, podemos ver os 2 containers foram devidamente criados:


Execute o comando:

kubectl get pods

Dentro do Pod, está em READY 2/2, ou seja, 2 containers prontos e executandos dentro desse Pod.


Para finalizar, vamos limpar este recurso

kubectl get pods
kubectl delete pod/resources-pod

Gostou?


Obrigado e até mais!






Comentários


Nunca perca um post. Assine agora!

Caso queira receber noticias sobre o blog, assine!

© 2022 por datalib

  • Ícone do Facebook Cinza
  • Ícone do Linkedin Cinza
bottom of page