Halaman ini menjelaskan apa yang dimaksud dengan image multi-arsitektur (multi-arch), alasan pentingnya arsitektur node dan image container, dan mengapa image multi-arch memudahkan deployment workload ke cluster GKE. Halaman ini juga memberikan panduan tentang cara memeriksa apakah workload Anda siap dijalankan di Arm, dan cara membuat image multi-arch.
Untuk tutorial tentang cara men-deploy di seluruh arsitektur dengan image multi-arch, lihat Memigrasikan aplikasi x86 di GKE ke multi-arch dengan Arm.
Apa yang dimaksud dengan image multi-arch?
Image multi-arch adalah image yang dapat mendukung beberapa arsitektur. Tampilannya terlihat seperti satu image dengan satu tag, tetapi sebenarnya merupakan daftar image yang menargetkan beberapa arsitektur yang diatur berdasarkan daftar manifes. Image multi-arch kompatibel dengan Docker Image Manifest V2 Scheme 2 atau Spesifikasi Image Indeks OCI. Saat Anda men-deploy image multi-arch ke cluster, GKE secara otomatis memilih image yang tepat yang kompatibel dengan arsitektur node tempat cluster tersebut di-deploy. Setelah memiliki image multi-arch untuk workload, Anda dapat men-deploy workload ini dengan lancar di berbagai arsitektur.
Image multi-arch paling berguna saat Anda ingin menggunakan workload yang sama di seluruh arsitektur. Atau, Anda dapat menggunakan image container dengan satu arsitektur dengan segala jenis node GKE. Jika hanya menggunakan workload pada satu arsitektur dan sudah memiliki image yang kompatibel, Anda tidak perlu membuat image multi-arch.
Jika menggunakan image arch tunggal atau image multi-arch yang kompatibel dengan Arm dan ingin men-deploy-nya ke node Arm, Anda harus mengikuti petunjuk untuk menyertakan kolom yang diperlukan agar GKE menjadwalkan workload seperti yang diharapkan. Untuk mempelajari lebih lanjut, lihat Menyiapkan workload Arm untuk deployment. Anda tidak perlu menambahkan kolom ini untuk menjadwalkan workload jika workload hanya akan dijadwalkan ke node berbasis x86.
Mengapa arsitektur node GKE penting untuk workload?
Node GKE
adalah instance VM Compute Engine individu yang
dibuat dan dikelola oleh GKE untuk Anda. Setiap node adalah jenis mesin standar
(misalnya, t2a-standard-1
) yang menggunakan prosesor x86 (Intel atau AMD) atau
Arm. Untuk mempelajari lebih lanjut, lihat platform CPU.
Anda harus menggunakan image container yang kompatibel dengan arsitektur node tempat Anda ingin menjalankan workload.
Misalnya, jika ingin menjalankan image container dengan arsitektur arm64
,
Anda harus menggunakan jenis mesin yang mendukung workload Arm, seperti t2a-standard-1
dari seri mesin Tau T2A
Anda dapat menggunakan node dengan beberapa jenis arsitektur dalam satu cluster
GKE. Jika ingin menggunakan satu workload di beberapa jenis arsitektur, Anda
harus menyimpan semua image container dan file deployment untuk image
khusus arsitektur. Image multi-arch menyederhanakan proses deployment di berbagai
jenis arsitektur.
Membangun image multi-arch untuk di-deploy di seluruh node x86 dan Arm
Petunjuk berikut ditujukan untuk Developer Aplikasi yang sudah memiliki:
- lingkungan build dengan alat container yang didownload (misalnya, Docker).
- image container yang ada.
Perintah berikut menggunakan Docker, tetapi Anda mungkin dapat menggunakan alat container lain untuk menyelesaikan tugas yang sama.
Apakah workload saya siap untuk Arm?
Jika sudah memiliki image container, Anda dapat memeriksa apakah workload ini siap
dijalankan pada node Arm. Bagian berikut menjelaskan cara melakukannya menggunakan
docker run
untuk mencoba menjalankan penampung dengan arsitektur Arm.
Menyiapkan Docker di lingkungan x86 untuk memeriksa image container
Jika menjalankan Docker di lingkungan x86, Anda harus mendownload paket tambahan
untuk menjalankan image container arm64
. Petunjuk ini menggunakan apt
untuk
pengelolaan paket, tetapi Anda dapat menggunakan pengelola paket lingkungan untuk
mendownload paket yang diperlukan.
Jika menjalankan Docker di lingkungan Arm, Anda dapat melewati bagian ini.
Perintah berikut mendownload paket dan mendaftarkan QEMU sebagai penafsir binfmt untuk arsitektur yang tidak didukung mesin Anda:
sudo apt-get install qemu binfmt-support qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
Setelah menyetel penafsir binfmt, Anda dapat menjalankan image arm64
di lingkungan x86.
Memeriksa workload untuk kesiapan Arm
Jika Anda menjalankan Docker di lingkungan Arm, atau telah menyiapkan lingkungan x86 untuk menjalankan image Arm, jalankan perintah berikut:
docker run --platform linux/arm64 IMAGE_NAME
Ganti IMAGE_NAME
dengan nama image container.
Output berikut menunjukkan bahwa image container Anda siap dijalankan di node Arm dengan cluster GKE:
Hello from Docker!
This message shows that your installation appears to be working correctly.
Jika workload Anda siap dijalankan di Arm, Anda dapat melanjutkan ke Menyiapkan workload Arm untuk deployment.
Output berikut menunjukkan bahwa image Anda belum siap dijalankan di 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
Output ini menunjukkan bahwa ini adalah image x86_64
atau amd64
dan Anda harus
membangun image arm64
. Lanjutkan ke bagian berikutnya, Membangun image multi-arch.
Di sini, Anda dapat menggunakan image container yang tidak kompatibel dengan Arm, Dockerfile, dan
membangun image multi-arch yang dapat berjalan di seluruh jenis arsitektur.
Membangun image multi-arch
Jika memiliki Dockerfile, Anda dapat menggunakannya untuk membangun image multi-arch yang kompatibel dengan Arm dan kompatibel dengan x86 yang dapat di-deploy di berbagai node dengan jenis arsitektur yang berbeda.
Anda harus mendownload Docker Buildx untuk menyelesaikan langkah-langkah berikut. Anda juga harus memiliki Dockerfile yang sudah ada.
Menyiapkan lingkungan jika Anda memiliki VM x86 dan VM Arm
Perintah berikut mengasumsikan bahwa Anda memiliki VM build Arm dan VM build x86 di lingkungan build, dan VM x86 dapat menjalankan SSH sebagai root ke VM Arm Anda. Jika Anda hanya memiliki VM x86 dalam lingkungan build, ikuti petunjuk di bagian berikutnya, Menyiapkan lingkungan jika Anda hanya memiliki VM x86.
Siapkan lingkungan Anda untuk membangun image multi-arch:
Buat konteks untuk node x86 menggunakan soket lokal, dan konteks untuk node Arm menggunakan SSH:
docker context create amd_node --docker "host=unix:///var/run/docker.sock" docker context create arm_node --docker "host=ssh://root@NODE_IP"
Ganti
NODE_IP
dengan alamat IP node Arm.Buat builder menggunakan node 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
Ganti
BUILDER_NAME
dengan nama yang Anda pilih untuk builder Buildx.
Menyiapkan lingkungan jika Anda hanya memiliki VM x86
Jika hanya memiliki VM x86 di lingkungan build, Anda dapat mengikuti langkah-langkah berikut untuk menyiapkan lingkungan pembuatan image multi-arch. Dengan opsi ini, langkah build mungkin memerlukan waktu lebih lama.
Instal paket QEMU:
docker run --rm --privileged multiarch/qemu-user-static
Buat builder multi-arch (builder default tidak mendukung multi-arch):
docker buildx create --name BUILDER_NAME --use
Ganti
BUILDER_NAME
dengan nama yang Anda pilih untuk builder Buildx.
Membangun image
Setelah lingkungan Anda siap, jalankan perintah berikut untuk membangun image multi-arch:
docker buildx build . -t PATH_TO_REGISTRY --platform linux/amd64,linux/arm64 --push
Ganti PATH_TO_REGISTRY
dengan jalur ke registry Anda,
yang diakhiri dengan nama image container dan tag (misalnya, gcr.io/myproject/myimage:latest
).
Jika Anda mendapatkan pesan error pada langkah ini, lihat panduan Docker dan dokumentasi terkait untuk memecahkan masalah lebih lanjut.
Setelah membangun image multi-arch, workload Anda siap dijalankan di Arm. Lanjutkan ke Menyiapkan workload Arm untuk deployment.