Secara default, kluster ACK atau menjadwalkan semua beban kerja ke node virtual dengan arsitektur x86. Jika kluster Anda mencakup node virtual berbasis ARM dan node lainnya seperti node virtual berbasis x86, Anda dapat mengonfigurasi penjadwalan Kubernetes untuk menjadwalkan beban kerja ARM hanya ke node virtual berbasis ARM atau memprioritaskan penjadwalan beban kerja multi-arsitektur ke node tersebut.
Prasyarat
Kluster:
Kluster ACK yang menjalankan Kubernetes versi 1.20 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola dan Tingkatkan Manual Kluster ACK.
CatatanInstance Elastic Compute Service (ECS) berbasis ARM hanya tersedia di beberapa wilayah dan zona. Pastikan kluster Anda dibuat di salah satu wilayah tersebut. Untuk informasi lebih lanjut tentang wilayah dan zona tempat instance ECS berbasis ARM tersedia, lihat Tipe Instance yang Tersedia untuk Setiap Wilayah.
Komponen: Komponen ack-virtual-node terinstal dengan versi 2.9.0 atau lebih baru. Untuk informasi lebih lanjut, lihat ack-virtual-node.
Catatan Penggunaan
Jika kluster Anda menjalankan versi Kubernetes sebelum 1.24, saat mendefinisikan nodeSelector atau nodeAffinity untuk menjadwalkan beban kerja ke node virtual berbasis ARM, Anda juga harus menambahkan tolerations untuk mentoleransi kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda menjalankan Kubernetes 1.24 atau lebih baru, penjadwal secara otomatis mengenali kubernetes.io/arch=arm64:NoSchedule dari node virtual berbasis ARM, sehingga Anda tidak perlu menambahkan tolerations.
Penagihan
Untuk informasi lebih lanjut tentang tipe instance ECS yang menggunakan arsitektur ARM dan harga dari tipe-tipe ini, lihat topik-topik berikut:
Langkah 1: Tambahkan node virtual berbasis ARM
Sebelum menerapkan beban kerja ARM di kluster Anda, Anda harus membuat node virtual berbasis ARM. Anda dapat mengonfigurasi eci-profile untuk membuat node virtual berbasis ARM. Gunakan salah satu metode berikut untuk memodifikasi ConfigMap eci-profile. Untuk informasi lebih lanjut, lihat Konfigurasikan eci-profile.
Gunakan konsol ACK
Masuk ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih .
Pilih kube-system dari daftar drop-down Namespace. Temukan eci-profile dan klik Edit di kolom Aksi. Atur parameter
enableLinuxArm64Nodemenjaditrue. Klik OK.
CatatanJika semua vSwitch kluster berada di zona yang tidak mendukung instance berbasis ARM, buat vSwitch di zona yang mendukung instance berbasis ARM. Kemudian, tentukan ID vSwitch untuk parameter
vSwitchIds. Untuk informasi lebih lanjut tentang cara membuat vSwitch di zona, lihat Buat dan Kelola vSwitches.Setelah menyelesaikan konfigurasi, tunggu sekitar 30 detik. Anda kemudian dapat menemukan node virtual bernama
virtual-kubelet-<zoneId>-linux-arm64di halaman Nodes.
Jalankan perintah kubectl edit
Prasyarat
File kubeconfig kluster diperoleh dan kubectl digunakan untuk terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Prosedur
Jalankan perintah berikut untuk memodifikasi ConfigMap eci-profile:
kubectl edit configmap eci-profile -n kube-systemAtur parameter
enableLinuxArm64Nodemenjaditrue. Jika parameter tersebut tidak ada, tambahkan parameter dan atur nilainya menjadi true.Tentukan parameter
vSwitchIds. Pastikan setidaknya satu vSwitch yang ditentukan dalam parametervSwitchIdsberada di zona yang mendukung instance berbasis ARM.CatatanJika semua vSwitch kluster berada di zona yang tidak mendukung instance berbasis ARM, buat vSwitch di zona yang mendukung instance berbasis ARM. Kemudian, tentukan ID vSwitch untuk parameter
vSwitchIds. Untuk informasi lebih lanjut tentang cara membuat vSwitch di zona, lihat Buat dan Kelola vSwitches.Setelah menyelesaikan konfigurasi, tunggu sekitar 30 detik. Anda kemudian dapat menemukan node virtual bernama
virtual-kubelet-<zoneId>-linux-arm64di halaman Nodes.
Langkah 2: Jadwalkan beban kerja ke node virtual berbasis ARM
Jadwalkan beban kerja ARM ke node virtual berbasis ARM
Jika kluster Anda mencakup node virtual berbasis ARM dan node lainnya tetapi semua beban kerja menggunakan arsitektur ARM, Anda perlu menjadwalkan beban kerja hanya ke node virtual berbasis ARM. Jika pod dijadwalkan ke node lain, pod tidak dapat dimulai. Secara default, semua node virtual berbasis ARM memiliki label kubernetes.io/arch=arm64. Anda dapat mengonfigurasi nodeSelector atau nodeAffinity untuk menjadwalkan beban kerja ke node virtual berbasis ARM.
nodeSelector
Tambahkan batasan berikut ke pod untuk memaksa nodeSelector menjadwalkan pod ke node virtual berbasis ARM. Dalam hal ini, nodeSelector hanya menjadwalkan pod ke node dengan label arm64. Semua node virtual berbasis ARM di kluster ACK memiliki label ini.
nodeSelector:
kubernetes.io/arch: arm64 # Tentukan label yang digunakan untuk memilih node berbasis ARM.Kode sampel berikut menunjukkan contoh cara menjadwalkan pod yang dibuat oleh Deployment ke node virtual berbasis ARM.
nodeAffinity
Prasyarat
Kluster telah mengaktifkan penjadwalan node virtual, dan versi Kubernetes serta komponen kluster memenuhi persyaratan.
Prosedur
Tambahkan batasan berikut ke pod untuk menjadwalkan pod ke node berbasis ARM berdasarkan afinitas node. Setelah batasan ini ditambahkan, pod hanya dapat dijadwalkan ke node yang memiliki label kubernetes.io/arm=arm64.
Ketika podSpec berisi batasan ini, penjadwal secara otomatis mentoleransi kubernetes.io/arch=arm64:NoSchedule.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64Kode sampel berikut menunjukkan contoh cara menjadwalkan pod yang dibuat oleh Deployment ke node virtual berbasis ARM.
Jadwalkan beban kerja multi-arsitektur ke node virtual berbasis ARM
Prasyarat
Kluster telah mengaktifkan penjadwalan node virtual, dan versi Kubernetes serta komponen kluster memenuhi persyaratan.
Prosedur
Secara default, beban kerja di kluster ACK dijadwalkan ke node virtual berbasis x86. Pod tetap dalam status Pending ketika node virtual berbasis x86 tidak mencukupi. Jika Anda menggunakan gambar multi-arsitektur, seperti gambar yang mendukung arsitektur x86 dan ARM, Anda perlu menjadwalkan pod ke node lintas arsitektur x86 dan ARM.
Sebagai contoh, Anda dapat mengonfigurasi afinitas node untuk lebih memilih menjadwalkan beban kerja ke node virtual berbasis ARM atau node virtual berbasis x86. Jika node virtual yang diminta tidak mencukupi, penjadwal mencoba menjadwalkan beban kerja ke jenis node virtual lainnya.
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64Lebih memilih menjadwalkan ke node virtual berbasis ARM
Kode sampel berikut menunjukkan contoh cara lebih memilih menjadwalkan beban kerja ke node virtual berbasis ARM.
Lebih memilih menjadwalkan ke node virtual berbasis x86
Kode sampel berikut menunjukkan contoh cara lebih memilih menjadwalkan beban kerja ke node virtual berbasis x86.
FAQ
Mengapa pod dijadwalkan ke instance ECS berbasis x86 setelah saya mengonfigurasi nodeAffinity untuk lebih memilih menjadwalkan pod ke node berbasis ARM?
Secara default, penjadwal kluster lebih memilih menjadwalkan beban kerja ke instance ECS. Jika sumber daya instance ECS tidak mencukupi, penjadwal kluster akan menjadwalkan beban kerja ke node virtual. Jika Anda tidak mengubah bobot plugin penilaian penjadwal, pod mungkin dijadwalkan ke instance ECS berbasis x86 meskipun kluster memiliki sumber daya yang cukup dan nodeAffinity dikonfigurasi untuk lebih memilih menjadwalkan pod ke node berbasis ARM. Oleh karena itu, gunakan konfigurasi nodeAffinity dalam topik ini untuk menentukan prioritas menjadwalkan beban kerja ke node virtual berbasis ARM atau x86. Prioritas menjadwalkan beban kerja ke node virtual atau instance ECS tidak dapat dijamin.
Apakah saya dapat menggunakan instance preemptible berbasis ARM?
Ya, instance preemptible berbasis ARM tersedia. Untuk informasi lebih lanjut, lihat Gunakan Instance Preemptible.
Bagaimana cara mengonfigurasi jaringan yang mendukung node virtual berbasis ARM setelah saya membuat kluster?
Setelah membuat kluster ACK di zona yang mendukung instance berbasis ARM, Anda dapat memodifikasi parameter vSwitchIds di ConfigMap eci-profile untuk memilih vSwitch yang berada di zona tersebut. Ini memastikan bahwa node virtual yang Anda buat mendukung arsitektur ARM.
Apa batasan penggunaan node berbasis ARM di kluster ACK?
Komponen yang ditampilkan di halaman Marketplace konsol ACK tidak mendukung arsitektur ARM. Hanya komponen berikut yang mendukung arsitektur ARM:
Komponen Utama
Komponen Logging dan Pemantauan
Komponen Volume
Komponen Jaringan
Referensi
Untuk informasi lebih lanjut tentang cara menggunakan instance Enterprise Edition Container Registry untuk membangun gambar kontainer multi-arsitektur, lihat Bangun Gambar Kontainer Multi-Arsitektur.
Untuk informasi lebih lanjut tentang cara membuat dan mengelola node ECS berbasis ARM secara umum, lihat Jadwalkan Beban Kerja ke Node Berbasis ARM.
Untuk informasi lebih lanjut tentang cara menjalankan pekerjaan big data tanpa perlu memelihara sumber daya kluster yang mendasarinya, lihat Jalankan Pekerjaan Spark pada Node Virtual Berbasis ARM.