La migrazione del carico di lavoro ha esito negativo nella versione 1.20 e successive con nodi Ubuntu

AppArmor consente a un amministratore di sistema di limitare le funzionalità di un contenitore di cui è stato eseguito il deployment. Per eseguire il deployment di un carico di lavoro del contenitore sottoposto a migrazione, Migrate to Containers richiede il profilo AppArmor fornito dal pacchetto LXC di Linux.

Tuttavia, nell'ambito dell'aggiornamento a Google Kubernetes Engine (GKE) 1.20, le immagini dei nodi Ubuntu non includono più il pacchetto LXC per impostazione predefinita. Ciò significa nuovi cluster di deployment utilizzare nodi Ubuntu o nodi Ubuntu per i cluster di deployment esistenti di cui è stato eseguito l'upgrade a GKE 1.20 e versioni successive, non possono eseguire i carichi di lavoro di cui è stata eseguita la migrazione.

Quando esegui il deployment di carichi di lavoro dei container sui nodi Ubuntu per le versioni GKE 1.20 e successive, il carico di lavoro può entrare in un loop di arresto anomalo e i log contengono messaggi di errore nel seguente 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

Per risolvere il problema:

  1. Connettiti al cluster di deployment utilizzando un comando nel formato:

    gcloud container clusters get-credentials CLUSTER --zone ZONE --project PROJECT
  2. Installa manualmente il pacchetto Linux LXC sul cluster di deployment utilizzando il comando:

    migctl setup install --cos-runtime