Sobes.tech
Middle+

¿Por qué factores se logra una finalización correcta del nodo dependiendo de la prioridad del pod?

sobes.tech AI

Respuesta de la IA

El cierre correcto de un nodo se logra mediante los siguientes factores:

  1. Timeouts:
    • terminationGracePeriodSeconds: Define el tiempo durante el cual el nodo intentará cerrar correctamente los pods antes de destruirlos de forma forzada. Por defecto, 30 segundos.
    • pod.spec.terminationGracePeriodSeconds: Se puede sobrescribir el timeout para un pod específico.
    # Ejemplo de manifiesto de un pod con un timeout de cierre aumentado
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-with-grace-period
    spec:
      containers:
      - name: my-container
        image: my-image
      terminationGracePeriodSeconds: 60 # Timeout aumentado
    
  2. Señales:
    • Kubernetes envía la señal SIGTERM a los contenedores del pod.
    • La aplicación en el contenedor debe ser capaz de capturar SIGTERM y manejarlo correctamente (por ejemplo, cerrar conexiones actuales, guardar estado).
    • Si la aplicación no termina tras SIGTERM en terminationGracePeriodSeconds, se envía SIGKILL.
  3. Prioridad del pod (priorityClassName):
    • En caso de desplazamiento (por ejemplo, por falta de recursos o evacuación del nodo), los pods con menor prioridad se terminan primero.
    • Esto garantiza que los pods críticos (de alta prioridad) funcionen más tiempo y tengan más oportunidad de cerrarse correctamente si el nodo se vuelve inaccesible.
    # Ejemplo de manifiesto de un pod con una prioridad especificada
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-priority-pod
    spec:
      containers:
      - name: my-container
        image: my-image
      priorityClassName: high-priority # Uso de la clase de prioridad
    
  4. Hooks PreStop:
    • Scripts adicionales o llamadas que se ejecutan en el contenedor justo antes de enviar SIGTERM.
    • Pueden usarse para realizar sincronizaciones, desuscripciones de servicios u otras tareas necesarias para una finalización correcta.
    # Ejemplo de hook PreStop
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-with-prestop
    spec:
      containers:
      - name: my-container
        image: my-image
        lifecycle:
          preStop:
            exec:
              command: ["/bin/sh", "-c", "echo 'Stopping container...' && sleep 5 && exit 0"] # Comando de ejemplo
    
  5. Gestión de puntos finales (Endpoints):
    • Kubernetes elimina la IP del pod del objeto Endpoints del Service al comenzar la finalización, para que el nuevo tráfico no se dirija al pod que se está cerrando.
    • Esto permite que las conexiones existentes finalicen durante el período de gracia.

En conjunto, estos mecanismos permiten a Kubernetes gestionar el proceso de cierre de los pods en el nodo, considerando su prioridad, brindándoles la oportunidad de cerrarse correctamente y evitando la destrucción forzada cuando sea posible.