全部产品
Search
文档中心

Container Compute Service:Penjadwalan afinitas node

更新时间:Jun 28, 2025

Semua node dalam kluster Container Compute Service (ACS) Alibaba Cloud merupakan node virtual. Label digunakan untuk menandai berbagai atribut node seperti zona, wilayah, dan model GPU dari node virtual tersebut. Dalam kluster ACS, Anda dapat menggunakan semantik penjadwalan asli Kubernetes untuk mengimplementasikan penjadwalan afinitas node. Dengan mengonfigurasi atribut node di bidang nodeSelector atau nodeAffinity, Anda dapat menjadwalkan pod ke node virtual dengan atribut tertentu. Topik ini menjelaskan penjadwalan afinitas node pada ACS.

Prasyarat

  • kube-scheduler telah terpasang dan versinya memenuhi persyaratan yang ditentukan.

    Versi kluster ACS

    Versi Scheduler

    1.31

    v1.31.0-aliyun-1.2.0 dan yang lebih baru

    1.30

    v1.30.3-aliyun-1.1.1 dan yang lebih baru

    1.28

    v1.28.9-aliyun-1.1.0 dan yang lebih baru

  • acs-virtual-node telah terpasang dengan versi v2.12.0-acs.4 atau yang lebih baru.

Catatan penggunaan

nodeSelector

Anda dapat menambahkan label ke node virtual dengan mengonfigurasi bidang nodeSelector untuk mengimplementasikan penjadwalan afinitas node. Tabel berikut menjelaskan label yang didukung oleh ACS untuk berbagai jenis node virtual.

Jenis node virtual

Label

Deskripsi

Contoh

Node virtual reguler

topology.kubernetes.io/zone

Zona jaringan

topology.kubernetes.io/zone: cn-shanghai-b

Node virtual GPU-HPN

topology.kubernetes.io/zone

Zona jaringan

topology.kubernetes.io/zone: cn-shanghai-b

alibabacloud.com/hpn-zone

Zona jaringan berperforma tinggi

alibabacloud.com/hpn-zone: B1

alibabacloud.com/gpu-model-series

Model GPU

alibabacloud.com/gpu-model-series: <contoh-model>

nodeAffinity

Anda juga dapat menggunakan nodeAffinity untuk menentukan atribut afinitas node. Namun, nodeAffinity lebih ekspresif. Untuk kelas komputasi yang berbeda, ACS menyediakan batasan pada bidang tertentu. Tabel berikut menjelaskan batasan tersebut.

Kelas komputasi

Bidang

Deskripsi

Batasan

  • Dipercepat GPU

  • GPU-HPN

requiredDuringSchedulingIgnoredDuringExecution

Pod hanya dapat dijadwalkan jika aturan dipenuhi. Bidang ini mirip dengan bidang nodeSelector.

Untuk bidang nodeSelectorTerms:

  • Anda hanya dapat menambahkan label afinitas sebelumnya di bidang matchExpressions.

  • Bidang matchFields tidak didukung.

preferredDuringSchedulingIgnoredDuringExecution

Bidang ini digunakan untuk menentukan afinitas node berdasarkan bobot. Penjadwal mencoba menemukan node yang memenuhi aturan. Namun, penjadwal tetap menjadwalkan pod meskipun node yang cocok tidak tersedia.

Tidak didukung.

Batasan sebelumnya dari bidang nodeAffinity tidak tersedia untuk pod dalam kelas komputasi serbaguna dan ditingkatkan performanya.

Contoh

Contoh berikut menunjukkan cara mengonfigurasi bidang nodeSelector untuk menjadwalkan aplikasi ke zona tertentu.

  1. Jalankan perintah berikut untuk melihat node virtual dalam kluster:

    kubectl get node

    Hasil yang diharapkan:

    NAME                            STATUS   ROLES   AGE     VERSION
    virtual-kubelet-cn-hangzhou-i   Ready    agent   5h42m   v1.28.3-xx
    virtual-kubelet-cn-hangzhou-j   Ready    agent   5h42m   v1.28.3-xx
  2. Buat file bernama dep-node-selector-demo.yaml dan tambahkan konten berikut ke file tersebut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
        spec:
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "infinity"
          # Tetapkan zona ke cn-hangzhou-j.
          nodeSelector:
            topology.kubernetes.io/zone: cn-hangzhou-j
  3. Jalankan perintah berikut untuk menerapkan aplikasi ke kluster:

    kubectl apply -f dep-node-selector-demo.yaml
  4. Jalankan perintah berikut untuk melihat hasil distribusi pod:

    kubectl get pod -o wide

    Hasil yang diharapkan:

    NAME                                     READY   STATUS    RESTARTS   AGE    IP               NODE                            NOMINATED NODE   READINESS GATES
    dep-node-selector-demo-b4578576b-cgpfq   1/1     Running   0          112s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-node-selector-demo-b4578576b-fs8kl   1/1     Running   0          110s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-node-selector-demo-b4578576b-nh8zm   1/1     Running   0          2m8s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-node-selector-demo-b4578576b-rpp8l   1/1     Running   0          2m8s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>

    Keluaran menunjukkan bahwa empat pod didistribusikan di zona cn-hangzhou-j.