All Products
Search
Document Center

Elastic Container Instance:Jadwalkan Pod ke Node Virtual Berbasis ARM

Last Updated:Jun 21, 2026

Saat menjadwalkan Pod untuk dijalankan pada node virtual sebagai Elastic Container Instance (ECI), baik kluster ACK maupun kluster ACK Serverless secara default akan menjadwalkan Pod tersebut ke node virtual berbasis x86. Jika aplikasi Anda menggunakan arsitektur ARM, Anda harus menambahkan nodeSelector untuk menentukan node virtual berbasis ARM.

Prasyarat

Kluster memenuhi persyaratan berikut:

  • Wilayah tempat kluster dideploy mendukung instans berbasis ARM.

    ECI mendukung keluarga tipe instans ECS g8y, c8y, dan r8y pada arsitektur ARM. Untuk informasi selengkapnya mengenai wilayah yang didukung, lihat Tipe instans ECS yang tersedia untuk setiap wilayah.

  • Kluster menjalankan Kubernetes versi 1.20 atau lebih baru.

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

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

Peringatan

Anda akan ditagih berdasarkan tipe instans ECS berbasis ARM yang sebenarnya disediakan, bukan berdasarkan sumber daya vCPU dan memori yang Anda tentukan.

Catatan

Setelah membuat Pod ECI, jalankan perintah kubectl describe pod <pod name> dan periksa anotasi k8s.aliyun.com/eci-instance-spec untuk memastikan tipe instans ECS yang sebenarnya digunakan.

Tambahkan node virtual berbasis ARM

Ikuti langkah-langkah berikut untuk memodifikasi eci-profile dan menambahkan node virtual berbasis ARM ke kluster Anda.

  1. Modifikasi eci-profile.

    kubectl edit configmap eci-profile -n kube-system

    Pada bagian data dari eci-profile, atur enableLinuxArm64Node menjadi true. Pastikan setidaknya salah satu zona yang dikonfigurasi mendukung tipe instans berbasis ARM.

    data:
      enableClusterIp: "true"
      enableHybridMode: "false"
      enableLinuxArm64Node: "true"    # Aktifkan 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****   # Zona yang dikonfigurasi harus mencakup zona yang mendukung tipe instans berbasis ARM.
      vpcId: vpc-2zeghwzptn5zii0w7****
  2. Lihat node virtual berbasis ARM yang dihasilkan dalam kluster.

    Setelah Anda mengatur enableLinuxArm64Node menjadi true, jalankan perintah kubectl get node untuk melihat informasi node. Node virtual berbasis ARM akan secara otomatis ditambahkan ke kluster.

    kubectl get node
    NAME                                      STATUS    ROLES    AGE    VERSION
    virtual-kubelet-cn-beijing-h              Ready     agent    169m   v1.24.6-aliyun.1
    virtual-kubelet-cn-beijing-i              Ready     agent    169m   v1.24.6-aliyun.1
    virtual-kubelet-cn-beijing-i-linux-arm64  Ready     agent    75s    v1.24.6-aliyun.1
    virtual-kubelet-cn-beijing-k              Ready     agent    169m   v1.24.6-aliyun.1

Jadwalkan pod ke node virtual berbasis ARM

Konfigurasikan bidang nodeSelector

Node virtual berbasis ARM dalam kluster ACK dan kluster ACK Serverless memiliki label kubernetes.io/arch: arm64. Anda dapat menggunakan label ini dalam nodeSelector untuk menjadwalkan Pod ECI ke node virtual berbasis ARM.

nodeSelector:
  kubernetes.io/arch: arm64 

Contoh file YAML pod:

  • Tidak ada spesifikasi yang ditentukan untuk pod.

    Jika Anda tidak menentukan tipe instans ECS, sistem akan menggunakan ecs.c8y.large secara default, yaitu tipe instans berbasis ARM dengan 2 vCPU dan memori 4 GiB.

    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"    # Jadwalkan Pod ke node virtual.
        spec:
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Gunakan image berbasis arsitektur ARM.
            command: ["sleep"]
            args: ["999999"]
          nodeSelector:
            kubernetes.io/arch: arm64  # Tentukan node berbasis ARM.
  • Spesifikasi vCPU dan memori ditentukan.

    Jika Anda menentukan sumber daya vCPU dan memori, sistem akan secara otomatis memilih tipe instans ECS berbasis ARM yang sesuai dari tipe instans yang didukung oleh ECI.

    Catatan

    Anda dapat menentukan vCPU dan memori dengan mendefinisikan bidang limits atau requests untuk kontainer (disarankan menggunakan limits), atau dengan menambahkan anotasi k8s.aliyun.com/eci-use-specs.

    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"    # Jadwalkan Pod ke node virtual.
        spec:
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Gunakan image berbasis arsitektur ARM.
            command: ["sleep"]
            args: ["999999"]
            resources:
              limits:
                cpu: "1000m"      # Tentukan 1 vCPU.
                memory: "4096Mi"   # Tentukan memori 4 GiB untuk kontainer nginx.
          nodeSelector:
            kubernetes.io/arch: arm64  # Tentukan node berbasis ARM.
  • Tentukan tipe instans ECS berbasis ARM

    Jika Anda memiliki kebutuhan khusus terkait spesifikasi, Anda dapat menggunakan anotasi k8s.aliyun.com/eci-use-specs untuk menentukan spesifikasi ARM tertentu. Untuk informasi mengenai spesifikasi ARM yang didukung oleh ECI, lihat Tentukan spesifikasi 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"   # Tentukan tipe instans ECS berbasis ARM yang didukung. Anda dapat menentukan hingga lima tipe.
        spec:
          containers:
          - name: nginx
            image: arm64v8/centos:7.9.2009   # Gunakan image berbasis arsitektur ARM.
            command: ["sleep"]
            args: ["999999"]
          nodeSelector:
            kubernetes.io/arch: arm64  # Jadwalkan Pod ke node berbasis ARM.

Konfigurasikan toleransi dan afinitas node untuk menjadwalkan image multi-arsitektur

Jika Anda menggunakan image multi-arsitektur dan perlu menjadwalkan Pod di kedua arsitektur x86 dan ARM, Anda dapat menggunakan toleransi dan nodeAffinity untuk menetapkan preferensi penjadwalan ke node virtual berbasis ARM atau x86.

Penting

Sebelum menggunakan nodeAffinity untuk mengonfigurasi afinitas node berdasarkan file YAML berikut, pastikan fitur penjadwalan pod berbasis node virtual telah diaktifkan untuk kluster. Untuk informasi selengkapnya, lihat Aktifkan kebijakan penjadwalan pod berbasis node virtual untuk kluster ACK.

Contoh file YAML pod:

  • Lebih memilih node 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"    # Jadwalkan Pod ke node virtual.
        spec:
          tolerations:                 # Toleransi terhadap taint pada node berbasis 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       # Lebih memilih node berbasis ARM.
          containers:
          - name: nginx
            image: nginx                          # Gunakan image multi-arsitektur.
            command: ["sleep"]
            args: ["999999"]
  • Lebih memprioritaskan penjadwalan 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"    # Jadwalkan Pod ke node virtual.
        spec:
          tolerations:                 # Toleransi terhadap taint pada node berbasis 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         # Lebih memilih node berbasis x86.
          containers:
          - name: nginx
            image: nginx                          # Gunakan image multi-arsitektur.
            command: ["sleep"]
            args: ["999999"]

Referensi