En Linux, los grupos de control restringen los recursos que se asignan a los procesos.
El kubelet y el container runtime subyacente necesitan interactuar con los cgroups para aplicar la gestión de recursos para Pods y contenedores, que incluye solicitudes y límites de CPU/memoria para las cargas de trabajo en contenedores.
Existen dos versiones de cgroups en Linux: cgroup v1 y cgroup v2. cgroup v2 es
la nueva generación de la API cgroup.
Kubernetes v1.25 [stable]cgroup v2 es la siguiente versión de la API cgroup de Linux. cgroup v2 proporciona un
sistema de control unificado con capacidades mejoradas de gestión de
recursos.
cgroup v2 ofrece varias mejoras con respecto a cgroup v1, como las siguientes:
Algunas funcionalidades de Kubernetes usan exclusivamente cgroup v2 para una gestión y un aislamiento de recursos mejorados. Por ejemplo, la funcionalidad MemoryQoS mejora la QoS de memoria y se basa en primitivas de cgroup v2.
La forma recomendada de usar cgroup v2 es utilizar una distribución de Linux con cgroup v2 habilitado y configurado de forma predeterminada.
Para comprobar si tu distribución usa cgroup v2, consulta Identificar la versión de cgroup en los nodos Linux.
cgroup v2 tiene los siguientes requisitos:
Para obtener una lista de distribuciones de Linux que usan cgroup v2, consulta la documentación de cgroup v2
Para comprobar si tu distribución está usando cgroup v2, consulta la documentación de tu distribución o sigue las instrucciones en Identificar la versión de cgroup en los nodos Linux.
También puedes habilitar cgroup v2 manualmente en tu distribución de Linux modificando
los argumentos de arranque de la línea de comandos del kernel. Si tu distribución usa GRUB,
systemd.unified_cgroup_hierarchy=1 debe añadirse en GRUB_CMDLINE_LINUX
dentro de /etc/default/grub, seguido de sudo update-grub. Sin embargo, el
enfoque recomendado es usar una distribución que ya habilite cgroup v2 de forma
predeterminada.
Para migrar a cgroup v2, asegúrate de cumplir los requisitos y luego actualiza a una versión del kernel que habilite cgroup v2 de forma predeterminada.
El kubelet detecta automáticamente que el sistema operativo está ejecutando cgroup v2 y actúa en consecuencia, sin necesidad de configuración adicional.
No debería haber ninguna diferencia perceptible en la experiencia de usuario al cambiar a cgroup v2, a menos que los usuarios accedan directamente al sistema de archivos de cgroup, ya sea en el nodo o desde dentro de los contenedores.
cgroup v2 usa una API diferente a la de cgroup v1, por lo que si hay aplicaciones que acceden directamente al sistema de archivos de cgroup, deben actualizarse a versiones más recientes que sean compatibles con cgroup v2. Por ejemplo:
--max-old-space-size.La versión de cgroup depende de la distribución de Linux que se esté usando y de la
versión de cgroup predeterminada configurada en el sistema operativo. Para comprobar qué versión de cgroup usa tu
distribución, ejecuta el comando stat -fc %T /sys/fs/cgroup/ en
el nodo:
stat -fc %T /sys/fs/cgroup/
Para cgroup v2, la salida es cgroup2fs.
Para cgroup v1, la salida es tmpfs.
Kubernetes v1.35 [deprecated]Kubernetes ha declarado obsoleto cgroup v1. Su eliminación seguirá la política de obsolescencia de Kubernetes.
Kubelet ya no se iniciará de forma predeterminada en un nodo con cgroup v1.
Para desactivar este comportamiento, un administrador del clúster debe establecer failCgroupV1 en false en el archivo de configuración de kubelet.