#DevOps para noobs - Requests x limits no Kubernetes

Camila Figueira - Feb 5 - - Dev Community

No universo do Kubernetes, é essencial não apenas implantar suas aplicações, mas também gerenciar eficientemente os recursos que elas consomem.

Para isso, o Kubernetes oferece recursos como limits (limites) e requests (requisições), que permitem especificar tanto o mínimo quanto o máximo de recursos que uma aplicação pode utilizar. Vamos explorar esses conceitos neste artigo.

O que são Limits e Requests?

Em termos simples, os limits representam a quantidade máxima de recursos, como CPU e memória, que um container pode consumir. Por outro lado, as requests indicam a quantidade mínima de recursos que devem ser reservados para o container.

Image description

No YAML de um Pod, podemos definir esses valores da seguinte forma:

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
   ** resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"**

Enter fullscreen mode Exit fullscreen mode

Neste exemplo, especificamos que nossa aplicação requer no mínimo 64 megabytes de memória e 250 milicores de CPU, enquanto o limite máximo é de 128 megabytes de memória e 500 milicores de CPU, ou seja no limit deixamos uma "brecha" caso ultrapassemos a quantidade de consumo definida no request.

Por que são importantes?

Ao definir esses valores, estamos dando informações valiosas ao Kubernetes Scheduler, que utiliza esses dados para decidir em qual nó do cluster a aplicação será implantada. Isso garante que a aplicação tenha os recursos necessários para funcionar adequadamente.

Kubernetes Scheduler

Sua função principal é selecionar os nós (nodes) do cluster nos quais os pods serão implantados. Isso é feito com base nos requisitos de recursos dos pods, como CPU e memória.

Image description

Gerenciando Recursos Excedentes

Mas e se nossa aplicação exceder os limites definidos?

  1. Throttling (Estrangulamento):
    O Kubernetes pode limitar a quantidade de recursos disponíveis para o container, o que pode resultar em um desempenho reduzido ou mais lento para a aplicação.

  2. Termino do Container: Em situações extremas, se uma aplicação consistentemente consome mais recursos do que o especificado em seus limites, o Kubernetes pode decidir terminar ou reiniciar o container. Isso é feito para proteger a integridade do cluster e garantir que outras aplicações tenham acesso aos recursos necessários.

Conclusão

Estabelecer limites e requisitos adequados para suas aplicações Kubernetes é crucial para garantir um desempenho eficiente e estável do cluster. Ao entender e utilizar corretamente esses recursos, você pode maximizar a utilização dos recursos disponíveis e garantir uma operação tranquila das suas aplicações no Kubernetes.

Referências:

  1. Memory, requests and limits in Kubernetes
  2. Documentação do Kubernetes
. . . . .
Terabox Video Player