全部产品
Search
文档中心

Container Compute Service:Gunakan batasan penyebaran topologi untuk mendistribusikan pod di seluruh zona

更新时间:Jun 28, 2025

Ketersediaan tinggi sangat penting bagi aplikasi terdistribusi. Dalam kluster Alibaba Cloud Container Compute Service (ACS), Anda dapat menyebarkan aplikasi terdistribusi di seluruh zona menggunakan semantik penjadwalan asli Kubernetes untuk memastikan ketersediaan tinggi. Anda dapat menambahkan label topologi dengan mengonfigurasi bidang TopologyKey dari batasan penyebaran topologi guna mendistribusikan beban kerja di seluruh zona. Topik ini menjelaskan batasan dan penggunaan batasan penyebaran topologi di ACS.

Prasyarat

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

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

Catatan Penggunaan

Semua node dalam kluster ACS adalah node virtual. Anda dapat menambahkan label topologi ke node virtual dengan mengonfigurasi bidang TopologyKey dari batasan penyebaran topologi untuk mendistribusikan beban kerja di seluruh zona.

Tabel berikut menjelaskan label topologi yang didukung oleh ACS untuk berbagai jenis node.

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

ACS mendukung berbagai kelas komputasi. Batasan berikut berlaku ketika Anda mengonfigurasi bidang lain dari batasan distribusi topologi untuk pod dari berbagai kelas komputasi.

Kelas Komputasi

Bidang

Deskripsi

Batasan

  • Tujuan umum

  • Peningkatan performa

labelSelector

Bidang ini digunakan untuk menemukan pod yang cocok. Pod yang cocok dengan pemilih label ini dihitung untuk menentukan jumlah pod dalam domain topologi.

Pod dengan akselerasi GPU dan pod GPU-HPN tidak dihitung.

matchLabelKeys

Daftar kunci label pod yang digunakan untuk memilih pod yang akan dihitung distribusinya.

  • Akselerasi GPU

  • GPU-HPN

labelSelector

Bidang ini digunakan untuk menemukan pod yang cocok. Pod yang cocok dengan pemilih label ini dihitung untuk menentukan jumlah pod dalam domain topologi.

Pod di kelas komputasi lainnya, seperti kelas tujuan umum dan peningkatan performa, tidak dihitung.

matchLabelKeys

Daftar kunci label pod yang digunakan untuk memilih pod yang akan dihitung distribusinya.

nodeAffinityPolicy

Bidang ini menentukan bagaimana memperlakukan nodeAffinity atau nodeSelector dari pod saat kemiringan penyebaran topologi pod dihitung.

Tidak didukung.

nodeTaintsPolicy

Bidang ini menentukan bagaimana memperlakukan taint node saat kemiringan penyebaran topologi pod dihitung.

Tidak didukung.

Untuk informasi lebih lanjut tentang bidang tersebut, lihat Batasan Penyebaran Topologi Pod.

Prosedur

  1. Jalankan perintah berikut untuk melihat node dalam 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 dep-spread-demo.yaml dan tambahkan konten berikut ke file tersebut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-spread-demo
      labels:
        app: spread-demo
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: spread-demo
      template:
        metadata:
          labels:
            app: spread-demo
        spec:
          containers:
          - name: spread-demo
            image: registry.cn-hangzhou.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "infinity"
          # Tentukan batasan penyebaran. Nilai maxSkew menunjukkan bahwa perbedaan jumlah pod antar zona tidak boleh melebihi 1.
          topologySpreadConstraints:
          - maxSkew: 1
            topologyKey: topology.kubernetes.io/zone
            whenUnsatisfiable: DoNotSchedule
            labelSelector:
              matchLabels:
                app: spread-demo
  3. Jalankan perintah berikut untuk menerapkan dep-spread-demo ke kluster:

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

    kubectl get pod -o wide

    Output yang diharapkan:

    NAME                               READY   STATUS    RESTARTS   AGE     IP               NODE                            NOMINATED NODE   READINESS GATES
    dep-spread-demo-7c656dbf5f-6twkc   1/1     Running   0          2m29s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-i   <none>           <none>
    dep-spread-demo-7c656dbf5f-cgxr8   1/1     Running   0          2m29s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-spread-demo-7c656dbf5f-f4fz9   1/1     Running   0          2m29s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-j   <none>           <none>
    dep-spread-demo-7c656dbf5f-kc6xf   1/1     Running   0          2m29s   192.168.xx.xxx   virtual-kubelet-cn-hangzhou-i   <none>           <none>

    Output menunjukkan bahwa empat pod didistribusikan di dua zona.