All Products
Search
Document Center

Container Service for Kubernetes:Jadwalkan workload arsitektur Arm atau multi-arsitektur ke node virtual Arm

Last Updated:Jun 22, 2026

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

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

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

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

  3. Dari daftar drop-down Namespace, pilih kube-system. Temukan eci-profile dan klik Edit di kolom Actions. Atur nilai kunci enableLinuxArm64Node menjadi true. Lalu, klik OK.

    Catatan

    Jika 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-arm64 di 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
  1. Tambahkan atau perbarui parameter enableLinuxArm64Node dan atur nilainya menjadi true.

  2. Atur parameter vSwitchIds. Pastikan setidaknya satu vSwitch yang ditentukan dalam daftar vSwitchIds berada di zona yang mendukung instance berbasis Arm.

    Catatan

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

Perluas untuk melihat file YAML

Catatan

YAML berikut menambahkan toleration untuk taint kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah kluster ACK Pro yang menjalankan Kubernetes 1.24 atau versi lebih baru, penjadwal ACK secara otomatis mengenali taint ini dan Anda tidak perlu menambahkan toleration.

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 # Tentukan node Arm.
      tolerations:
      # Toleransi terhadap taint node virtual.
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule
      # Toleransi terhadap taint pada 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

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.

Perluas untuk melihat file YAML

Catatan

YAML berikut menambahkan toleration untuk taint kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah kluster ACK Pro yang menjalankan Kubernetes 1.24 atau versi lebih baru, penjadwal ACK secara otomatis mengenali taint ini dan Anda tidak perlu menambahkan toleration.

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 pada node virtual Arm.
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule         
      containers:
      - name: nginx
        image: nginx

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.

Perluas untuk melihat file YAML

Catatan

YAML berikut menambahkan toleration untuk taint kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah kluster ACK Pro yang menjalankan Kubernetes 1.24 atau versi lebih baru, penjadwal ACK secara otomatis mengenali taint ini dan Anda tidak perlu menambahkan toleration.

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 pada node virtual Arm.
      - key: kubernetes.io/arch
        operator: Equal
        value: arm64
        effect: NoSchedule
      # Jadwalkan workload secara preferensial ke node yang menggunakan 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

Perluas untuk melihat file YAML

Catatan

YAML berikut menambahkan toleration untuk taint kubernetes.io/arch=arm64:NoSchedule. Jika kluster Anda adalah kluster ACK Pro yang menjalankan Kubernetes 1.24 atau versi lebih baru, penjadwal ACK secara otomatis mengenali taint ini dan Anda tidak perlu menambahkan toleration.

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 pada node virtual Arm.
      - key: kubernetes.io/arch
        operator: Equal
        value: arm64
        effect: NoSchedule     
      # Jadwalkan workload secara preferensial ke node yang menggunakan arsitektur x86.
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
      containers:
      - name: my-container
        image: nginx

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