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:
- 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 - Señales:
- Kubernetes envía la señal
SIGTERMa los contenedores del pod. - La aplicación en el contenedor debe ser capaz de capturar
SIGTERMy manejarlo correctamente (por ejemplo, cerrar conexiones actuales, guardar estado). - Si la aplicación no termina tras
SIGTERMenterminationGracePeriodSeconds, se envíaSIGKILL.
- Kubernetes envía la señal
- 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 - 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 - Scripts adicionales o llamadas que se ejecutan en el contenedor justo antes de enviar
- 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.