全部产品
Search
文档中心

Elastic Container Instance:Jadwalkan pod ke node virtual berbasis ARM

更新时间:Jul 06, 2025

Secara default, pod dalam klaster Container Service for Kubernetes (ACK) dan klaster ACK Serverless dijadwalkan untuk berjalan pada node virtual berbasis x86 ketika Anda menjadwalkan pod sebagai Elastic Container Instance pada node virtual. Jika aplikasi Anda diterapkan pada arsitektur ARM, Anda harus menambahkan field nodeSelector untuk menentukan node virtual yang ingin digunakan saat menjadwalkan pod pada node virtual. Topik ini menjelaskan cara menjadwalkan pod ke node virtual berbasis ARM.

Prasyarat

Klaster harus memenuhi persyaratan berikut:

  • Instance kontainer elastis berbasis ARM didukung di wilayah tempat klaster berada.

    Keluarga instance ARM seperti g8y, c8y, dan r8y dari Elastic Compute Service (ECS) dapat digunakan untuk membuat instance kontainer elastis. Untuk informasi tentang wilayah-wilayah tempat instance kontainer elastis berbasis ARM dapat dibuat, lihat Tipe Instance ECS yang Tersedia untuk Setiap Wilayah.

  • Klaster menjalankan Kubernetes 1.20 atau lebih baru.

  • Versi komponen ACK Virtual Node dalam klaster mendukung node berbasis ARM.

  • Versi komponen kube-scheduler dalam klaster mendukung node berbasis ARM.

Peringatan

Saat Anda menjadwalkan pod untuk berjalan pada node virtual berbasis ARM, Anda akan dikenai biaya untuk instance kontainer elastis yang sesuai berdasarkan spesifikasi ARM aktual, bukan spesifikasi vCPU dan memori yang digunakan.

Catatan

Setelah Anda membuat pod berbasis Elastic Container Instance, Anda dapat menjalankan perintah kubectl describe pod <pod name> untuk melihat detail pod dan memeriksa tipe instance ECS dari pod tersebut di field k8s.aliyun.com/eci-instance-spec.

Tambahkan node virtual berbasis ARM

Anda dapat melakukan operasi berikut untuk memodifikasi eci-profile dan menambahkan node virtual berbasis ARM ke klaster:

  1. Modifikasi eci-profile.

    kubectl edit configmap eci-profile -n kube-system

    Atur parameter enableLinuxArm64Node menjadi true di field data dari eci-profile. Pastikan bahwa setidaknya satu zona yang dikonfigurasi mendukung instance kontainer elastis berbasis ARM. Contoh:

    data:
      enableClusterIp: "true"
      enableHybridMode: "false"
      enableLinuxArm64Node: "true"    # Mengaktifkan fitur node berbasis ARM.
      enableLogController: "false"
      enablePVCController: "false"
      enablePrivateZone: "false"
      enableReuseSSLKey: "false"
      featureGates: MetricsVpcNet=true,ProtectionFinalizers=false,WaitForFirstConsumer=false
      resourceGroupId: ""
      securityGroupId: sg-2zeg1fci0oq1hljo6h0a
      selectors: ""
      slsMachineGroup: ""
      vSwitchIds: vsw-2zewa5mb19wr45g63****,vsw-2zevanrscmoiaxryx****,vsw-2ze94pjtfuj9vaymf****   # ID vSwitch. Setidaknya satu vSwitch ditempatkan di zona di mana instance kontainer elastis berbasis ARM dapat dibuat.
      vpcId: vpc-2zeghwzptn5zii0w7****
  2. Lihat node virtual berbasis ARM yang dihasilkan dalam klaster.

    Jalankan perintah kubectl get node untuk melihat informasi tentang node. Sebuah node virtual berbasis ARM secara otomatis dihasilkan dalam klaster.

    ARM节点

Jadwalkan pod ke node virtual berbasis ARM

Konfigurasikan field nodeSelector

Dalam klaster ACK dan klaster ACK Serverless, semua node virtual berbasis ARM memiliki label kubernetes.io/arch: arm64. Saat Anda membuat pod berbasis Elastic Container Instance, Anda dapat menggunakan field nodeSelector untuk menentukan node virtual berbasis ARM dan menjadwalkan pod untuk berjalan pada node tersebut.

nodeSelector:
  kubernetes.io/arch: arm64 

Contoh file YAML pod:

  • Tidak ada spesifikasi yang ditentukan untuk pod.

    Jika Anda tidak menentukan spesifikasi untuk pod, sistem secara otomatis menggunakan tipe instance ECS berbasis ARM (ecs.c8y.large) yang memiliki 2 vCPU dan 4 GiB memori.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx-test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"    # Menjadwalkan pod ke node virtual.
        spec:
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Menggunakan gambar berbasis ARM.
            command: ["sleep"]
            args: ["999999"]
          nodeSelector:
            kubernetes.io/arch: arm64  # Menentukan node virtual berbasis ARM.
  • Spesifikasi vCPU dan memori ditentukan.

    Jika Anda menentukan spesifikasi vCPU dan memori, sistem secara otomatis memilih tipe instance ECS berbasis ARM yang memenuhi spesifikasi vCPU dan memori dari tipe instance ECS yang didukung oleh Elastic Container Instance.

    Catatan

    Anda dapat menggunakan parameter limits atau requests dari kontainer untuk menentukan spesifikasi vCPU dan memori. Kami merekomendasikan Anda menggunakan parameter limits. Anda juga dapat menambahkan anotasi k8s.aliyun.com/eci-use-specs untuk menentukan spesifikasi vCPU dan memori.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx-test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"    # Menjadwalkan pod ke node virtual.
        spec:
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Menggunakan gambar berbasis ARM.
            command: ["sleep"]
            args: ["999999"]
            resources:
              limits:
                cpu: "1000m"      # Menentukan 1 vCPU.
                memory: "4096Mi"   # Menentukan ukuran memori container NGINX adalah 4 GiB.
          nodeSelector:
            kubernetes.io/arch: arm64  # Menentukan node virtual berbasis ARM.
  • Tipe instance ECS berbasis ARM ditentukan.

    Jika Anda memiliki persyaratan khusus untuk tipe instance ECS, Anda dapat menambahkan anotasi k8s.aliyun.com/eci-use-specs untuk menentukan tipe instance ECS berbasis ARM. Untuk informasi tentang tipe instance ECS berbasis ARM yang dapat digunakan untuk membuat instance kontainer elastis, lihat Tentukan Tipe Instance ECS Berbasis ARM untuk Membuat Pod.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx-test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"
          annotations:
            k8s.aliyun.com/eci-use-specs: "ecs.c8y.large,ecs.g8y.large"   # Menentukan tipe instance ECS berbasis ARM. Anda dapat menentukan hingga lima tipe instance ECS.
        spec:
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Menggunakan gambar berbasis ARM.
            command: ["sleep"]
            args: ["999999"]
          nodeSelector:
            kubernetes.io/arch: arm64  # Menjadwalkan pod ke node berbasis ARM.

Konfigurasikan tolerations dan nodeaffinity untuk menjadwalkan gambar multi-arsitektur

Jika gambar aplikasi Anda adalah gambar multi-arsitektur dan Anda ingin mengonfigurasi penjadwalan pod lintas arsitektur x86 dan ARM, Anda dapat mengonfigurasi tolerations dan nodeAffinity untuk memberikan prioritas menjadwalkan pod ke node virtual berbasis ARM atau x86.

Penting

Sebelum Anda menggunakan nodeAffinity untuk mengonfigurasi afinitas node berdasarkan file YAML berikut, pastikan bahwa fitur penjadwalan pod berbasis node virtual telah diaktifkan untuk klaster. Untuk informasi lebih lanjut, lihat Aktifkan Kebijakan Penjadwalan Pod Berbasis Node Virtual untuk Klaster ACK.

Contoh file YAML pod:

  • Beri Prioritas Menjadwalkan Pod ke Node Virtual Berbasis ARM

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx-test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"    # Menjadwalkan pod ke node virtual.
        spec:
          tolerations:                 # Taints dari node yang mentoleransi arsitektur ARM.
          - key: kubernetes.io/arch
            operator: Equal
            value: arm64
            effect: NoSchedule
          affinity:
            nodeAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 1
                preference:
                  matchExpressions:
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                    - arm64       # Memberi prioritas menjadwalkan pod ke node virtual berbasis ARM.
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Menggunakan gambar multi-arsitektur.
            command: ["sleep"]
            args: ["999999"]
  • Beri Prioritas Menjadwalkan Pod ke Node Virtual Berbasis x86

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test
      labels:
        app: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx-test
          labels:
            app: nginx
            alibabacloud.com/eci: "true"    # Menjadwalkan pod ke node virtual.
        spec:
          tolerations:                 # Taints dari node yang mentoleransi arsitektur ARM.
          - key: kubernetes.io/arch
            operator: Equal
            value: arm64
            effect: NoSchedule
          affinity:
            nodeAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 1
                preference:
                  matchExpressions:
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                    - amd64         # Memberi prioritas menjadwalkan pod ke node virtual berbasis x86.
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Menggunakan gambar multi-arsitektur.
            command: ["sleep"]
            args: ["999999"]

Referensi