La carga de trabajo migrada falla en la versión 1.20 y versiones posteriores con nodos de Ubuntu

AppArmor permite que un administrador del sistema restrinja las capacidades de un contenedor implementado. Para implementar una carga de trabajo de contenedor migrada, Migrate to Containers requiere el perfil de AppArmor que proporciona el paquete LXC de Linux.

Sin embargo, como parte de la actualización a Google Kubernetes Engine (GKE) 1.20, las imágenes de nodo de Ubuntu ya no incluyen el paquete LXC de forma predeterminada. Esto significa que los clústeres de implementación nuevos que usan nodos de Ubuntu, o los nodos de Ubuntu para clústeres de implementación existentes que se actualizan a GKE 1.20 y versiones posteriores, no pueden ejecutar las cargas de trabajo migradas.

Cuando implementas cargas de trabajo de contenedores en nodos de Ubuntu para las versiones 1.20 y posteriores de GKE, la carga de trabajo puede ingresar un bucle de fallas y los registros contienen mensajes de error con el siguiente formato:

D0806 01:59:15.000000 8 hcutil.py:136] SHELL CMD: aa-exec -p lxc-container-default echo 123
D0806 01:59:15.000000 8 hcutil.py:168] SHELL STDERR: b"aa-exec: ERROR: profile 'lxc-container-default' does not exist\n"
D0806 01:59:15.000000 8 hcutil.py:168] SHELL STDERR: b'\n'
D0806 01:59:15.000000 8 hcutil.py:210] SHELL COMPLETED: 1 (aa-exec -p lxc-container-default echo 123)
required AppArmor profile 'lxc-container-default' does not exist, if this pod runs on a
GKE node of type 'Container Optimized OS' (COS) please run
`migctl setup install --cos-runtime` to install it
E0806 01:59:15.000000    8 hcmain.py:22] Traceback (most recent call last):
  File "./hcmain.py", line 19, in safe_action
  File "./hcmain.py", line 74, in run_action
  File "./hcrunner.py", line 392, in validateSystem
Exception: Invalid system or AppArmor profile

E0806 01:59:15.000000 8 hcmain.py:23] Invalid system or AppArmor profile
I0806 01:59:15.000000 8 termination_log.py:4] writing error to termination log at /dev/termination-log

Para solucionar este problema, sigue estos pasos:

  1. Conéctate al clúster de implementación con un comando en el siguiente formato:

    gcloud container clusters get-credentials CLUSTER --zone ZONE --project PROJECT
  2. Instala de forma manual el paquete de LXC de Linux en el clúster de implementación mediante el siguiente comando:

    migctl setup install --cos-runtime