cgroup v2 unifica el control de recursos, mejora la gestión de memoria y garantiza la compatibilidad con Kubernetes.
Versiones de cgroup
El kernel de Linux proporciona cgroup v1 y cgroup v2 para limitar, contabilizar y aislar recursos físicos (como CPU, memoria y E/S) en grupos de procesos. cgroup v2 resuelve los problemas de jerarquía múltiple de v1 mediante un modelo de controlador unificado. Las interfaces del sistema de archivos son incompatibles, por lo que las aplicaciones que acceden directamente a cgroupfs deben actualizarse.
Consulte Differences between cgroup v1 and cgroup v2 .
Kubernetes v 1.31 pasó el soporte de cgroup v1 a modo de mantenimiento, y la versión v 1.35 eliminó dicho soporte. Ventajas clave de cgroup v2:
Mayor estabilidad: La contabilización unificada de memoria gestiona eficazmente la caché de páginas. Esto resuelve el problema de cgroup v1, donde las aplicaciones con alta E/S de disco acaparaban la memoria y provocaban eventos OOMKilled.
Jerarquía unificada: Todos los controladores de recursos (como CPU y memoria) comparten una sola jerarquía. Esto elimina los conflictos de configuración causados por las jerarquías paralelas de cgroup v1.
Mejor observability de recursos: Pressure Stall Information (PSI) mide el tiempo de bloqueo en CPU, memoria o E/S. Esto proporciona métricas detalladas para el análisis de cuellos de botella.
Comprobar la versión de cgroup
Log on to a node y ejecute el siguiente comando para comprobar su versión de cgroup.
# Run this command after logging on to the target node
stat -fc %T /sys/fs/cgroup/
# Expected output:
# cgroup2fs --> Indicates cgroup v2
# tmpfs --> Indicates cgroup v1
Procedimiento de migración
Nivel de nodo: Cambiar el sistema operativo
La versión de cgroup de un nodo depende de su sistema operativo.
-
ECS (including EGS) node pools:
Change the operating system a nivel de node pool. Las siguientes operating systems usan cgroup v2 de forma predeterminada:
Alibaba Cloud Linux 3.2104 LTS 64-bit container-optimized
Alibaba Cloud Linux 4 LTS 64-bit container-optimized
ContainerOS 3.3 y posteriores
RHEL 9 y posteriores
Ubuntu 22 y posteriores
-
Reinstale los nodos y vuelva a unirlos al clúster:
-
Elimine el nodo: Remove a Lingjun node del clúster de ACK. De forma opcional, realice un Drain antes de eliminarlo.
El drenado de un nodo requiere otros nodos con recursos suficientes para alojar los Pods desalojados. Asegúrese de que el clúster tenga capacidad suficiente.
Reinstale el sistema operativo: En Lingjun console, reinstall the node con una imagen de sistema operativo compatible con cgroup v2.
Vuelva a unir el nodo al clúster: Add the Lingjun node al clúster de ACK.
-
-
Usted gestiona el sistema operativo. Actualice a un sistema operativo compatible con cgroup v2 para evitar fallos al actualizar o volver a unir nodos.
Nivel de aplicación: Garantizar la compatibilidad de cargas de trabajo
cgroup v1 y v2 tienen estructuras de sistema de archivos y nombres de parámetros incompatibles. Cualquier aplicación que lea directamente /sys/fs/cgroup debe verificarse o actualizarse para cgroup v2.
|
Categoría |
Descripción |
|
Aplicaciones Java |
|
|
Aplicaciones Go |
Si usa uber-go/automaxprocs, actualice a la versión v1.5.1 o posterior. |
|
cAdvisor |
Si despliega cAdvisor como un DaemonSet independiente, actualice a la versión v0.43.0 o posterior. |
|
Nginx Ingress |
Las versiones anteriores pueden provocar errores OOMKilled debido a un análisis incorrecto de núcleos de CPU en cgroup v2. Actualice a la versión v1.11.2 o posterior. Consulte el issue #9665 en GitHub. Para actualizar el Nginx Ingress Controller de ACK, consulte Upgrade the Nginx Ingress Controller component. |
Otras aplicaciones y componentes
Agentes de monitoreo y APM de terceros: Herramientas como Prometheus Node Exporter, Datadog Agent y SkyWalking leen cgroupfs para obtener métricas. Las versiones incompatibles pueden causar pérdida de datos o anomalías. Actualice a una versión compatible con cgroup v2.
Herramientas de seguridad y auditoría: Herramientas como Falco y Sysdig usan datos de cgroup para atribuir eventos. Las versiones incompatibles pueden provocar fallos en reglas de detección o falsos positivos. Actualice a una versión compatible y verifique las reglas en un entorno de pruebas.
Aplicaciones sensibles al rendimiento y scripts personalizados: Los scripts de inicio que leen archivos de cgroup para autoajuste (como establecer el número de hilos según la cuota de CPU) fallarán en cgroup v2 debido a cambios en las rutas. Revise y actualice estos scripts para cgroup v2.
Recomendaciones para producción
-
Compatibilidad de aplicaciones
Compruebe que sus aplicaciones y scripts no dependan de archivos de cgroup v1 como
cpu.cfs_quota_us, ya que cgroup v2 utiliza interfaces incompatibles. -
Configuraciones personalizadas de nodos
Cambiar el sistema operativo restablece el nodo. Utilice las funciones del node pool para conservar modificaciones personalizadas. Temas relacionados:
Monitoreo y alertas: Habilite Alibaba Cloud Prometheus monitoring para observar el estado del clúster y el uso de recursos de los contenedores, lo que permite detectar anomalías rápidamente.