Secara default, dan kluster ACK Serverless menjadwalkan semua workload ke node virtual x86. Jika kluster Anda berisi node virtual Arm dan non-Arm, seperti node virtual x86, Anda dapat menggunakan konfigurasi penjadwalan Kubernetes native untuk memastikan bahwa workload khusus Arm hanya berjalan di node virtual Arm, atau gambar multi-arsitektur dijadwalkan terlebih dahulu ke node virtual Arm.
Prasyarat
-
Kluster:
Kluster ACK Serverless yang menjalankan Kubernetes versi 1.20 atau lebih baru telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster dan Upgrade kluster secara manual.
CatatanInstans Arm hanya tersedia di wilayah dan zona tertentu. Pastikan kluster Anda dideploy di wilayah yang didukung. Untuk melihat daftar wilayah dan zona yang didukung, lihat Tipe instans ECS: Ikhtisar wilayah yang tersedia.
-
Komponen: Komponen ack-virtual-node versi 2.9.0 atau lebih baru telah diinstal. Untuk informasi selengkapnya, lihat ACK Virtual Node.
Peringatan
Jika kluster Anda menjalankan Kubernetes versi sebelum 1.24, Anda harus mendeklarasikan toleransi terhadap taint kubernetes.io/arch=arm64:NoSchedule saat menggunakan nodeSelector atau nodeAffinity untuk menjadwalkan aplikasi ke node Arm. Jika kluster Anda menjalankan Kubernetes versi 1.24 atau lebih baru, penjadwal secara otomatis mengenali taint kubernetes.io/arch=arm64:NoSchedule pada node Arm, sehingga Anda tidak perlu mendeklarasikan toleransi ini secara manual.
Penagihan
Untuk informasi selengkapnya tentang tipe instans ECS berbasis ARM dan harganya, lihat dokumen berikut:
Langkah 1: Tambahkan node virtual Arm
Sebelum menerapkan workload Arm di kluster Anda, Anda harus membuat node virtual Arm. Anda dapat mengonfigurasi Profil ECI untuk mengaktifkan dukungan arsitektur Arm dengan mengedit file konfigurasi eci-profile menggunakan salah satu metode berikut. Untuk informasi selengkapnya tentang Profil ECI, lihat Konfigurasikan profil ECI.
Konsol
Masuk ke Container Service Management Console . Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik .
-
Pada daftar drop-down Namespace, pilih kube-system. Temukan ConfigMap eci-profile dan klik Edit. Ubah nilai kunci
enableLinuxArm64Nodemenjaditrue, lalu klik OK.
CatatanJika tidak ada vSwitch di zona kluster Anda yang mendukung instans Arm, buat terlebih dahulu vSwitch di zona yang didukung, lalu tambahkan ID vSwitch tersebut ke bidang
vSwitchIds. Untuk informasi selengkapnya, lihat Buat dan kelola vSwitch.
kubectl
Prasyarat
Dapatkan berkas KubeConfig untuk kluster dan gunakan kubectl untuk menghubungkan ke kluster.
Prosedur
Jalankan perintah berikut untuk mengedit ConfigMap:
kubectl edit configmap eci-profile -n kube-system
-
Atur parameter
enableLinuxArm64Nodeketrue. -
Atur
vSwitchIdsagar mencakup setidaknya satu vSwitch dari zona yang mendukung instans Arm.CatatanJika tidak ada vSwitch di zona kluster Anda yang mendukung instans Arm, buat terlebih dahulu vSwitch di zona yang didukung, lalu tambahkan ID vSwitch tersebut ke bidang
vSwitchIds. Untuk informasi selengkapnya, lihat Buat dan kelola vSwitch.
Langkah 2: Jadwalkan workload ke node virtual Arm
Jadwalkan workload khusus Arm ke node virtual Arm
Jika kluster Anda berisi node berbasis Arm dan jenis node lainnya, serta workload Anda hanya mendukung arsitektur Arm, Anda dapat menjadwalkan workload tersebut agar berjalan eksklusif di node berbasis Arm. Hal ini mencegah Pod dijadwalkan ke node lain yang akan menyebabkan kegagalan. Secara default, semua node berbasis Arm memiliki label kubernetes.io/arch=arm64. Anda dapat menggunakan `nodeSelector` atau `nodeAffinity` untuk menerapkan workload ke node berbasis Arm.
nodeSelector
Untuk menggunakan `nodeSelector` guna menjadwalkan Pod ke node virtual Arm, tambahkan batasan berikut ke spesifikasi Pod. Batasan ini memastikan bahwa workload hanya berjalan di node yang memiliki label `arm64`. Semua node virtual Arm di dan kluster ACK Serverless memiliki label ini.
nodeSelector:
kubernetes.io/arch: arm64 # Jadwalkan ke node Arm.
Contoh berikut menunjukkan cara menerapkan aplikasi tanpa status ke node virtual Arm.
nodeAffinity
Prasyarat
Penjadwalan node virtual telah diaktifkan untuk kluster Anda. Untuk informasi selengkapnya, lihat Aktifkan penjadwalan node virtual. Pastikan versi kluster dan komponen Anda memenuhi persyaratan.
Contoh
Anda dapat menambahkan batasan afinitas node berikut ke Pod untuk menerapkan aplikasi ke node Arm64. Batasan ini menentukan bahwa Pod hanya dapat dijadwalkan ke node yang memiliki label kubernetes.io/arm=arm64.
Jika batasan ini ada dalam spesifikasi Pod, penjadwal secara otomatis menambahkan toleransi terhadap taint kubernetes.io/arch=arm64:NoSchedule pada node tersebut.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
Contoh berikut menunjukkan cara menerapkan aplikasi tanpa status ke node virtual Arm.
Jadwalkan gambar multi-arsitektur ke node virtual Arm
Prasyarat
Penjadwalan node virtual telah diaktifkan untuk kluster Anda. Untuk informasi selengkapnya, lihat Aktifkan penjadwalan node virtual. Pastikan versi kluster dan komponen Anda memenuhi persyaratan.
Contoh
Secara default, dan kluster ACK Serverless menjadwalkan semua workload ke node virtual x86. Jika sumber daya x86 tidak mencukupi, workload akan menunggu hingga sumber daya x86 tersedia. Jika gambar aplikasi Anda mendukung beberapa arsitektur, seperti x86 dan Arm, Anda harus mengonfigurasi penjadwalan node lintas arsitektur.
Misalnya, Anda dapat menggunakan afinitas node untuk memprioritaskan penjadwalan ke node virtual Arm atau x86. Jika tipe node yang diprioritaskan tidak memiliki sumber daya yang cukup, penjadwal akan mencoba menjadwalkan workload ke node dengan arsitektur lain.
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
Prioritaskan arsitektur Arm
Contoh berikut menunjukkan cara memprioritaskan node virtual Arm.
Prioritaskan arsitektur x86
Contoh berikut menunjukkan cara memprioritaskan node virtual x86.
FAQ
Mengapa Pod saya dijadwalkan ke node ECS x86 meskipun saya telah mengonfigurasi nodeAffinity untuk memprioritaskan node Arm?
Secara default, penjadwal kluster memprioritaskan node ECS dan hanya menjadwalkan workload ke node virtual ketika sumber daya ECS tidak mencukupi. Jika Anda tidak mengubah bobot plugin penilaian penjadwal dan kluster Anda memiliki sumber daya x86 ECS yang mencukupi, Pod mungkin tetap dijadwalkan ke node ECS x86, meskipun Anda telah mengonfigurasi `nodeAffinity` untuk memprioritaskan node Arm. Oleh karena itu, pengaturan `nodeAffinity` dalam topik ini hanya mengontrol prioritas penjadwalan di antara node virtual Arm dan x86, bukan antara node virtual dan node ECS.
Dapatkah saya menggunakan spot instans berbasis Arm?
Ya. Spot instans berbasis Arm tersedia. Untuk informasi selengkapnya, lihat Gunakan spot instans.
Setelah membuat kluster di suatu wilayah, bagaimana cara mengonfigurasi jaringan agar mendukung node virtual Arm?
Setelah Anda membuat atau kluster ACK Serverless di zona yang didukung, Anda harus mengatur bidang `vSwitchIds` dalam eci-profile agar mencakup vSwitch dari zona yang mendukung instans Arm. Hal ini memastikan bahwa node virtual Arm dibuat.
Apa saja batasan penggunaan node Arm di dan kluster ACK Serverless?
Saat ini, arsitektur Arm tidak mendukung komponen Marketplace. Pusat Komponen hanya mendukung modul-modul berikut:
-
Komponen inti
-
Pencatatan dan pemantauan
-
Penyimpanan
-
Jaringan
Referensi
-
Anda dapat menggunakan Container Registry Enterprise Edition (ACR EE) untuk membangun gambar kontainer multi-arsitektur. Untuk informasi selengkapnya, lihat Bangun gambar kontainer multi-arsitektur.
-
Untuk informasi selengkapnya tentang cara membuat dan mengelola node ECS Arm standar, lihat Jadwalkan workload ke node Arm.
-
Jika Anda menjalankan tugas data besar dan ingin menghindari pengelolaan sumber daya kluster dasar, lihat Jalankan pekerjaan Spark pada node virtual berbasis Arm.