全部产品
Search
文档中心

Container Service for Kubernetes:Buat node virtual berbasis ARM dan jadwalkan beban kerja ke node berbasis ARM

更新时间:Jul 06, 2025

Secara default, Container Service for Kubernetes (ACK) menjadwalkan semua beban kerja ke node pekerja berbasis x86. Jika klaster Anda mencakup node berbasis ARM dan node lainnya, seperti node berbasis x86, Anda dapat mengonfigurasi penjadwalan Kubernetes untuk memprioritaskan menjadwalkan beban kerja ARM hanya ke node berbasis ARM atau menjadwalkan beban kerja multi-arsitektur ke node berbasis ARM.

Prasyarat

  • Klaster yang menjalankan Kubernetes 1.20 atau versi lebih baru telah dibuat. Sistem operasi klaster adalah Alibaba Cloud Linux 3. Untuk informasi lebih lanjut, lihat Buat Klaster dan Tingkatkan Klaster.

    Catatan
    • Di halaman Add-ons, hanya komponen Core Components, Logs and Monitoring, Storage, dan Networking yang dapat digunakan di pool node berbasis ARM.

    • Komponen yang ditampilkan di halaman Marketplace konsol ACK tidak dapat diterapkan di pool node berbasis ARM.

  • Komponen kube-scheduler telah terpasang. Untuk informasi lebih lanjut, lihat Kelola Komponen.

Catatan Penggunaan

Jika baik node berbasis ARM maupun node berbasis x86 ada di klaster Anda, kami sarankan Anda menambahkan tanda kubernetes.io/arch=arm64:NoSchedule ke node berbasis ARM. Ini menghindari penjadwalan aplikasi atau komponen yang tidak mendukung arsitektur ARM ke node berbasis ARM secara tidak sengaja. Saat Anda mengonfigurasi nodeSelector atau nodeAffinity untuk menjadwalkan aplikasi ke node berbasis ARM di klaster ACK yang menjalankan versi Kubernetes sebelum 1.24, Anda perlu menambahkan toleration untuk mentoleransi tanda kubernetes.io/arch=arm64:NoSchedule. Namun, jika klaster menjalankan Kubernetes 1.24 atau versi lebih baru, penjadwal otomatis akan mentoleransi tanda kubernetes.io/arch=arm64:NoSchedule. Dalam kasus ini, Anda tidak perlu menambahkan toleration untuk mentoleransi tanda tersebut.

Penagihan

Untuk informasi lebih lanjut tentang jenis instance ECS yang menggunakan arsitektur ARM dan harga dari jenis-jenis ini, lihat topik-topik berikut:

Buat klaster atau pool node berbasis ARM

Saat membuat klaster ACK, Anda dapat menambahkan node berbasis ARM untuk mendapatkan klaster yang hanya berisi node berbasis ARM. Anda juga dapat membuat pool node berbasis ARM di klaster yang sudah ada untuk mendapatkan pool node yang hanya berisi node berbasis ARM.

Buat pool node berbasis ARM saat membuat klaster

Saat mengonfigurasi pool node untuk klaster, pilih Arm untuk parameter Architecture di bagian Instance Type. Lalu, pilih instance umum g8m dan konfigurasikan parameter lainnya berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang item konfigurasi yang diperlukan untuk membuat klaster ACK, lihat Buat Klaster ACK Terkelola.image.png

Catatan

Anda dapat mengunjungi halaman Jenis Instance ECS yang Tersedia untuk Setiap Wilayah untuk melihat jenis instance yang tersedia di setiap wilayah.

Buat pool node

Saat membuat pool node, atur parameter Architecture menjadi ARM di bagian Instance Type. Lalu, konfigurasikan parameter lainnya berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang parameter pool node, lihat Buat dan Kelola Pool Node.image.png

Catatan

Anda dapat mengunjungi halaman Jenis Instance ECS yang Tersedia untuk Setiap Wilayah untuk melihat jenis instance yang tersedia di setiap wilayah.

Jadwalkan beban kerja ARM ke node berbasis ARM

Jika klaster Anda mencakup node berbasis ARM dan node lainnya dan semua beban kerja menggunakan arsitektur ARM, Anda harus menjadwalkan beban kerja hanya ke node berbasis ARM. Jika pod dijadwalkan ke node lain, pod tidak dapat diluncurkan. Secara default, semua node berbasis ARM memiliki label kubernetes.io/arch=arm64. Anda dapat menggunakan pengaturan nodeSelector atau nodeAffinity untuk menjadwalkan beban kerja ke node tersebut.

nodeSelector

Tambahkan batasan berikut ke pod. Dengan cara ini, nodeSelector menjadwalkan pod ke node berbasis ARM. nodeSelector hanya menjadwalkan pod beban kerja ke node yang memiliki label arm64. Semua node berbasis ARM di klaster memiliki label ini.

nodeSelector:
  kubernetes.io/arch: arm64 # Tentukan label yang digunakan untuk memilih node berbasis ARM.

Anda dapat menggunakan file YAML berikut untuk menerapkan aplikasi tanpa status di node berbasis ARM:

Tampilkan Konten YAML

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 label yang digunakan untuk memilih node berbasis ARM.
      containers:
      - name: nginx
        image: nginx

nodeAffinity

Anda dapat menambahkan batasan berikut ke pod untuk menjadwalkan pod ke node berbasis ARM berdasarkan afinitas node: Setelah Anda menambahkan batasan, pod hanya dapat dijadwalkan ke node yang memiliki label kubernetes.io/arm=arm64.

Saat spesifikasi pod berisi batasan, penjadwal akan mentoleransi tanda kubernetes.io/arch=arm64:NoSchedule.

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

Anda dapat menggunakan file YAML berikut untuk menerapkan aplikasi tanpa status di node berbasis ARM:

Tampilkan Konten YAML

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

Jadwalkan beban kerja multi-arsitektur ke node berbasis ARM

Secara default, ACK menjadwalkan semua beban kerja ke node berbasis x86. Jika node x86 tidak mencukupi, pod akan tertunda. Jika gambar aplikasi Anda adalah gambar multi-arsitektur, seperti gambar yang mendukung arsitektur x86 dan ARM, Anda harus mengonfigurasi penjadwalan node lintas arsitektur.

Sebagai contoh, Anda dapat mengonfigurasi afinitas node untuk lebih memprioritaskan menjadwalkan beban kerja ke node berbasis ARM atau x86. Kemudian, jadwalkan beban kerja ke jenis node lainnya ketika node berbasis ARM atau x86 tidak mencukupi.

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

Lebih memilih menjadwalkan beban kerja ke node berbasis ARM

Beban kerja berikut lebih disukai dijadwalkan ke node berbasis ARM.

Tampilkan Konten YAML

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

Lebih memilih menjadwalkan beban kerja ke node berbasis x86

Beban kerja berikut lebih disukai dijadwalkan ke node berbasis x86.

Tampilkan Konten YAML

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:
# Lebih memilih menjadwalkan beban kerja ke node berbasis x86.
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
      containers:
      - name: my-container
        image: nginx

FAQ

Apakah saya bisa menggunakan instance preemptible berbasis ARM?

Ya, Anda bisa menggunakan instance preemptible berbasis ARM. Untuk informasi lebih lanjut, lihat Gunakan Instance Preemptible.

Apa batasan penggunaan node berbasis ARM di klaster ACK?

Hanya komponen berikut yang mendukung arsitektur ARM:

  • Komponen Utama

  • Komponen Logging dan Pemantauan

  • Komponen Volume

  • Komponen Jaringan

Komponen yang ditampilkan di halaman Marketplace konsol ACK tidak mendukung arsitektur ARM.

Referensi