本頁說明什麼是多架構 (多架構) 映像檔、節點和容器映像檔的架構為何重要,以及多架構映像檔為何能簡化將工作負載部署至 GKE 叢集的作業。此外,本頁也說明如何確認工作負載是否能在 Arm 上執行,以及如何建構多架構映像檔。
如需使用多架構映像檔跨架構部署的教學課程,請參閱「將 GKE 上的 x86 應用程式遷移至 Arm 多架構」。
什麼是多架構映像檔?
多架構映像檔可支援多種架構。這看起來像是具有單一標記的單一圖片,但實際上是透過資訊清單清單整理,以多種架構為目標的圖片清單。多架構映像檔與 Docker 映像檔資訊清單 V2 結構定義 2 或 OCI 映像檔索引規格相容。將多架構映像檔部署至叢集時,GKE 會自動選擇與部署節點架構相容的正確映像檔。工作負載有多架構映像檔後,您就能在多種架構中順暢部署這項工作負載。
如果您想在不同架構中使用相同的工作負載,多架構映像檔就非常實用。或者,您也可以將單一架構的容器映像檔與任何類型的 GKE 節點搭配使用。如果您只在一個架構上使用工作負載,且已有相容的映像檔,則不需要建構多架構映像檔。
如果您使用與 Arm 相容的單一架構或多重架構映像檔,並想將其部署至 Arm 節點,請務必按照操作說明加入必要欄位,確保 GKE 能如期排定工作負載。詳情請參閱「準備要用於部署的 Arm 工作負載」。 如果工作負載只會排給 x86 型節點,則不必新增這些欄位來排定工作負載。
為什麼 GKE 節點的架構對工作負載很重要?
GKE 節點
是個別的 Compute Engine VM 執行個體,由 GKE
代為建立及管理。每個節點都屬於標準機型 (例如 t2a-standard-1),使用 x86 (Intel 或 AMD) 或 Arm 處理器。詳情請參閱「CPU 平台」。
您必須使用與節點架構相容的容器映像檔,才能在該節點上執行工作負載。
舉例來說,如要執行 arm64 架構的容器映像檔,您必須使用支援 Arm 工作負載的機型,例如Tau T2A 機器系列的 t2a-standard-1。您可以在單一 GKE 叢集中使用多種架構類型的節點。如要在多個架構類型中使用一個工作負載,您必須整理所有架構專屬映像檔的容器映像檔和部署檔案。多架構映像檔可簡化跨架構類型的部署程序。
建構多架構映像檔,以便在 x86 和 Arm 節點之間部署
下列操作說明適用於已具備以下條件的應用程式開發人員:
- 建構環境,並下載容器工具 (例如 Docker)。
- 現有容器映像檔。
下列指令使用 Docker,但您或許可以使用其他容器工具完成相同工作。
我的工作負載是否適合 Arm?
如果您有現有的容器映像檔,可以檢查這項工作負載是否已準備好在 Arm 節點上執行。以下各節說明如何使用 docker run 嘗試執行採用 Arm 架構的容器。
在 x86 環境中準備 Docker,以便檢查容器映像檔
如果您在 x86 環境中執行 Docker,必須下載其他套件才能執行 arm64 容器映像檔。這些操作說明使用 apt 管理套件,但您可以使用環境的套件管理工具下載必要套件。
如果您在 Arm 環境中執行 Docker,可以略過這個部分。
下列指令會下載套件,並將 QEMU 註冊為機器不支援的架構的 binfmt 解譯器:
sudo apt-get install qemu binfmt-support qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
設定 binfmt 解譯器後,即可在 x86 環境中執行 arm64 映像檔。
檢查工作負載是否已準備好使用 Arm
如果您在 Arm 環境中執行 Docker,或是已準備好 x86 環境來執行 Arm 映像檔,請執行下列指令:
docker run --platform linux/arm64 IMAGE_NAME
將 IMAGE_NAME 替換為容器映像檔名稱。
下列輸出內容表示容器映像檔已準備就緒,可在 GKE 叢集的 Arm 節點上執行:
Hello from Docker!
This message shows that your installation appears to be working correctly.
如果工作負載已可在 Arm 上執行,請前往「準備要用於部署的 Arm 工作負載」。
以下輸出內容表示映像檔尚未準備好在 Arm 上執行:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
93288797bd35: Pull complete
Digest: sha256:507ecde44b8eb741278274653120c2bf793b174c06ff4eaa672b713b3263477b
Status: Downloaded newer image for hello-world:latest
standard_init_linux.go:219: exec user process caused: exec format error
這項輸出內容表示這是 x86_64 或 amd64 映像檔,您必須建構 arm64 映像檔。請前往下一節「建構多架構映像檔」,使用不相容於 Arm 的容器映像檔和 Dockerfile,建構可在各種架構類型上執行的多架構映像檔。
建構多架構映像檔
如果您有 Dockerfile,可以使用該檔案建構與 Arm 和 x86 相容的多架構映像檔,並部署至不同架構類型的節點。
您必須下載 Docker Buildx,才能完成下列步驟。您也必須有現有的 Dockerfile。
如果您有 x86 VM 和 Arm VM,請準備環境
下列指令假設您在建構環境中同時有 Arm 建構 VM 和 x86 建構 VM,且 x86 VM 可以透過 SSH 以根身分連線至 Arm VM。如果建構環境中只有 x86 VM,請按照下一節的說明操作:「準備環境 (如果只有 x86 VM)」。
準備建構多架構映像檔的環境:
使用本機通訊端建立 x86 節點的情境,並使用 SSH 建立 Arm 節點的情境:
docker context create amd_node --docker "host=unix:///var/run/docker.sock" docker context create arm_node --docker "host=ssh://root@NODE_IP"將
NODE_IP替換為 Arm 節點的 IP 位址。使用 x86 節點建立建構工具:
docker buildx create --use --name BUILDER_NAME --platform linux/amd64 amd_node docker buildx create --append --name BUILDER_NAME --platform linux/arm64 arm_node將
BUILDER_NAME替換為您為 Buildx 建構工具選擇的名稱。
如果您只有 x86 VM,請準備環境
如果建構環境中只有 x86 VM,請按照下列步驟準備環境,建構多架構映像檔。使用這個選項時,建構步驟可能需要較長時間。
安裝 QEMU 套件:
docker run --rm --privileged multiarch/qemu-user-static建立多架構建構工具 (預設建構工具不支援多架構):
docker buildx create --name BUILDER_NAME --use將
BUILDER_NAME替換為您為 Buildx 建構工具選擇的名稱。
建構映像檔
環境準備就緒後,請執行下列指令來建構多架構映像檔:
docker buildx build . -t PATH_TO_REGISTRY --platform linux/amd64,linux/arm64 --push
將 PATH_TO_REGISTRY 替換為登錄檔的路徑,結尾為容器映像檔的名稱和標記 (例如 gcr.io/myproject/myimage:latest)。
如果在此步驟中收到錯誤訊息,請參閱 Docker 指南和相關說明文件,進一步排解問題。
建構多架構映像檔後,工作負載即可在 Arm 上執行。請繼續參閱「準備要用於部署的 Arm 工作負載」。