Secara default, ACK menjadwalkan beban kerja ke node pekerja berbasis x86. Di kluster campuran yang mencakup node berbasis ARM dan x86, konfigurasikan penjadwalan Kubernetes untuk mengarahkan beban kerja ARM secara eksklusif ke node berbasis ARM atau memprioritaskan node berbasis ARM untuk beban kerja multi-arsitektur.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat kluster yang menjalankan Kubernetes 1.20 atau lebih baru dengan Alibaba Cloud Linux 3 sebagai sistem operasi. Untuk informasi selengkapnya, lihat Buat kluster dan Tingkatkan kluster.
Menginstal komponen kube-scheduler. Untuk informasi selengkapnya, lihat Kelola komponen.
Hanya komponen Core Components, Logs and Monitoring, Storage, dan Networking di halaman Add-ons yang mendukung kelompok node berbasis ARM. Komponen yang tercantum di halaman Marketplace pada Konsol ACK tidak dapat dideploy di kelompok node berbasis ARM.
Lebih Memilih Node Berbasis ARM
Pertimbangkan batasan berikut sebelum menambahkan node berbasis ARM ke konfigurasi penjadwalan Anda:
Hanya gambar ARM: Aplikasi yang dijadwalkan ke node berbasis ARM harus menggunakan gambar kontainer yang dikompilasi untuk arsitektur ARM. Menjadwalkan gambar khusus x86 ke node ARM menyebabkan Pod gagal dimulai.
Gambar multi-arsitektur: Jika gambar aplikasi Anda mendukung ARM dan x86, gunakan
preferredDuringSchedulingIgnoredDuringExecutionuntuk memprioritaskan node ARM, namun tetap memungkinkan fallback ke node x86 saat kapasitas ARM tidak tersedia.
Lindungi node ARM dengan taint
Tambahkan taint kubernetes.io/arch=arm64:NoSchedule ke node berbasis ARM untuk mencegah beban kerja yang tidak mendukung arsitektur ARM dijadwalkan secara tidak sengaja ke node tersebut.
Kubernetes menyediakan tiga efek taint:
| Effect | Behavior |
|---|---|
NoSchedule | Pod baru tanpa toleransi yang sesuai tidak dijadwalkan ke node tersebut. Pod yang sudah berjalan di node tidak di-evict. |
NoExecute | Pod baru tanpa toleransi yang sesuai tidak dijadwalkan ke node tersebut. Pod yang sudah ada tanpa toleransi yang sesuai akan di-evict. |
PreferNoSchedule | Penjadwal menghindari penempatan Pod tanpa toleransi yang sesuai ke node tersebut, tetapi tidak sepenuhnya mencegahnya. |
Gunakan NoSchedule untuk node berbasis ARM. Ini memblokir Pod baru yang tidak kompatibel sambil membiarkan Pod yang sudah ada tetap berjalan.
Perilaku toleransi berdasarkan versi Kubernetes:
Kubernetes < 1.24: Saat menggunakan
nodeSelectorataunodeAffinityuntuk menargetkan node ARM, tambahkan toleransi secara manual untukkubernetes.io/arch=arm64:NoScheduledalam spesifikasi Pod.Kubernetes >= 1.24: Penjadwal secara otomatis mentoleransi taint
kubernetes.io/arch=arm64:NoSchedulesaat Pod menargetkan node ARM — tidak diperlukan toleransi manual.
Tagihan
Untuk tipe instans ECS yang menggunakan arsitektur ARM dan harganya, lihat:
Buat kelompok node berbasis ARM
Saat membuat kelompok node, di bagian Instance Type, atur Architecture ke Arm, konfigurasikan parameter lain sesuai kebutuhan, lalu selesaikan pembuatan kelompok node. Untuk informasi selengkapnya tentang cara membuat kelompok node, lihat Buat dan kelola kelompok node.
Buka Tipe Instans yang Tersedia untuk Setiap Wilayah untuk melihat tipe instans yang tersedia di setiap wilayah.
Tambahkan node berbasis ARM ke kluster Anda baik saat membuat kluster baru maupun dengan menambahkan kelompok node ke kluster yang sudah ada.
Buat kelompok node berbasis ARM saat membuat kluster
Saat mengonfigurasi kelompok node selama pembuatan kluster, di bagian Instance Type, atur Architecture ke Arm, pilih tipe instans dari keluarga instans tujuan umum g8m, konfigurasikan parameter lainnya, lalu selesaikan pembuatan kluster. Untuk informasi selengkapnya tentang cara membuat kluster, lihat Buat kluster ACK yang dikelola.
Buka Tipe Instans yang Tersedia untuk Setiap Wilayah untuk melihat tipe instans yang tersedia di setiap wilayah.
Saat mengonfigurasi kelompok node selama pembuatan kluster, atur Architecture ke Arm di bagian Instance Type dan pilih instans tujuan umum g8m. Konfigurasikan parameter lain sesuai kebutuhan Anda.
Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.

Untuk melihat tipe instans ARM yang tersedia berdasarkan wilayah, lihat Tipe instans ECS yang tersedia untuk setiap wilayah.
Tambahkan kelompok node berbasis ARM ke kluster yang sudah ada
Saat membuat kelompok node, atur Architecture ke ARM di bagian Instance Type. Konfigurasikan parameter lain sesuai kebutuhan Anda.
Untuk informasi selengkapnya, lihat Buat dan kelola kelompok node.

Untuk melihat tipe instans ARM yang tersedia berdasarkan wilayah, lihat Tipe instans ECS yang tersedia untuk setiap wilayah.
Jadwalkan beban kerja khusus ARM ke node berbasis ARM
Jika beban kerja Anda menggunakan arsitektur ARM secara eksklusif dan kluster Anda berisi node non-ARM, arahkan beban kerja tersebut ke node ARM. Pod yang dijadwalkan ke node yang tidak kompatibel akan gagal dimulai.
Semua node berbasis ARM secara otomatis memiliki label kubernetes.io/arch=arm64. Gunakan nodeSelector atau nodeAffinity untuk menargetkan label ini.
nodeSelector
Tambahkan bidang berikut ke spesifikasi Pod untuk membatasi penjadwalan hanya ke node berbasis ARM:
nodeSelector:
kubernetes.io/arch: arm64 # Jadwalkan hanya ke node dengan label arm64.Penyebaran berikut menggunakan nodeSelector untuk menjadwalkan semua Pod ke node berbasis ARM:
apiVersion: apps/v1
kind: Deployment
metadata:
name: only-arm
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
kubernetes.io/arch: arm64 # Jadwalkan hanya ke node dengan label arm64.
containers:
- name: nginx
image: nginxVerifikasi: Setelah menerapkan manifes, jalankan perintah berikut dan pastikan Pod berjalan di node berbasis ARM:
kubectl get pods -o wideOutput yang diharapkan (kolom NODE menampilkan nama node berbasis ARM):
NAME READY STATUS RESTARTS AGE NODE
only-arm-xxxxxxxxx-xxxxx 1/1 Running 0 30s <arm-node-name>nodeAffinity
Gunakan nodeAffinity dengan requiredDuringSchedulingIgnoredDuringExecution untuk menerapkan penjadwalan khusus ARM. Penjadwal secara otomatis mentoleransi taint kubernetes.io/arch=arm64:NoSchedule saat kendala ini ada.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64Penyebaran berikut menggunakan nodeAffinity untuk menjadwalkan semua Pod ke node berbasis ARM:
apiVersion: apps/v1
kind: Deployment
metadata:
name: only-arm
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
containers:
- name: nginx
image: nginxVerifikasi: Setelah menerapkan manifes, jalankan perintah berikut dan pastikan Pod berjalan di node berbasis ARM:
kubectl get pods -o wideOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE NODE
only-arm-xxxxxxxxx-xxxxx 1/1 Running 0 30s <arm-node-name>Jadwalkan beban kerja multi-arsitektur ke node berbasis ARM
Jika gambar aplikasi Anda mendukung ARM dan x86, konfigurasikan preferredDuringSchedulingIgnoredDuringExecution untuk memprioritaskan node berbasis ARM. Saat kapasitas ARM tidak mencukupi, Pod akan fallback ke node x86 alih-alih menjadi pending.
Prioritaskan node berbasis ARM
Penyebaran berikut memprioritaskan node berbasis ARM. Pod akan fallback ke node x86 jika kapasitas ARM tidak tersedia.
Prioritaskan node berbasis x86
FAQ
Apakah saya dapat menggunakan instans preemptible berbasis ARM?
Ya. Untuk informasi selengkapnya, lihat Gunakan instans preemptible.
Komponen apa saja yang didukung di node berbasis ARM?
Hanya kategori komponen berikut yang mendukung arsitektur ARM di kluster ACK:
Komponen utama
Komponen logging dan pemantauan
Komponen volume
Komponen jaringan
Komponen di halaman Marketplace pada Konsol ACK tidak mendukung arsitektur ARM.
Langkah selanjutnya
Buat node virtual berbasis ARM dan jadwalkan beban kerja ke node tersebut. Untuk informasi selengkapnya, lihat Jadwalkan beban kerja ke node virtual berbasis ARM.
Buat gambar kontainer multi-arsitektur menggunakan Container Registry Edisi Perusahaan. Untuk informasi selengkapnya, lihat Buat gambar kontainer multi-arsitektur.
Jalankan pekerjaan Spark di node virtual berbasis ARM tanpa mengelola sumber daya kluster. Untuk informasi selengkapnya, lihat Jalankan pekerjaan Spark di node virtual berbasis ARM.