Limite de Hardware | Kubernetes
- Limite de Hardware | Kubernetes
O Kubernetes permite gerenciar e limitar o uso de recursos de hardware como CPU, memória e armazenamento, garantindo um uso eficiente do cluster. Esses limites podem ser aplicados a Pods, Containers, ou Namespaces, com configurações que permitem balancear a utilização de recursos e evitar sobrecarga no cluster.
Tipos de Recursos no Kubernetes
Os recursos principais que podem ser limitados são:
-
CPU:
- Representada em unidades de "núcleos" ou milicores (
m).1= 1 núcleo físico/virtual.100m= 10% de 1 núcleo (0.1 núcleo).
- O Kubernetes compartilha a CPU entre contêineres conforme necessário.
- Representada em unidades de "núcleos" ou milicores (
-
Memória:
- Representada em bytes (ou unidades como
Mi,Gi,Ki).1Gi= 1 gibibyte (1024^3 bytes).512Mi= 512 mebibytes.
- Representada em bytes (ou unidades como
-
Armazenamento:
- Controlado com volumes e Persistent Volume Claims (PVCs).
- Pode ser limitado usando classes de armazenamento.
-
GPU (opcional):
- Para cargas de trabalho que utilizam GPUs, recursos como
nvidia.com/gpupodem ser configurados.
- Para cargas de trabalho que utilizam GPUs, recursos como
Configurando Limites e Requisições
Os limites são configurados no YAML do Pod ou Deployment usando resources.requests e resources.limits:
requests: Quantidade mínima de recursos que o contêiner precisa para ser agendado.limits: Quantidade máxima de recursos que o contêiner pode usar.
Exemplo:
apiVersion: v1
kind: Pod
metadata:
name: exemplo-pod
spec:
containers:
- name: exemplo-container
image: nginx
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
Explicação:
requests:- O Kubernetes reserva 128Mi de memória e 250m de CPU para este contêiner.
limits:- O contêiner não pode usar mais do que 256Mi de memória e 500m de CPU.
Limites por Namespace
Você pode aplicar políticas de limite de recursos a um namespace inteiro usando Resource Quotas.
Exemplo de Resource Quota:
apiVersion: v1
kind: ResourceQuota
metadata:
name: exemplo-quota
namespace: exemplo-namespace
spec:
hard:
requests.cpu: "2"
requests.memory: "4Gi"
limits.cpu: "4"
limits.memory: "8Gi"
pods: "10"
Explicação:
- O namespace
exemplo-namespaceestá limitado a:- 2 CPUs solicitadas no total.
- 4 CPUs no máximo.
- 4Gi de memória solicitada no total.
- 8Gi de memória no máximo.
- 10 Pods no total.
Como o Kubernetes Lida com Limites
-
Scheduler:
- O agendador verifica se os nós têm recursos suficientes para atender aos requisitos de
requests.
- O agendador verifica se os nós têm recursos suficientes para atender aos requisitos de
-
Kubelet:
- Garante que o contêiner não exceda os limites definidos em
limits. - Se um contêiner tentar usar mais memória do que o limite, ele será finalizado com erro de OOM (Out of Memory).
- O uso de CPU acima do limite será controlado (não interrompido).
- Garante que o contêiner não exceda os limites definidos em
-
Eviction:
- Se um nó estiver com pressão de recursos (como pouca memória disponível), o Kubernetes pode evictar pods com prioridades mais baixas ou que excederam os limites.
Comandos Úteis
-
Verificar Configuração de Recurso de um Pod:
kubectl describe pod <pod-name> -
Listar Resource Quotas em um Namespace:
kubectl get resourcequota -n <namespace> -
Verificar o Uso Atual de Recursos:
kubectl describe resourcequota <quota-name> -n <namespace>
Limitações Físicas do Cluster
Além das limitações configuradas para pods e namespaces, o cluster em si possui restrições baseadas no hardware subjacente:
-
Número de nós:
- O limite teórico varia dependendo da versão do Kubernetes e do provedor de nuvem.
- Exemplo: 5.000 nós para clusters gerenciados.
-
Número de pods por nó:
- Configurado pelo
kubeletcom a opção--max-pods. - Geralmente, o padrão é 110 pods por nó.
- Configurado pelo
-
Recursos agregados:
- A soma de CPU, memória e armazenamento disponíveis nos nós define o limite máximo do cluster.
Práticas Recomendadas
-
Sempre definir
requestselimits:- Para evitar competição de recursos e mau comportamento do cluster.
-
Usar Resource Quotas e Limit Ranges:
- Aplique quotas para evitar que namespaces ou projetos consumam recursos além do permitido.
-
Monitoramento:
- Use ferramentas como Prometheus e Grafana para monitorar o uso de recursos no cluster.
-
Teste de carga:
- Teste suas configurações para identificar gargalos e ajustar os limites conforme necessário.
Com essas ferramentas e práticas, você pode garantir que o Kubernetes gerencie eficientemente o hardware disponível e mantenha seu cluster estável e otimizado. 🚀