Sobes.tech
Middle

¿Qué significa el término 'eviction' o 'evict' en el contexto de DevOps?

sobes.tech AI

Respuesta de la IA

En el contexto de DevOps, especialmente al trabajar con sistemas de orquestación de contenedores como Kubernetes, "eviction" (o proceso de "evict") significa desalojar (eliminar) forzosamente un Pod de un nodo.

Esto generalmente ocurre debido a la falta de recursos en el nodo, como:

  • Espacio en disco: El nodo está cerca de agotar el espacio en disco necesario para los Pods, logs, imágenes de contenedores, etc.
  • Memoria: El sistema en el nodo enfrenta una escasez de memoria RAM.

Cuando el nodo alcanza un umbral de uso de recursos (configurado en Kubelet), este inicia el proceso de desalojo para evitar una falla total del nodo y mantener su estabilidad. La prioridad en el desalojo se da a los Pods con menor prioridad (PriorityClass) y a aquellos que consumen más recursos, superando los límites solicitados (QoS de burstable o best-effort).

// Ejemplo de manifiesto de Pod con 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 // Ejemplo de uso de PriorityClass

El Pod desalojado se marca como Evicted, tras lo cual el controlador (por ejemplo, Deployment) crea una nueva instancia del Pod en otro nodo con recursos suficientes.

El manejo de los umbrales de desalojo (eviction thresholds) es una parte importante para mantener la estabilidad del clúster. Esto se configura mediante parámetros de Kubelet, como:

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

El monitoreo del uso de recursos en los nodos y las políticas de desalojo configuradas ayudan a prevenir la degradación del rendimiento y fallos en las aplicaciones.