All Products
Search
Document Center

Container Compute Service:Penjadwalan Afinitas Node

Last Updated:Sep 17, 2026

Kluster ACS merepresentasikan node sebagai node virtual dan mengekspos atribut node—seperti zona ketersediaan, wilayah, dan model GPU—sebagai label Kubernetes. Gunakan nodeSelector atau nodeAffinity dalam spesifikasi Pod Anda untuk menjadwalkan Pod pada node virtual dengan atribut tertentu.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • kube-scheduler terinstal dengan versi minimum sesuai kluster Anda:

    Versi kluster ACS Versi minimum kube-scheduler
    1.31 v1.31.0-aliyun-1.2.0
    1.30 v1.30.3-aliyun-1.1.1
    1.28 v1.28.9-aliyun-1.1.0
  • acs-virtual-node v2.12.0-acs.4 atau versi lebih baru telah terinstal

Catatan

Opsi Enable custom labels for GPU-HPN nodes and scheduler diaktifkan secara default pada versi kube-scheduler yang lebih baru. Tidak diperlukan pengaturan manual. Untuk detailnya, lihat kube-scheduler.

Pilih metode penjadwalan

Metode Kapan digunakan
nodeSelector Menempelkan Pod ke node dengan label tertentu. Opsi paling sederhana — gunakan ini terlebih dahulu.
nodeAffinity Mengekspresikan aturan penjadwalan yang lebih kompleks, seperti beberapa kondisi label atau pencocokan berbasis operator (In, NotIn, Exists).

Label node yang tersedia

Node virtual ACS mengekspos label berikut untuk penjadwalan:

Kunci label Deskripsi Contoh nilai
topology.kubernetes.io/zone Zona ketersediaan cn-hangzhou-j
topology.kubernetes.io/region Wilayah cn-hangzhou
kubernetes.io/hostname Nama node virtual virtual-kubelet-cn-hangzhou-j

nodeSelector

nodeSelector mencocokkan Pod ke node virtual berdasarkan label. Tambahkan label target di bawah nodeSelector dalam spesifikasi Pod Anda. Untuk contoh lengkap, lihat Jadwalkan Pod ke zona tertentu.

nodeAffinity

nodeAffinity mendukung pencocokan berbasis label yang sama seperti nodeSelector, tetapi dengan sintaksis yang lebih ekspresif. Fitur ini memiliki dua mode:

Mode Perilaku
requiredDuringSchedulingIgnoredDuringExecution (afinitas keras) Penjadwal hanya menempatkan Pod pada node yang memenuhi aturan tersebut. Jika tidak ada node yang cocok, Pod tidak akan dijadwalkan.
preferredDuringSchedulingIgnoredDuringExecution (afinitas lunak) Penjadwal berusaha menemukan node yang cocok. Jika tidak tersedia, Pod tetap dijadwalkan pada node yang memenuhi syarat lainnya.
Catatan

Jika Anda menentukan nodeSelector dan nodeAffinity pada Pod yang sama, keduanya harus terpenuhi agar Pod dapat dijadwalkan. Di dalam nodeSelectorTerms, beberapa term dievaluasi dengan logika OR—Pod dijadwalkan jika salah satu term cocok. Di dalam satu term, beberapa entri matchExpressions dievaluasi dengan logika AND—semua ekspresi harus cocok.

Batasan untuk Pod GPU-HPN

Batasan berikut berlaku ketika ketiga kondisi berikut terpenuhi:

  • Pod menggunakan tipe komputasi GPU-HPN (GPU High-Performance Network).

  • schedulerName Pod adalah default-scheduler.

  • Enable Custom Tags And Scheduler For GPU-HPN Nodes tidak dipilih dalam konfigurasi komponen penjadwal.

Field Batasan
requiredDuringSchedulingIgnoredDuringExecution Di dalam nodeSelectorTerms, hanya label afinitas yang didukung yang diperbolehkan dalam matchExpressions. matchFields tidak dapat ditentukan.
preferredDuringSchedulingIgnoredDuringExecution Tidak didukung.

Untuk tipe instans general-purpose, komputasi-teroptimalkan, dan GPU, nodeAffinity tidak memiliki batasan tersebut.

Jadwalkan Pod ke zona tertentu

Contoh ini menggunakan nodeSelector untuk menjadwalkan Penyebaran ke zona cn-hangzhou-j.

  1. Daftar node virtual di kluster Anda.

    kubectl get node

    Output 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 dengan konten berikut.

    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"
          # Pin pods to the cn-hangzhou-j zone
          nodeSelector:
            topology.kubernetes.io/zone: cn-hangzhou-j
  3. Terapkan manifes.

    kubectl apply -f dep-node-selector-demo.yaml
  4. Verifikasi bahwa semua Pod dijadwalkan ke zona cn-hangzhou-j.

    kubectl get pod -o wide

    Output 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>

    Keempat Pod berjalan di virtual-kubelet-cn-hangzhou-j, yang mengonfirmasi bahwa penjadwalan tingkat zona berfungsi sebagaimana diharapkan.

Langkah selanjutnya