Gerenciamento de Recursos de hardware com Requests e Limits no k8s
- 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-podObserve 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