All Products
Search
Document Center

Container Service for Kubernetes:Buat kelompok node Arm dan jadwalkan beban kerja ke node Arm

Last Updated:Mar 26, 2026

Secara default, ACK menjadwalkan beban kerja ke node pekerja berbasis x86. Di kluster campuran yang mencakup node berbasis ARM dan x86, konfigurasikan penjadwalan Kubernetes untuk mengarahkan beban kerja ARM secara eksklusif ke node berbasis ARM atau memprioritaskan node berbasis ARM untuk beban kerja multi-arsitektur.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Hanya komponen Core Components, Logs and Monitoring, Storage, dan Networking di halaman Add-ons yang mendukung kelompok node berbasis ARM. Komponen yang tercantum di halaman Marketplace pada Konsol ACK tidak dapat dideploy di kelompok node berbasis ARM.

Lebih Memilih Node Berbasis ARM

Pertimbangkan batasan berikut sebelum menambahkan node berbasis ARM ke konfigurasi penjadwalan Anda:

  • Hanya gambar ARM: Aplikasi yang dijadwalkan ke node berbasis ARM harus menggunakan gambar kontainer yang dikompilasi untuk arsitektur ARM. Menjadwalkan gambar khusus x86 ke node ARM menyebabkan Pod gagal dimulai.

  • Gambar multi-arsitektur: Jika gambar aplikasi Anda mendukung ARM dan x86, gunakan preferredDuringSchedulingIgnoredDuringExecution untuk memprioritaskan node ARM, namun tetap memungkinkan fallback ke node x86 saat kapasitas ARM tidak tersedia.

Lindungi node ARM dengan taint

Tambahkan taint kubernetes.io/arch=arm64:NoSchedule ke node berbasis ARM untuk mencegah beban kerja yang tidak mendukung arsitektur ARM dijadwalkan secara tidak sengaja ke node tersebut.

Kubernetes menyediakan tiga efek taint:

EffectBehavior
NoSchedulePod baru tanpa toleransi yang sesuai tidak dijadwalkan ke node tersebut. Pod yang sudah berjalan di node tidak di-evict.
NoExecutePod baru tanpa toleransi yang sesuai tidak dijadwalkan ke node tersebut. Pod yang sudah ada tanpa toleransi yang sesuai akan di-evict.
PreferNoSchedulePenjadwal menghindari penempatan Pod tanpa toleransi yang sesuai ke node tersebut, tetapi tidak sepenuhnya mencegahnya.

Gunakan NoSchedule untuk node berbasis ARM. Ini memblokir Pod baru yang tidak kompatibel sambil membiarkan Pod yang sudah ada tetap berjalan.

Perilaku toleransi berdasarkan versi Kubernetes:

  • Kubernetes < 1.24: Saat menggunakan nodeSelector atau nodeAffinity untuk menargetkan node ARM, tambahkan toleransi secara manual untuk kubernetes.io/arch=arm64:NoSchedule dalam spesifikasi Pod.

  • Kubernetes >= 1.24: Penjadwal secara otomatis mentoleransi taint kubernetes.io/arch=arm64:NoSchedule saat Pod menargetkan node ARM — tidak diperlukan toleransi manual.

Tagihan

Untuk tipe instans ECS yang menggunakan arsitektur ARM dan harganya, lihat:

Buat kelompok node berbasis ARM

Saat membuat kelompok node, di bagian Instance Type, atur Architecture ke Arm, konfigurasikan parameter lain sesuai kebutuhan, lalu selesaikan pembuatan kelompok node. Untuk informasi selengkapnya tentang cara membuat kelompok node, lihat Buat dan kelola kelompok node.image.png

Catatan

Buka Tipe Instans yang Tersedia untuk Setiap Wilayah untuk melihat tipe instans yang tersedia di setiap wilayah.

Tambahkan node berbasis ARM ke kluster Anda baik saat membuat kluster baru maupun dengan menambahkan kelompok node ke kluster yang sudah ada.

Buat kelompok node berbasis ARM saat membuat kluster

Saat mengonfigurasi kelompok node selama pembuatan kluster, di bagian Instance Type, atur Architecture ke Arm, pilih tipe instans dari keluarga instans tujuan umum g8m, konfigurasikan parameter lainnya, lalu selesaikan pembuatan kluster. Untuk informasi selengkapnya tentang cara membuat kluster, lihat Buat kluster ACK yang dikelola.image.png

Catatan

Buka Tipe Instans yang Tersedia untuk Setiap Wilayah untuk melihat tipe instans yang tersedia di setiap wilayah.

Saat mengonfigurasi kelompok node selama pembuatan kluster, atur Architecture ke Arm di bagian Instance Type dan pilih instans tujuan umum g8m. Konfigurasikan parameter lain sesuai kebutuhan Anda.

Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.

image.png
Untuk melihat tipe instans ARM yang tersedia berdasarkan wilayah, lihat Tipe instans ECS yang tersedia untuk setiap wilayah.

Tambahkan kelompok node berbasis ARM ke kluster yang sudah ada

Saat membuat kelompok node, atur Architecture ke ARM di bagian Instance Type. Konfigurasikan parameter lain sesuai kebutuhan Anda.

Untuk informasi selengkapnya, lihat Buat dan kelola kelompok node.

image.png
Untuk melihat tipe instans ARM yang tersedia berdasarkan wilayah, lihat Tipe instans ECS yang tersedia untuk setiap wilayah.

Jadwalkan beban kerja khusus ARM ke node berbasis ARM

Jika beban kerja Anda menggunakan arsitektur ARM secara eksklusif dan kluster Anda berisi node non-ARM, arahkan beban kerja tersebut ke node ARM. Pod yang dijadwalkan ke node yang tidak kompatibel akan gagal dimulai.

Semua node berbasis ARM secara otomatis memiliki label kubernetes.io/arch=arm64. Gunakan nodeSelector atau nodeAffinity untuk menargetkan label ini.

nodeSelector

Tambahkan bidang berikut ke spesifikasi Pod untuk membatasi penjadwalan hanya ke node berbasis ARM:

nodeSelector:
  kubernetes.io/arch: arm64 # Jadwalkan hanya ke node dengan label arm64.

Penyebaran berikut menggunakan nodeSelector untuk menjadwalkan semua Pod ke node berbasis ARM:

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 hanya ke node dengan label arm64.
      containers:
      - name: nginx
        image: nginx

Verifikasi: Setelah menerapkan manifes, jalankan perintah berikut dan pastikan Pod berjalan di node berbasis ARM:

kubectl get pods -o wide

Output yang diharapkan (kolom NODE menampilkan nama node berbasis ARM):

NAME                        READY   STATUS    RESTARTS   AGE   NODE
only-arm-xxxxxxxxx-xxxxx    1/1     Running   0          30s   <arm-node-name>

nodeAffinity

Gunakan nodeAffinity dengan requiredDuringSchedulingIgnoredDuringExecution untuk menerapkan penjadwalan khusus ARM. Penjadwal secara otomatis mentoleransi taint kubernetes.io/arch=arm64:NoSchedule saat kendala ini ada.

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

Penyebaran berikut menggunakan nodeAffinity untuk menjadwalkan semua Pod ke node berbasis ARM:

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
      containers:
      - name: nginx
        image: nginx

Verifikasi: Setelah menerapkan manifes, jalankan perintah berikut dan pastikan Pod berjalan di node berbasis ARM:

kubectl get pods -o wide

Output yang diharapkan:

NAME                        READY   STATUS    RESTARTS   AGE   NODE
only-arm-xxxxxxxxx-xxxxx    1/1     Running   0          30s   <arm-node-name>

Jadwalkan beban kerja multi-arsitektur ke node berbasis ARM

Jika gambar aplikasi Anda mendukung ARM dan x86, konfigurasikan preferredDuringSchedulingIgnoredDuringExecution untuk memprioritaskan node berbasis ARM. Saat kapasitas ARM tidak mencukupi, Pod akan fallback ke node x86 alih-alih menjadi pending.

Prioritaskan node berbasis ARM

Penyebaran berikut memprioritaskan node berbasis ARM. Pod akan fallback ke node x86 jika kapasitas ARM tidak tersedia.

Prioritaskan node berbasis ARM

Penyebaran berikut memprioritaskan node berbasis ARM. Pod akan fallback ke node x86 jika kapasitas ARM tidak tersedia.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: arm-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64
      containers:
      - name: my-container
        image: nginx

Prioritaskan node berbasis x86

Prioritaskan node berbasis x86

Penyebaran berikut memprioritaskan node berbasis x86.

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:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
      containers:
      - name: my-container
        image: nginx

FAQ

Apakah saya dapat menggunakan instans preemptible berbasis ARM?

Ya. Untuk informasi selengkapnya, lihat Gunakan instans preemptible.

Komponen apa saja yang didukung di node berbasis ARM?

Hanya kategori komponen berikut yang mendukung arsitektur ARM di kluster ACK:

  • Komponen utama

  • Komponen logging dan pemantauan

  • Komponen volume

  • Komponen jaringan

Komponen di halaman Marketplace pada Konsol ACK tidak mendukung arsitektur ARM.

Langkah selanjutnya