Sobes.tech
Middle

O que significa o termo 'eviction' ou 'evict' no contexto de DevOps?

sobes.tech IA

Resposta da IA

No contexto do DevOps, especialmente ao trabalhar com sistemas de orquestração de containers como o Kubernetes, "eviction" (ou processo de "evict") significa desalojar (remover) forçosamente um Pod de um nó.

Isso geralmente ocorre devido à falta de recursos no nó, como:

  • Espaço em disco: O nó está perto de esgotar o espaço em disco necessário para os Pods, logs, imagens de containers, etc.
  • Memória: O sistema no nó enfrenta escassez de memória RAM.

Quando o nó atinge um limite de uso de recursos (configurado no Kubelet), ele inicia o processo de evacuação para evitar uma falha total do nó e manter sua estabilidade. A prioridade na evacuação é dada aos Pods com menor prioridade (PriorityClass) e àqueles que consomem mais recursos, excedendo os limites solicitados (QoS de burstable ou best-effort).

// Exemplo de manifesto de Pod com recursos definidos
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  priorityClassName: high-priority // Exemplo de uso de PriorityClass

O Pod desalojado é marcado como Evicted, após o qual o controlador (por exemplo, Deployment) cria uma nova instância do Pod em outro nó com recursos suficientes.

O gerenciamento dos limites de evacuação (eviction thresholds) é uma parte importante para manter a estabilidade do cluster. Isso é configurado através de parâmetros do Kubelet, como:

  • --eviction-hard
  • --eviction-soft
  • --eviction-pressure-transition-period

O monitoramento do uso de recursos nos nós e as políticas de evacuação configuradas ajudam a prevenir a degradação do desempenho e falhas nas aplicações.