All Products
Search
Document Center

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

Last Updated:Aug 21, 2026

Secara default, kluster ACK dan kluster ACK Serverless menjadwalkan semua workload ke node virtual x86. Jika kluster Anda memiliki node virtual Arm dan non-Arm, gunakan penjadwalan native Kubernetes (nodeSelector atau nodeAffinity) agar workload khusus Arm ditempatkan di node virtual Arm dan gambar multi-arsitektur dapat memprioritaskan node Arm.kluster ACK dan untuk menjadwalkan workload khusus Arm atau multi-arsitektur ke node virtual Arm. Secara default, semua workload dijadwalkan ke node virtual x86.

Prasyarat

Catatan penggunaan

Untuk kluster yang menjalankan Kubernetes versi sebelum 1.24, tambahkan toleration untuk taint kubernetes.io/arch=arm64:NoSchedule saat menggunakan nodeSelector atau nodeAffinity untuk menjadwalkan workload ke node Arm. Kluster Kubernetes 1.24+ secara otomatis mengenali taint kubernetes.io/arch=arm64:NoSchedule, sehingga toleration tidak diperlukan.

Penagihan

Tipe instans ECS berbasis ARM dan harga:

Langkah 1: Tambahkan node virtual Arm

Buat node virtual Arm dengan mengedit ConfigMap eci-profile menggunakan salah satu metode berikut. 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. Atur enableLinuxArm64Node menjadi true, lalu klik OK.

    Catatan

    Jika tidak ada vSwitch di kluster Anda yang berada di zona yang mendukung instance berbasis Arm, buat satu di zona yang didukung dan tambahkan ID-nya ke bidang vSwitchIds. Lihat Buat dan kelola vSwitch.

    Sekitar 30 detik kemudian, node virtual virtual-kubelet-<zoneId>-linux-arm64 muncul di halaman Nodes.

Kubectl

Prasyarat

Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.

Prosedur

Edit ConfigMap:

kubectl edit configmap eci-profile -n kube-system
  1. Atur parameter enableLinuxArm64Node menjadi true.

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

    Catatan

    Jika tidak ada vSwitch di kluster Anda yang berada di zona yang mendukung instance berbasis Arm, buat satu di zona yang didukung dan tambahkan ID-nya ke bidang vSwitchIds. Lihat Buat dan kelola vSwitch.

    Sekitar 30 detik kemudian, node virtual virtual-kubelet-<zoneId>-linux-arm64 muncul di halaman Nodes.

Langkah 2: Jadwalkan ke node virtual Arm

Jadwalkan workload khusus Arm

Jika suatu kluster memiliki node Arm dan non-Arm serta aplikasi hanya mendukung arsitektur Arm, jadwalkan ke node Arm untuk mencegah kegagalan startup. Semua node Arm memiliki label kubernetes.io/arch=arm64. Gunakan nodeSelector atau nodeAffinity untuk menargetkannya.

nodeSelector

Tambahkan nodeSelector berikut ke spesifikasi pod untuk menargetkan node virtual Arm. Semua node virtual Arm di kluster ACK atau memiliki label arm64.

nodeSelector:
  kubernetes.io/arch: arm64 # Tentukan node Arm.

Contoh file YAML berikut menyebarkan aplikasi tanpa status ke node virtual Arm.

Perluas untuk melihat file YAML

Catatan

File 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 dari 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 telah diaktifkan untuk kluster, dan versi kluster serta komponen memenuhi persyaratan.

Contoh

Tambahkan nodeAffinity berikut ke spesifikasi pod untuk menargetkan node Arm dengan label kubernetes.io/arch=arm64.

Dengan batasan ini, penjadwal secara otomatis mentoleransi taint kubernetes.io/arch=arm64:NoSchedule.

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/arch
          operator: In
          values:
          - arm64

Contoh file YAML berikut menyebarkan aplikasi tanpa status ke node virtual Arm.

Perluas untuk melihat file YAML

Catatan

File 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 dari 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 telah diaktifkan untuk kluster, dan versi kluster serta komponen memenuhi persyaratan.

Contoh

Kluster ACK dan kluster ACK Serverless menjadwalkan semua workload ke node virtual x86 secara default dan terus menunggu kapasitas x86 ketika sumber daya x86 tidak mencukupi. dan menjadwalkan semua workload ke node virtual x86 secara default dan terus menunggu sumber daya x86 ketika tidak mencukupi. Untuk gambar multi-arsitektur, konfigurasikan penjadwalan lintas arsitektur untuk menggunakan node x86 dan Arm.

Konfigurasikan afinitas node untuk menjadwalkan workload secara preferensial ke node virtual Arm atau x86. Jika sumber daya yang diprioritaskan tidak mencukupi, penjadwal akan beralih ke arsitektur lainnya.

      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

Prioritaskan arsitektur Arm

Contoh file YAML untuk workload yang dijadwalkan secara preferensial ke node virtual Arm:

Perluas untuk melihat file YAML

Catatan

File 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 dari 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

File 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 dari 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

Penjadwal kluster secara default memprioritaskan instance ECS daripada node virtual. Tanpa bobot plugin skor kustom, pod mungkin tetap dijadwalkan ke instance ECS x86 meskipun nodeAffinity diatur untuk memprioritaskan node Arm. Pengaturan nodeAffinity dalam topik ini hanya menjamin prioritas antar arsitektur node virtual (Arm vs. x86), bukan antara node virtual dan instance ECS.

Apakah saya dapat menggunakan instance preemptible Arm?

Ya. Lihat Gunakan instance preemptible.

Konfigurasi jaringan untuk node virtual Arm

Setelah membuat kluster ACK atau , atur bidang vSwitchIds dalam eci-profile agar mencakup vSwitch di zona yang mendukung instance berbasis Arm.

Apa saja batasan penggunaan node arsitektur Arm di kluster ACK?

Add-on App Marketplace tidak didukung pada arsitektur Arm. Di Pusat Komponen, hanya kategori berikut yang didukung:

  • Komponen inti

  • Pencatatan dan pemantauan

  • Penyimpanan

  • Jaringan

Referensi