All Products
Search
Document Center

Container Service for Kubernetes:Jadwalkan workload ke node virtual Arm

Last Updated:Mar 08, 2026

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.

    Catatan

    Instans 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

  1. Masuk ke Container Service Management Console . Di panel navigasi sebelah kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik Configurations > ConfigMaps.

  3. Pada daftar drop-down Namespace, pilih kube-system. Temukan ConfigMap eci-profile dan klik Edit. Ubah nilai kunci enableLinuxArm64Node menjadi true, lalu klik OK.

    image.png

    Catatan

    Jika 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
  1. Atur parameter enableLinuxArm64Node ke true.

  2. Atur vSwitchIds agar mencakup setidaknya satu vSwitch dari zona yang mendukung instans Arm.

    Catatan

    Jika 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.

Lihat file YAML

Catatan

File YAML berikut menambahkan toleransi terhadap kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah ACK Managed Cluster Pro yang menjalankan Kubernetes 1.24 atau lebih baru, penjadwal ACK secara otomatis mendeteksi taint ini dan Anda tidak perlu mendeklarasikan toleransi tersebut.

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 ke node Arm.
      tolerations:
      # Toleransi terhadap taint node virtual.
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule
      # Toleransi terhadap taint node virtual Arm.
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule
      containers:
      - name: nginx
        image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/nginx_optimized:20240221-1.20.1-2.3.0

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.

Lihat file YAML

Catatan

File YAML berikut menambahkan toleransi terhadap kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah ACK Managed Cluster Pro yang menjalankan Kubernetes 1.24 atau lebih baru, penjadwal ACK secara otomatis mendeteksi taint ini dan Anda tidak perlu mendeklarasikan toleransi tersebut.

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
      tolerations:
       # Toleransi terhadap taint node virtual.
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule
       # Toleransi terhadap taint node virtual Arm.
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule         
      containers:
      - name: nginx
        image: nginx

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.

Lihat file YAML

Catatan

File YAML berikut menambahkan toleransi terhadap kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah ACK Managed Cluster Pro yang menjalankan Kubernetes 1.24 atau lebih baru, penjadwal ACK secara otomatis mendeteksi taint ini dan Anda tidak perlu mendeklarasikan toleransi tersebut.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: arm-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      # Toleransi terhadap taint node virtual.
      - key: virtual-kubelet.io/provider
        operator: Exists
        effect: NoSchedule
      # Toleransi terhadap taint node virtual Arm.
      - key: kubernetes.io/arch
        operator: Equal
        value: arm64
        effect: NoSchedule
      # Prioritaskan node arsitektur Arm.
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64
      containers:
      - name: my-container
        image: nginx

Prioritaskan arsitektur x86

Contoh berikut menunjukkan cara memprioritaskan node virtual x86.

Lihat file YAML

Catatan

File YAML berikut menambahkan toleransi terhadap kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah ACK Managed Cluster Pro yang menjalankan Kubernetes 1.24 atau lebih baru, penjadwal ACK secara otomatis mendeteksi taint ini dan Anda tidak perlu mendeklarasikan toleransi tersebut.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: amd-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      # Toleransi terhadap taint node virtual.
      - key: virtual-kubelet.io/provider
        operator: Exists
        effect: NoSchedule
      # Toleransi terhadap taint node virtual Arm.
      - key: kubernetes.io/arch
        operator: Equal
        value: arm64
        effect: NoSchedule     
      # Prioritaskan node arsitektur x86.
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
      containers:
      - name: my-container
        image: nginx

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