Nube e infraestructura

Kubernetes v1.34 habilita el swap de nodos para mayor densidad de cargas de trabajo de IA

Kubernetes v1.34 alcanza la disponibilidad general (GA) del swap de nodos, permitiendo a los clústeres usar SSDs NVMe rápidos para paginar memoria inactiva y aumentar significativamente la densidad de pods en cargas de trabajo de IA.

Ilustración de páginas de memoria moviéndose desde módulos de RAM hacia una unidad SSD rápida.
Ilustración generada para este artículo

Traducido automáticamente del original en inglés.

El soporte de Kubernetes para ejecutar nodos con swap habilitado ha alcanzado la Disponibilidad General (GA) en la versión 1.34. Esta actualización permite a los operadores de clústeres utilizar almacenamiento local rápido para gestionar el desbordamiento de memoria, abordando un cuello de botella crítico para las modernas cargas de trabajo de IA agéntica que a menudo permanecen inactivas mientras consumen grandes cantidades de RAM.

Qué sucedió

La capacidad de memoria es frecuentemente el primer límite estricto encontrado en los clústeres de Kubernetes. Los nodos suelen agotar su RAM física mucho antes de que los recursos de CPU estén completamente utilizados. Esta restricción se ha vuelto más aguda con el auge de las cargas de trabajo de IA agéntica, que requieren huellas de memoria sustanciales para inicializar y ejecutar código no confiable. Después de esta ráfaga inicial de actividad, estos agentes a menudo entran en largos períodos de inactividad mientras esperan prompts de usuario. Mantener este estado latente residente en costosa RAM física limita el número de pods que un solo nodo puede alojar, aumentando los costos de infraestructura.

El lanzamiento de Kubernetes v1.34 cambia esta dinámica al apoyar oficialmente el swap de nodos. Al permitir que el kernel de Linux pagee memoria anónima al disco, el swap actúa como un búfer durante picos de tráfico o períodos de suscripción excesiva de memoria. Cuando está respaldado por unidades de estado sólido (SSD) NVMe de alta velocidad, este enfoque permite a los nodos descargar páginas de memoria latentes y empaquetar significativamente más pods en cada máquina. Las pruebas indican que este método puede generar ganancias de densidad de hasta tres veces, a menudo con un impacto mínimo en la latencia.

Históricamente, el swap estaba desaconsejado en entornos de Kubernetes por dos razones principales. Primero, la contabilidad de memoria bajo cgroup v1 trataba la memoria y el swap como un límite combinado, lo que dificultaba aislar y predecir el uso real de memoria de un contenedor. Segundo, el paginación a discos giratorios tradicionales introdujo penalizaciones severas de latencia. El nuevo soporte se basa en cgroup v2, que proporciona una contabilidad de swap separada, y se combina con almacenamiento NVMe rápido para mitigar los problemas de latencia, haciendo que la función sea práctica para uso en producción.

Cómo funciona

El swap de nodos funciona permitiendo que el sistema operativo mueva páginas de memoria inactivas desde la RAM a un espacio de swap designado en el disco. En Kubernetes v1.34, esto se gestiona a través de la configuración del kubelet. Los operadores establecen failSwapOn en false y definen el swapBehavior como LimitedSwap. Esta configuración indica al nodo que use swap solo cuando sea necesario, en lugar de depender de él como memoria principal.

La eficacia de este mecanismo depende en gran medida de la velocidad del almacenamiento subyacente. Al enrutar el swap a Local SSDs, los tiempos de espera de E/S asociados con la paginación se reducen drásticamente. Esta configuración funciona mejor con clases de Calidad de Servicio (QoS) Burstable, donde los límites de memoria del contenedor se establecen más altos que las solicitudes. El nodo luego raciona automáticamente el espacio de swap basado en el uso de memoria de aplicaciones inactivas, manteniendo los procesos activos en la RAM física rápida mientras mueve datos latentes al disco.

Detalles clave

  • Kubernetes v1.34 marca la Disponibilidad General del soporte de swap de nodos.
  • La función requiere cgroup v2 para contabilidad e aislamiento independientes del swap.
  • Las pruebas muestran una reducción del 50% en la huella de RAM para compilaciones del kernel de Linux, pasando de 600 MB a 300 MB.
  • Los pods de Chrome sin interfaz gráfica usando gVisor vieron un aumento de densidad del 100%, pasando de 80 a 160 pods concurrentes.
  • Los sandboxes aislados de Python lograron una mejora de densidad del 200%, escalando de 80 a 240 sesiones concurrentes.
  • Los aumentos de latencia en densidad máxima están impulsados principalmente por la competencia de CPU en lugar de la E/S del swap.

Por qué importa

Para ingenieros que construyen plataformas para agentes de IA o pipelines de CI/CD, este desarrollo ofrece un camino directo para reducir los costos de infraestructura. Las cargas de trabajo agénticas son inherentemente intermitentes; tienen picos durante la inicialización y ejecución de código, luego permanecen inactivas. Sin swap, los operadores deben aprovisionar suficiente RAM para manejar el pico, dejando la mayor parte de esa memoria desperdiciada durante los períodos de inactividad. El swap de nodos permite a los equipos dimensionar correctamente las solicitudes de memoria para el uso activo mientras usan el espacio en disco como una póliza de seguro para los picos.

Esto también impacta las arquitecturas de seguridad. Entornos de ejecución seguros como gVisor o Kata Containers añaden sobrecarga de memoria debido a requisitos de aislamiento. Anteriormente, esta sobrecarga limitaba estrictamente la densidad de pods. Con el swap de nodos, el costo adicional de memoria de estos runtimes seguros puede ser paginado al disco cuando no se usa activamente. Esto significa que los equipos pueden mantener límites estrictos de seguridad para código no confiable sin sacrificar los beneficios económicos de la programación de alta densidad.

Qué puedes hacer

  • Actualiza tus clústeres de Kubernetes a la versión 1.34 o posterior para acceder a las funciones GA de swap de nodos.
  • Configura kubelet con failSwapOn: false y memorySwap.swapBehavior: LimitedSwap.
  • Asegúrate de que tus nodos estén equipados con Local SSDs NVMe rápidos para minimizar la latencia del swap.
  • Establece límites de memoria de contenedor más altos que las solicitudes para habilitar el comportamiento QoS Burstable.
  • Realiza pruebas de rendimiento de tus cargas de trabajo específicas para determinar la relación óptima entre RAM y espacio de swap.
  • Monitorea la contención de CPU en altas densidades, ya que esto se convierte en el cuello de botella principal antes que la E/S del swap.

Herramientas de la Tienda de Bytechap

Seguir leyendo

Todos los artículos