Halaman ini menjelaskan cara menyiapkan workload yang akan dijadwalkan di node Arm di cluster GKE Standard. Untuk mempelajari lebih lanjut cara menjadwalkan workload Arm menggunakan Autopilot, lihat Men-deploy workload Autopilot pada arsitektur Arm.
Agar berhasil menjadwalkan workload ke node Arm, Anda harus memiliki item berikut:
- Image container yang kompatibel dengan Arm. Untuk mendapatkan panduan cara memeriksanya, lihat Apakah workload saya siap untuk Arm?
- Aktifkan node yang dapat menjadwalkan workload yang kompatibel dengan Arm. Untuk membuat resource yang diperlukan, lihat Membuat cluster dan node pool dengan node Arm.
- Cluster di Google Cloud region atau zona yang memiliki mesin virtual (VM) Arm yang tersedia. Untuk tabel platform dan jenis mesin yang dapat difilter, lihat Region dan zona yang tersedia.
Ringkasan
Secara default, GKE menjadwalkan workload hanya ke node berbasis x86—seri mesin Compute Engine dengan prosesor Intel atau AMD—dengan menempatkan taint (kubernetes.io/arch=arm64:NoSchedule) di semua node Arm. Taint ini mencegah workload yang kompatibel dengan x86 dijadwalkan tanpa sengaja ke node Arm Anda.
Anda dapat menghapus taint default ini secara opsional jika ingin workload yang kompatibel dengan x86 dijadwalkan di node Arm tanpa memerlukan toleransi yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi taint arsitektur Arm default.
Jika Anda ingin men-deploy workload ke node Arm yang memiliki taint default, gunakan kolom yang dijelaskan dalam dokumen ini untuk memandu penjadwal agar mengirimkan workload ke jenis node yang diminta.
Gunakan salah satu kolom berikut:
- Pemilih node.
- Aturan afinitas node.
Saat Anda menggunakan pemilih node atau aturan afinitas node, GKE hanya akan menjadwalkan workload yang kompatibel dengan Arm jika Anda telah mendeklarasikan bahwa image container workload dapat berjalan pada arsitektur node.
Jika Anda menjadwalkan workload yang kompatibel dengan Arm menggunakan pemilih node atau menggunakan aturan afinitas node seperti yang dijelaskan di bagian berikut, GKE akan menambahkan toleransi ke konfigurasi workload sehingga Pod dapat berjalan di node Arm.
Toleransi yang ditambahkan ke workload ini cocok dengan taint
(kubernetes.io/arch=arm64:NoSchedule) yang ditambahkan ke semua node Arm secara default, untuk
memungkinkan workload Anda dijadwalkan di node Arm.
Dalam beberapa situasi, misalnya saat Anda memiliki image multi-arsitektur yang dapat berjalan di node mana pun, Anda mungkin perlu menambahkan toleransi ini secara manual ke konfigurasi workload. Untuk mendapatkan petunjuk, lihat Menggunakan toleransi untuk menjadwalkan workload multi-arch ke arsitektur apa pun.
Menggunakan pemilih node untuk menjadwalkan workload Arm
Tambahkan pemilih node berikut ke spesifikasi:
nodeSelector:
kubernetes.io/arch: arm64
Pemilih node menentukan bahwa workload ini hanya boleh dijadwalkan ke node dengan label arm64, yang dimiliki semua node Arm di
cluster GKE.
Jika pemilih node ini disertakan dalam konfigurasi workload, GKE akan menambahkan toleransi untuk mencocokkan taint agar workload dapat dijadwalkan di node Arm.
Menggunakan aturan afinitas node untuk menjadwalkan workload Arm
Anda juga dapat menggunakan afinitas node untuk menjadwalkan workload.
Menjadwalkan workload ke satu arsitektur
Tambahkan afinitas node berikut ke spesifikasi:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
Aturan afinitas node menentukan bahwa workload hanya boleh dijadwalkan ke
node dengan label arm64, yang dimiliki oleh semua node Arm di
cluster GKE.
Jika aturan afinitas node ini disertakan dalam konfigurasi workload, GKE akan menambahkan toleransi untuk mencocokkan taint agar workload dapat dijadwalkan di node Arm.
Menjadwalkan workload ke arsitektur x86 dan Arm
Jika ingin menjadwalkan workload di seluruh arsitektur x86 (prosesor Intel dan AMD) dan Arm, dan node pool Arm Anda menggunakan perilaku taint default, Anda dapat menentukannya dengan beberapa cara. Petunjuk berikut mengasumsikan bahwa node pool Arm Anda menggunakan taint default.
Menggunakan toleransi untuk menjadwalkan workload multi-arch ke arsitektur apa pun
Jika memiliki image multi-arch yang ingin dijadwalkan ke jenis arsitektur yang tersedia dalam cluster Standar, Anda hanya perlu menambahkan tolerasi ke spesifikasi workload. Anda tidak memerlukan pemilih node atau aturan afinitas node yang dijelaskan di halaman ini karena workload dapat dijadwalkan ke semua jenis arsitektur.
Tambahkan toleransi:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
Dengan toleransi ini, GKE dapat menjadwalkan workload ke node yang memiliki berbagai jenis arsitektur.
Misalnya, jika Anda memiliki cluster dengan node pool berikut:
- my-c4a-node-pool, menggunakan VM c4a-standard-16 (
arm64). - my-c2-node-pool, menggunakan VM c2-standard-8 (
amd64). - my-t2d-node-pool, menggunakan VM t2-standard-48 (
amd64).
Jika Anda men-deploy workload yang menggunakan image multi-arch dan toleransi
arm64 dalam konfigurasi workload ke cluster ini, GKE dapat
menjadwalkan workload tersebut di semua node pool.
Menggunakan aturan afinitas node untuk menjadwalkan workload multi-arsitektur ke arsitektur apa pun
Jika ingin workload dijadwalkan pada node di seluruh jenis arsitektur termasuk x86 dan Arm, Anda juga dapat menggunakan aturan afinitas node. Dengan aturan afinitas node, Anda dapat menentukan dengan tepat jenis arsitektur yang ingin Anda jadwalkan workload-nya. Pendekatan ini direkomendasikan untuk menjadwalkan workload di cluster Autopilot. Untuk mempelajari lebih lanjut, lihat Men-deploy workload Autopilot di arsitektur Arm.
Dengan workload berbasis x86, Anda tidak memerlukan pemilih node, aturan afinitas node, atau toleransi workload yang akan dijadwalkan. Jika memiliki image yang hanya ingin Anda jadwalkan ke node berbasis x86, Anda tidak perlu menggunakan kolom ini.
Untuk menjadwalkan workload ke jenis arsitektur apa pun, cantumkan arm64 dan amd64
bagian values dari kolom afinitas node. amd64 menyertakan semua node
yang menggunakan prosesor x86.
Contoh berikut menetapkan bahwa workload ini dapat dijadwalkan pada node yang menggunakan prosesor Arm atau prosesor x86:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
Label untuk setiap jenis arsitektur adalah:
arm64untuk node yang menggunakan prosesor Arm (misalnya, C4A).amd64untuk node yang menggunakan prosesor AMD (misalnya, Tau T2D) atau node yang menggunakan prosesor Intel (misalnya, C2).
Misalnya, jika Anda memiliki cluster dengan node pool berikut dan aturan afinitas node yang ditentukan:
- my-c4a-node-pool, menggunakan VM c4a-standard-16 (
arm64). - my-c2-node-pool, menggunakan VM c2-standard-8 (
amd64). - my-t2d-node-pool, menggunakan VM t2-standard-48 (
amd64).
Jika Anda men-deploy workload yang menggunakan image multi-arch dan afinitas
node dengan arm64 yang disertakan dalam daftar values ke cluster ini, GKE akan
menambahkan toleransi dalam konfigurasi workload dan juga dapat
menjadwalkan workload di semua node pool.
Mengonfigurasi taint arsitektur Arm default
Secara default, GKE menandai semua node Arm dengan
tanda kubernetes.io/arch=arm64:NoSchedule. Taint ini mencegah workload yang kompatibel dengan arsitektur x86 saja, tetapi tidak dengan arsitektur Arm, dijadwalkan ke node Arm. Jika memiliki workload yang kompatibel dengan x86 dan Arm, Anda dapat menonaktifkan taint ini agar GKE dapat menjadwalkan workload tersebut di node Arm tanpa memerlukan toleransi yang sesuai dengan taint.
Anda dapat mengupdate perilaku default hanya di node pool Standard di cluster GKE tempat bidang kontrol menjalankan versi 1.35.0-gke.2141000 atau yang lebih baru, atau dengan node yang dibuat untuk ComputeClass kustom. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi taint arsitektur Arm default. Memperbarui perilaku taint tidak berlaku untuk men-deploy workload Arm dengan Autopilot. Untuk mengetahui informasi selengkapnya, lihat Men-deploy workload Autopilot di arsitektur Arm.
Anda dapat mengonfigurasi perilaku ini dalam situasi berikut dengan kumpulan node Standar:
- Selama pembuatan cluster, untuk node pool Standar default
- Saat Anda membuat atau mengupdate node pool Standard
Jika Anda memiliki workload yang berjalan di cluster yang tidak kompatibel dengan Arm, jangan hapus taint default, karena workload yang tidak kompatibel dapat dijadwalkan ke node Arm yang tidak memiliki taint.
Untuk mengonfigurasi taint node default untuk node Arm, pilih salah satu opsi berikut:
gcloud CLI
Untuk menetapkan perilaku taint dengan gcloud CLI, gunakan
flag --node-architecture-taint-behavior saat Anda melakukan salah satu operasi
berikut:
Buat cluster Standard dengan perilaku taint tertentu untuk node pool default menggunakan perintah
gcloud container cluster create:gcloud container cluster create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION \ --node-architecture-taint-behavior=BEHAVIORBuat node pool Standar menggunakan perintah
gcloud container node-pools create:gcloud container node-pools create POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-architecture-taint-behavior=BEHAVIORPerbarui node pool Standard menggunakan perintah
gcloud container node-pools update:gcloud container node-pools update POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-architecture-taint-behavior=BEHAVIOR
Untuk perintah ini, ganti kode berikut:
CLUSTER_NAME: nama cluster Anda.CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.POOL_NAME: nama node pool Anda.BEHAVIOR: salah satu setelan berikut:none: GKE menghilangkan taint defaultkubernetes.io/arch=arm64:NoSchedule.arm: secara eksplisit menetapkan perilaku default, yang menambahkan taintkubernetes.io/arch=arm64:NoScheduleuntuk semua node di node pool Arm.
Saat Anda mengubah perilaku taint arsitektur node untuk node pool Standar, GKE akan segera mengupdate taint tanpa perlu membuat ulang node.
Terraform
Tambahkan blok taint_config berikut di node_config untuk mengonfigurasi
perilaku pencemaran arsitektur:
taint_config {
architecture_taint_behavior = "BEHAVIOR"
}
Ganti BEHAVIOR dengan salah satu setelan berikut:
NONE: GKE menghilangkan taint defaultkubernetes.io/arch=arm64:NoSchedule.ARM: secara eksplisit menetapkan perilaku default, yang menambahkan taintkubernetes.io/arch=arm64:NoScheduleuntuk semua node di node pool Arm.
node_config lengkap untuk node pool Standar yang mencakup blok ini akan terlihat seperti berikut:
resource "google_container_node_pool" "primary_preemptible_nodes" {
name = "NODE_POOL_NAME"
location = "NODE_POOL_LOCATION"
cluster = google_container_cluster.primary.name
node_count = 1
node_config {
preemptible = true
machine_type = "ARM_MACHINE_TYPE"
# Google recommends custom service accounts that have cloud-platform scope and permissions granted via IAM Roles.
service_account = google_service_account.default.email
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
taint_config {
architecture_taint_behavior = "BEHAVIOR"
}
}
}
Dalam contoh ini, NODE_POOL_NAME merepresentasikan nama
node pool, dan NODE_POOL_LOCATION merepresentasikan
lokasi bidang kontrol cluster.
Men-deploy workload
Kini setelah selesai menentukan lokasi penjadwalan workload yang kompatibel dengan Arm, Anda dapat men-deploy workload.
Saat Anda men-deploy workload ke cluster GKE, petunjuk yang berlaku sama untuk seluruh jenis arsitektur. Anda dapat men-deploy workload yang kompatibel dengan Arm seperti men-deploy workload lain, selama Anda telah menyelesaikan langkah-langkah prasyarat. Untuk melihat contoh deployment workload, lihat halaman berikut:
Pemecahan masalah
Untuk mengetahui error umum dan informasi pemecahan masalah, lihat Memecahkan masalah workload Arm.