Secara default, kluster ACK dan kluster menjadwalkan semua workload ke node virtual x86. Jika kluster Anda memiliki node virtual Arm dan non-Arm, seperti node virtual x86, Anda dapat menggunakan fitur penjadwalan native Kubernetes untuk menjadwalkan workload khusus Arm ke node virtual Arm atau menjadwalkan gambar multi-arsitektur secara preferensial ke node virtual Arm.
Prasyarat
-
Kluster:
Kluster ACK yang menjalankan Kubernetes 1.20 atau versi lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola dan Lakukan upgrade kluster secara manual.
CatatanInstance ECS berbasis Arm hanya tersedia di wilayah dan zona tertentu. Pastikan kluster Anda berada di wilayah yang didukung. Untuk memeriksa wilayah dan zona yang mendukung instance berbasis Arm, lihat Ikhtisar tipe instans yang tersedia untuk pembelian.
-
Komponen: Komponen ack-virtual-node versi 2.9.0 atau lebih baru telah diinstal. Untuk informasi selengkapnya, lihat ACK Virtual Node.
Catatan penggunaan
Jika kluster Anda menjalankan versi Kubernetes sebelum 1.24, Anda harus menambahkan toleration untuk taint kubernetes.io/arch=arm64:NoSchedule saat menggunakan nodeSelector atau nodeAffinity untuk menjadwalkan aplikasi ke node Arm. Untuk kluster yang menjalankan Kubernetes 1.24 atau versi lebih baru, penjadwal secara otomatis mengenali taint kubernetes.io/arch=arm64:NoSchedule pada node Arm, sehingga Anda tidak perlu mendeklarasikan toleration.
Penagihan
Untuk informasi selengkapnya tentang tipe instans ECS yang menggunakan arsitektur ARM dan harganya, lihat topik-topik berikut:
Langkah 1: Tambahkan node virtual Arm
Sebelum men-deploy workload pada arsitektur Arm di kluster Anda, Anda harus terlebih dahulu membuat node virtual Arm. Anda dapat membuat node virtual yang mendukung arsitektur Arm dengan mengonfigurasi Profil ECI. Anda dapat mengedit ConfigMap eci-profile menggunakan salah satu metode berikut. Untuk informasi selengkapnya tentang Profil ECI, lihat Konfigurasikan eci-profile.
Konsol
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Dari daftar drop-down Namespace, pilih kube-system. Temukan eci-profile dan klik Edit di kolom Actions. Atur nilai kunci
enableLinuxArm64Nodemenjaditrue. Lalu, klik OK.CatatanJika semua vSwitch di kluster Anda berada di zona yang tidak mendukung instance berbasis Arm, Anda harus terlebih dahulu membuat vSwitch di zona yang didukung. Setelah vSwitch dibuat, tambahkan ID-nya ke bidang
vSwitchIds. Untuk informasi selengkapnya tentang cara membuat vSwitch di zona tertentu, lihat Buat dan kelola vSwitch.Setelah konfigurasi selesai, tunggu sekitar 30 detik. Anda kemudian dapat menemukan node virtual baru bernama
virtual-kubelet-<zoneId>-linux-arm64di halaman Nodes.
Kubectl
Prasyarat
Dapatkan File kubeconfig Kluster dan gunakan kubectl untuk terhubung ke Kluster.
Prosedur
Jalankan perintah berikut untuk mengedit ConfigMap:
kubectl edit configmap eci-profile -n kube-system
-
Tambahkan atau perbarui parameter
enableLinuxArm64Nodedan atur nilainya menjaditrue. -
Atur parameter
vSwitchIds. Pastikan setidaknya satu vSwitch yang ditentukan dalam daftarvSwitchIdsberada di zona yang mendukung instance berbasis Arm.CatatanJika semua vSwitch di kluster Anda berada di zona yang tidak mendukung instance berbasis Arm, Anda harus terlebih dahulu membuat vSwitch di zona yang didukung. Setelah vSwitch dibuat, tambahkan ID-nya ke bidang
vSwitchIds. Untuk informasi selengkapnya tentang cara membuat vSwitch di zona tertentu, lihat Buat dan kelola vSwitch.Setelah konfigurasi selesai, tunggu sekitar 30 detik. Anda kemudian dapat menemukan node virtual baru bernama
virtual-kubelet-<zoneId>-linux-arm64di halaman Nodes.
Langkah 2: Jadwalkan ke node virtual Arm
Jadwalkan workload khusus Arm
Jika kluster Anda memiliki node Arm dan non-Arm serta aplikasi Anda hanya untuk Arm, Anda harus menjadwalkannya ke node Arm agar pod tidak gagal dimulai di node non-Arm. Secara default, semua node Arm memiliki label kubernetes.io/arch=arm64. Anda dapat menggunakan nodeSelector atau nodeAffinity untuk men-deploy aplikasi ke node Arm.
nodeSelector
Anda dapat menambahkan batasan nodeSelector berikut ke spesifikasi pod Anda untuk menjadwalkannya ke node virtual Arm. Batasan ini memastikan bahwa workload hanya dijadwalkan ke node yang memiliki label arm64. Semua node virtual Arm di kluster ACK atau kluster memiliki label ini.
nodeSelector:
kubernetes.io/arch: arm64 # Tentukan node Arm.
Anda dapat menggunakan contoh YAML berikut untuk men-deploy aplikasi tanpa status ke node virtual Arm.
nodeAffinity
Prasyarat
fitur penjadwalan node virtual diaktifkan untuk kluster, dan versi kluster serta komponen memenuhi persyaratan.
Contoh
Anda dapat menambahkan batasan nodeAffinity berikut ke spesifikasi pod Anda untuk men-deploy aplikasi ke node Arm. Batasan ini memastikan bahwa pod hanya dijadwalkan ke node yang memiliki label kubernetes.io/arch=arm64.
Saat spesifikasi pod berisi batasan ini, penjadwal secara otomatis mentoleransi taint kubernetes.io/arch=arm64:NoSchedule pada node tersebut.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
Anda dapat menggunakan contoh YAML berikut untuk men-deploy aplikasi tanpa status ke node virtual Arm.
Jadwalkan gambar multi-arsitektur
Prasyarat
fitur penjadwalan node virtual diaktifkan untuk kluster, dan versi kluster serta komponen memenuhi persyaratan.
Contoh
Secara default, kluster ACK dan kluster menjadwalkan semua workload ke node virtual x86. Jika sumber daya node x86 tidak mencukupi, pod tetap dalam status pending, menunggu sumber daya x86 yang tersedia. Jika aplikasi Anda menggunakan gambar multi-arsitektur yang mendukung arsitektur x86 dan Arm, Anda harus mengonfigurasi penjadwalan lintas kedua arsitektur node tersebut.
Sebagai contoh, Anda dapat mengonfigurasi afinitas node untuk menjadwalkan workload secara preferensial ke node virtual Arm atau x86. Jika sumber daya jenis yang diprioritaskan tidak mencukupi, penjadwal akan mencoba menjadwalkan workload ke node virtual dengan arsitektur lainnya.
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
Prioritaskan arsitektur Arm
Berikut adalah contoh YAML untuk workload yang dijadwalkan secara preferensial ke node virtual Arm.
Prioritaskan arsitektur x86
FAQ
Prioritas penjadwalan node Arm dan x86
Secara default, penjadwal kluster memprioritaskan penjadwalan workload ke instance ECS. Jika sumber daya instance ECS tidak mencukupi, penjadwal kemudian mempertimbangkan node virtual. Tanpa memodifikasi bobot plugin penilaian penjadwal, sebuah pod mungkin dijadwalkan ke instance ECS x86 jika sumber daya yang cukup tersedia, meskipun Anda mengonfigurasi nodeAffinity untuk memprioritaskan node Arm. Oleh karena itu, konfigurasi nodeAffinity dalam topik ini hanya menjamin prioritas penjadwalan antara arsitektur node virtual yang berbeda (Arm vs. x86), bukan antara node virtual dan instance ECS.
Apakah saya dapat menggunakan instance preemptible Arm?
Ya, instance preemptible berbasis Arm tersedia. Untuk informasi selengkapnya, lihat Gunakan instance preemptible.
Konfigurasi jaringan untuk node virtual Arm
Setelah membuat kluster ACK atau kluster , konfigurasikan bidang vSwitchIds dalam eci-profile untuk memilih vSwitch di zona yang mendukung instance berbasis Arm. Hal ini memastikan bahwa node virtual mendukung arsitektur Arm.
Apa saja batasan penggunaan node arsitektur Arm di kluster ACK?
Saat ini, komponen dari App Marketplace tidak didukung pada arsitektur Arm. Di Pusat Komponen, hanya komponen dalam kategori berikut yang didukung:
-
Komponen inti
-
Pencatatan log dan pemantauan
-
Penyimpanan
-
Jaringan
Dokumen terkait
-
Container Registry Enterprise Edition (ACR EE) memungkinkan Anda membuat gambar kontainer multi-arsitektur. Untuk informasi selengkapnya, lihat Buat gambar kontainer multi-arsitektur.
-
Jika Anda perlu membuat dan mengelola node ECS Arm biasa, lihat Jadwalkan workload ke node Arm.
-
Jika Anda perlu menjalankan tugas data besar dan tidak ingin menangani operasi serta maintenance sumber daya kluster dasar, Anda dapat menjalankan pekerjaan Spark pada node virtual Arm.