All Products
Search
Document Center

Container Compute Service:Penjadwalan Afinitas Pod

Last Updated:Mar 01, 2026

Penjadwalan afinitas pod menyatakan preferensi untuk menempatkan pod secara bersamaan (co-locating). Berbeda dengan afinitas node, afinitas pod memungkinkan Anda membatasi penempatan pod berdasarkan label pod yang sudah berjalan pada node virtual. Di kluster ACS, afinitas pod diterapkan menggunakan semantik penjadwalan Kubernetes native. Tentukan domain topologi dan aturan label di bidang podAffinity atau podAntiAffinity untuk menjadwalkan pod ke domain topologi tertentu. Topik ini menjelaskan batasan dan penggunaan penjadwalan afinitas pod di ACS.

Prasyarat

  • kube-scheduler telah terinstal dan versinya memenuhi persyaratan berikut.

    Versi kluster ACS

    Versi komponen penjadwal

    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 terinstal dan versinya v2.12.0-acs.4 atau yang lebih baru.

Catatan penting

Di kluster ACS, afinitas pod memiliki batasan saat digunakan dengan pod yang memenuhi semua kondisi berikut.

Catatan

Konfigurasi Enable Custom Tags and the Scheduler for GPU-HPN Nodes untuk komponen penjadwal ACS diaktifkan secara default di versi baru. Untuk informasi selengkapnya, lihat kube-scheduler.

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

  • schedulerName Pod adalah default-scheduler.

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

Bidang dan batasan protokol dijelaskan sebagai berikut.

  • Kebijakan requiredDuringSchedulingIgnoredDuringExecution.

    Bidang

    Deskripsi

    Batasan

    LabelSelector

    Menemukan pod yang cocok. Pod dengan label ini dihitung untuk menentukan jumlah pod yang ada di setiap domain topologi.

    Pod dari tipe instans lain—seperti general-purpose, komputasi-teroptimalkan, dan GPU—tidak dihitung dalam total ini.

    Namespaces

    Menentukan namespace tempat mencari pod yang cocok. Digunakan bersama LabelSelector.

    Tidak didukung

    NamespaceSelector

    Serupa dengan bidang Namespaces, tetapi memilih namespace berdasarkan label namespace, bukan nama.

    Tidak didukung

  • Kebijakan preferredDuringSchedulingIgnoredDuringExecution tidak didukung.

Untuk informasi lebih lanjut tentang setiap bidang, lihat Pod affinity and anti-affinity.

Contoh

Contoh ini menunjukkan cara menggunakan podAffinity untuk menjadwalkan aplikasi ke zona tertentu.

  1. Jalankan perintah berikut untuk menampilkan daftar node virtual di kluster.

    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 with-affinity-pod.yaml dengan konten YAML berikut.

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        pod-affinity-label: with-pod-affinity
      name: with-affinity-label-pod
    spec:
      containers:
        - args:
            - 'infinity'
          command:
            - sleep
          image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
          imagePullPolicy: IfNotPresent
          name: stress
          resources:
            limits:
              cpu: '1'
              memory: 1Gi
            requests:
              cpu: '1'
              memory: 1Gi
  3. Jalankan perintah berikut untuk men-deploy with-affinity-label-pod ke kluster.

    kubectl apply -f with-affinity-pod.yaml
  4. Jalankan perintah berikut untuk melihat distribusi pod di berbagai node.

    kubectl get pod -o wide

    Output yang diharapkan:

    NAME                      READY   STATUS    RESTARTS   AGE   IP              NODE                            NOMINATED NODE   READINESS GATES
    with-affinity-label-pod   1/1     Running   0          75s   192.168.xx.xxx  virtual-kubelet-cn-hangzhou-i   <none>           <none>

    Pod dijadwalkan ke zona cn-hangzhou-i.

  5. Buat file bernama origin-affinity-pod.yaml dengan konten YAML berikut.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-pod-affinity
      labels:
        app: pod-affinity-demo
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: pod-affinity-demo
      template:
        metadata:
          labels:
            app: pod-affinity-demo
        spec:
          containers:
          - name: pod-affinity-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "infinity"
            resources:
              limits:
                cpu: '1'
                memory: 1Gi
              requests:
                cpu: '1'
                memory: 1Gi
          # Terapkan afinitas pod untuk menempatkan pod di zona yang sama dengan pod yang memiliki label <pod-affinity-label:with-pod-affinity>
          affinity:
            podAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: pod-affinity-label
                    operator: In
                    values:
                    - with-pod-affinity
                topologyKey: topology.kubernetes.io/zone
  6. Jalankan perintah berikut untuk men-deploy origin-affinity-pod.yaml ke kluster.

    kubectl apply -f origin-affinity-pod.yaml
  7. Jalankan perintah berikut untuk melihat distribusi pod di berbagai node.

    kubectl get pod -o wide

    Output yang diharapkan:

    NAME                                READY   STATUS    RESTARTS   AGE     IP              NODE                            NOMINATED NODE   READINESS GATES
    dep-pod-affinity-6b9d4f7c87-5jlfx   1/1     Running   0          3m26s   192.168.xx.xxx  virtual-kubelet-cn-hangzhou-i   <none>           <none>
    dep-pod-affinity-6b9d4f7c87-hwdpc   1/1     Running   0          3m26s   192.168.xx.xxx  virtual-kubelet-cn-hangzhou-i   <none>           <none>
    dep-pod-affinity-6b9d4f7c87-jfcrq   1/1     Running   0          3m26s   192.168.xx.xxx  virtual-kubelet-cn-hangzhou-i   <none>           <none>
    dep-pod-affinity-6b9d4f7c87-xwbfr   1/1     Running   0          3m26s   192.168.xx.xxx  virtual-kubelet-cn-hangzhou-i   <none>           <none>
    with-affinity-label-pod             1/1     Running   0          6m30s   192.168.xx.xxx  virtual-kubelet-cn-hangzhou-i   <none>           <none>

    Semua pod berjalan di zona yang sama.