Migrar nodos a cgroupv2 de Linux

A partir de la versión 1.33, Google Kubernetes Engine (GKE) migra los clústeres que ejecutan cgroupv1 a cgroupv2. En esta página se explica cómo hacer lo siguiente:

  • Comprueba en qué modo de cgroup se ejecutan los nodos de tu clúster y si tus cargas de trabajo pueden verse afectadas por la transición entre modos de cgroup.
  • Migra los nodos de clústeres de Autopilot de GKE o los grupos de nodos de clústeres estándar a cgroupv2.
  • Inhabilitar temporalmente la migración automática de nodos de GKE con cgroupv1 a cgroupv2. Sigue estas instrucciones si tu clúster ejecuta cargas de trabajo que podrían verse afectadas por la transición entre modos de cgroup.

Puedes saltarte esta página si sabes que tus cargas de trabajo se ejecutan correctamente en cgroupv2 o si no se ven afectadas por la configuración del modo cgroup. GKE migra automáticamente los clústeres que ejecutan cgroupv1 a cgroupv2 con la versión 1.33 y posteriores.

Acerca de los grupos de control de Linux

El kubelet y el tiempo de ejecución del contenedor usan grupos de control (cgroups) del kernel de Linux para gestionar los recursos, como limitar la cantidad de CPU o memoria a la que puede acceder cada contenedor de un pod. Hay dos modos del subsistema cgroup en el kernel: cgroupv1 y cgroupv2. La compatibilidad con Kubernetes para cgroupv2 se introdujo como alfa en la versión 1.18 de Kubernetes, como beta en la 1.22 y como GA en la 1.25. Para obtener más información, consulta la documentación de cgroups v2 de Kubernetes.

Para obtener información sobre cómo configurar un modo de cgroup para clústeres estándar, consulta las opciones de configuración del modo de cgroup de Linux.

Cómo está migrando GKE a cgroupv2

Consulta la siguiente cronología para saber cómo está migrando GKE los clústeres actuales a cgroupv2:

  • En las versiones anteriores a la 1.26, cgroupv1 era el valor predeterminado de los nodos. En las versiones 1.26 o posteriores, cgroupv2 es el valor predeterminado de los nodos nuevos. No se ha producido ningún cambio en los nodos actuales. Para obtener más información sobre el modo de cgroup que usan tus clústeres de GKE de forma predeterminada, consulta Comprobar el modo de cgroup de los nodos de un clúster.
  • En la versión secundaria 1.31, GKE dejará de usar cgroupv1.
  • A partir de la versión 1.33, GKE migra los clústeres que ejecutan cgroupv1 a cgroupv2. Puedes evitar temporalmente esta migración automática especificando explícitamente que un grupo de nodos use cgroupv1.
  • En la versión secundaria 1.35, GKE dejará de admitir cgroupv1.

Para ver una estimación de los plazos de las actualizaciones automáticas a versiones secundarias posteriores, como la 1.31 y la 1.33, consulta la programación estimada de los canales de lanzamiento.

Antes de empezar

Antes de empezar, asegúrate de que has realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la CLI de gcloud, obtén la versión más reciente ejecutando el comando gcloud components update. Es posible que las versiones anteriores de la interfaz de línea de comandos de gcloud no admitan la ejecución de los comandos de este documento.

Comprobar el modo cgroup de los nodos del clúster

El modo de cgroup predeterminado depende del tipo de clúster o grupo de nodos y de la versión. En la versión 1.26 o posteriores, el valor predeterminado es cgroupv2. En la versión 1.25 o anteriores, el valor predeterminado es cgroupv1:

  • En los clústeres Autopilot y los grupos de nodos de clústeres Standard creados con el aprovisionamiento automático de nodos, el modo cgroup se basa en la versión inicial del clúster. No puedes definir el modo de cgroup durante la creación de un clúster de Autopilot. En los nodos aprovisionados automáticamente, no puedes definir el modo de cgroup de forma diferente al modo predeterminado en función de la versión secundaria.
  • En los grupos de nodos de clústeres estándar creados manualmente sin aprovisionamiento automático de nodos, el modo de cgroup se basa en la versión inicial del grupo de nodos o en la configuración personalizada del sistema de nodos.

Para comprobar el modo de cgroup, sigue las instrucciones según el modo de tu clúster.

Autopilot

Ejecuta el siguiente comando:

gcloud container clusters describe CLUSTER_NAME \
    --format='value(nodePools[0].config.effectiveCgroupMode)'

Sustituye CLUSTER_NAME por el nombre de tu clúster.

Si el resultado es EFFECTIVE_CGROUP_MODE_V2, el clúster se está ejecutando en cgroupv2. Si el resultado es EFFECTIVE_CGROUP_MODE_V1, el clúster se está ejecutando en cgroupv1.

Los clústeres de Autopilot de GKE que se crearon inicialmente con la versión 1.25 de GKE o una anterior ejecutan cgroupv1 hasta que los migres.

Estándar

En los clústeres de GKE Standard, el modo de cgroup se define a nivel del grupo de nodos. Para comprobar el modo de los grupos de nodos individuales, sigue las instrucciones para verificar la configuración de cgroup. Si los nodos de tu clúster ya usan cgroupv2, no es necesario que hagas nada más.

Migrar nodos a cgroupv2

Te recomendamos que migres los nodos antes de que GKE los migre automáticamente en la versión 1.33 o posterior.

Sigue estos pasos para migrar los nodos que ejecutan cgroupv1:

  1. Comprueba el modo cgroup de los nodos. Si los nodos de tu clúster ya usan cgroupv2, no es necesario que hagas nada más.
  2. Consulta las consideraciones sobre la migración en el artículo Migrar a cgroup v2 para asegurarte de que tus cargas de trabajo están preparadas para usar la nueva versión de la API.
  3. Migra los nodos de tu clúster.

    Autopilot

    Define explícitamente los nodos de tu clúster para que usen cgroupv2:

    gcloud container clusters update CLUSTER_NAME \
        --autoprovisioning-cgroup-mode=v2
    

    Sustituye CLUSTER_NAME por el nombre de tu clúster.

    Estándar

    1. Si usas el aprovisionamiento automático de nodos en el clúster, ejecuta el siguiente comando para asegurarte de que los grupos de nodos actuales y futuros que se creen con el aprovisionamiento automático de nodos usen cgroupv2:

      gcloud container clusters update CLUSTER_NAME \
          --autoprovisioning-cgroup-mode=v2
      

      Sustituye CLUSTER_NAME por el nombre de tu clúster.

    2. En el caso de los grupos de nodos creados sin aprovisionamiento automático de nodos, actualiza el grupo de nodos para añadir lo siguiente a la configuración del sistema de nodos:

      linuxConfig:
        cgroupMode: 'CGROUP_MODE_V2'
      

      Para obtener más información, consulta Personalizar la configuración del sistema de nodos.

      Cuando creas manualmente grupos de nodos sin aprovisionamiento automático de nodos, GKE usa cgroupv2 de forma predeterminada.

Inhabilitar temporalmente la migración automática a cgroupv2

Para evitar temporalmente la migración automática de los nodos que ejecutan cgroupv1 a cgroupv2 con versiones secundarias 1.33 y posteriores, debes definir explícitamente cgroupv1. También puedes seguir estas instrucciones para volver temporalmente a cgroupv1 si la migración de nodos a cgroupv2 ha provocado un problema en las cargas de trabajo de tu clúster.

Autopilot

Ejecuta el siguiente comando en los clústeres que hayas creado originalmente con la versión 1.25 o una anterior. Si tu clúster se creó con la versión 1.26 o posterior, no puedes definir el modo cgroup en cgroupv1.

Define explícitamente los nodos de tu clúster para que usen cgroupv1:

gcloud container clusters update CLUSTER_NAME \
    --autoprovisioning-cgroup-mode=v1

Sustituye CLUSTER_NAME por el nombre de tu clúster.

Estándar

Para seguir ejecutando cgroupv1 con un grupo de nodos de clúster Estándar de GKE que ejecute la versión 1.33 o una posterior, siga estos pasos:

  1. Si usas el aprovisionamiento automático de nodos y tu clúster se creó con la versión 1.25 o una anterior, utiliza el siguiente comando para asegurarte de que los grupos de nodos que ya tengas y los que crees en el futuro con el aprovisionamiento automático de nodos usen cgroupv1. Si tu clúster se creó con la versión 1.26 o posterior, no puedes definir el modo cgroup en cgroupv1:

    gcloud container clusters update CLUSTER_NAME \
        --autoprovisioning-cgroup-mode=v1
    

    Sustituye CLUSTER_NAME por el nombre de tu clúster.

  2. En el caso de los grupos de nodos Standard, actualiza el grupo de nodos para añadir lo siguiente a la configuración del sistema de nodos:

    linuxConfig:
      cgroupMode: 'CGROUP_MODE_V1'
    

    También debes configurar este nodo para los grupos de nodos que crees manualmente sin el aprovisionamiento automático de nodos.

    Para obtener más información, consulta Personalizar la configuración del sistema de nodos.