本頁說明多架構 (多重架構) 映像檔的用途、節點和容器映像檔架構的重要性,以及多重架構映像檔如何簡化工作負載在 GKE 叢集的部署作業。本頁面也提供相關指引,說明如何檢查工作負載是否已準備好在 Arm 上執行,以及如何建構多架構映像檔。
如需使用多架構映像檔跨架構部署的教學課程,請參閱「將 GKE 上的 x86 應用程式遷移至 Arm 多架構」。
什麼是多架構映像檔?
多架構映像檔是指支援多種架構的映像檔。這看起來像是具有單一標記的單一映像檔,但實際上是映像檔清單,由資訊清單表整理,可指定多種架構。多架構映像檔與 Docker Image Manifest V2 Scheme 2 或 OCI Image Index Specifications 相容。將多架構映像檔部署至叢集時,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 工作負載」。