La charge de travail migrée échoue sur les versions 1.20 et ultérieures avec les nœuds Ubuntu

AppArmor permet à un administrateur système de limiter les fonctionnalités d'un conteneur déployé. Pour déployer une charge de travail de conteneur migré, Migrate to Containers a besoin du profil AppArmor fourni par le package Linux LXC.

Toutefois, dans le cadre de la mise à jour de Google Kubernetes Engine (GKE) 1.20, les images de nœuds Ubuntu n'incluent plus le package LXC par défaut. Cela signifie que les nouveaux clusters de déploiement qui utilisent des nœuds Ubuntu ou des nœuds Ubuntu pour les clusters de déploiement existants qui sont mis à niveau vers GKE 1.20 et versions ultérieures ne peuvent pas exécuter vos charges de travail migrées.

Lorsque vous déployez des charges de travail de conteneurs sur des nœuds Ubuntu pour GKE 1.20 ou une version ultérieure, la charge de travail peut être bloquée dans une boucle de plantage et les journaux contiennent des messages d'erreur au format suivant :

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

Pour remédier à ce problème :

  1. Connectez-vous au cluster de déploiement à l'aide d'une commande au format suivant :

    gcloud container clusters get-credentials CLUSTER --zone ZONE --project PROJECT
  2. Installez manuellement le package Linux LXC sur le cluster de déploiement à l'aide de la commande suivante :

    migctl setup install --cos-runtime