已遷移的工作負載無法在 1.20 以上版本的 Ubuntu 節點運作

AppArmor 可讓系統管理員限制已部署容器的功能。如要部署已遷移的容器工作負載,Migrate to Containers 需要 Linux LXC 套件提供的 AppArmor 設定檔。

不過,在 Google Kubernetes Engine (GKE) 1.20 更新中,Ubuntu 節點映像檔預設不再包含 LXC 套件。也就是說,使用 Ubuntu 節點的新部署叢集,或已升級至 GKE 1.20 以上版本的現有部署叢集的 Ubuntu 節點,都無法執行已遷移的工作負載。

在 Ubuntu 節點上部署 GKE 1.20 以上版本的容器工作負載時,工作負載可能會進入當機迴圈,且記錄檔會包含以下格式的錯誤訊息:

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

如何解決這個問題:

  1. 使用下列指令連線至部署叢集:

    gcloud container clusters get-credentials CLUSTER --zone ZONE --project PROJECT
  2. 使用下列指令,在部署叢集中手動安裝 Linux LXC 套件:

    migctl setup install --cos-runtime