全部产品
Search
文档中心

Container Compute Service:Gunakan penjadwalan gang

更新时间:Nov 09, 2025

Alibaba Cloud Container Compute Service (ACS) menyediakan fitur penjadwalan gang untuk memenuhi persyaratan all-or-nothing dalam skenario penjadwalan pekerjaan. Topik ini menjelaskan cara menggunakan penjadwalan gang.

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

  • Penjadwalan gang hanya mendukung tipe komputasi jaringan GPU berkinerja-tinggi (gpu-hpn). Untuk informasi lebih lanjut, lihat Definisi tipe komputasi.

  • Pengaturan Enable Custom Labels And Schedulers For GPU-HPN Nodes dinonaktifkan. Untuk informasi lebih lanjut, lihat Konfigurasi komponen.

Pengenalan fitur

Ketika sebuah pekerjaan membuat beberapa Pod, Pod tersebut harus mulai dan berjalan secara terkoordinasi. Sumber daya harus dialokasikan ke grup Pod sebagai satu batch untuk memastikan bahwa semua Pod dapat meminta sumber daya pada saat yang sama. Jika persyaratan penjadwalan dari satu Pod tidak terpenuhi, penjadwalan untuk seluruh grup Pod gagal. Penjadwal menyediakan semantik penjadwalan all-or-nothing ini untuk membantu mencegah deadlock sumber daya yang disebabkan oleh persaingan sumber daya di antara beberapa pekerjaan.

Penjadwal bawaan ACS menyediakan fitur penjadwalan gang untuk mengimplementasikan penjadwalan all-or-nothing, yang memastikan bahwa pekerjaan dapat berjalan dengan sukses.

Penting

Grup Pod yang dikonfigurasikan dengan fitur penjadwalan gang harus termasuk dalam kelas komputasi yang sama.

Penggunaan

Fitur penjadwalan gang yang disediakan oleh ACS kompatibel dengan PodGroup resource kustom di Kubernetes. Versi yang sesuai adalah podgroups.scheduling.sigs.k8s.io/v1alpha1. Sebelum Anda mengirimkan pekerjaan, Anda harus membuat instans PodGroup di namespace pekerjaan dan menentukan jumlah minimum Pod (`minMember`) yang diperlukan agar pekerjaan dapat berjalan. Kemudian, ketika Anda membuat Pod pekerjaan, Anda harus mengaitkannya dengan instans PodGroup menggunakan Pod-group.scheduling.sigs.k8s.io label. Selama penjadwalan, ACS mengalokasikan sumber daya ke semua Pod yang berbagi label PodGroup yang sama.

  1. Buat resource kustom PodGroup.

    apiVersion: scheduling.sigs.k8s.io/v1alpha1
    kind: PodGroup
    metadata: 
      name: demo-job-podgroup
      namespace: default
    spec: 
      scheduleTimeoutSeconds: 10 
      minMember: 3 # Tetapkan jumlah minimum pod yang berjalan.
  2. Buat pekerjaan dan kaitkan dengan PodGroup.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gang-job
      namespace: default
    spec:
      parallelism: 3 # Jumlah pod harus lebih besar atau sama dengan minMember di objek PodGroup.
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: "gpu" # Tentukan kelas komputasi sebagai gpu atau gpu-hpn.
            alibabacloud.com/gpu-model-series: "example-model" # Kelas komputasi GPU memerlukan Anda untuk menentukan model GPU.
            pod-group.scheduling.sigs.k8s.io: demo-job-podgroup # Kaitkan dengan instans PodGroup demo-job-podgroup.
        spec:
          containers:
          - name: demo-job
            image: registry.cn-hangzhou.aliyuncs.com/acs/stress:v1.0.4
            args:
              - 'infinity'
            command:
              - sleep
            resources:
              requests:
                cpu: "1"
                memory: "1Gi"
                nvidia.com/gpu: "1"
              limits:
                cpu: "1"
                memory: "1Gi"
                nvidia.com/gpu: "1"
          restartPolicy: Never
      backoffLimit: 4
Penting

Pastikan jumlah Pod yang dikaitkan lebih besar atau sama dengan nilai `minMember` yang dikonfigurasikan untuk instans PodGroup. Jika tidak, Pod tidak dapat dijadwalkan.

Contoh

Contoh ini menunjukkan hasil penjadwalan yang berhasil dan gagal ketika Anda menggunakan penjadwalan gang untuk pekerjaan.

  1. Jalankan perintah berikut untuk membuat namespace test-gang.

    kubectl create ns test-gang
  2. Jalankan perintah berikut untuk membuat ResourceQuota di namespace test-gang untuk menunjukkan bagaimana penjadwalan gang berperilaku ketika sumber daya tidak mencukupi.

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: object-counts
      namespace: test-gang
    spec:
      hard:
        pods: "2"
    EOF
  3. Jalankan perintah berikut untuk membuat objek PodGroup. Di dalam objek, minMember diatur ke 3, yang menentukan bahwa setidaknya 3 Pod terkait harus dijadwalkan dengan sukses pada saat yang sama. Jika salah satu Pod gagal dibuat atau dijadwalkan, semua Pod dalam grup tetap dalam status Pending.

    cat << EOF | kubectl apply -f -
    apiVersion: scheduling.sigs.k8s.io/v1alpha1
    kind: PodGroup
    metadata: 
      name: demo-job-podgroup
      namespace: test-gang
    spec: 
      minMember: 3 # Tetapkan jumlah minimum pod yang berjalan.
    EOF
  4. Gunakan konten YAML berikut untuk membuat file gang-job.yaml. File ini mendefinisikan objek Job yang menentukan empat replika Pod dan dikaitkan dengan objek PodGroup.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gang-job
      namespace: test-gang
    spec:
      parallelism: 4 # Jumlah pod harus lebih besar atau sama dengan minMember di objek PodGroup.
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: "gpu" # Tentukan kelas komputasi sebagai gpu atau gpu-hpn.
            alibabacloud.com/gpu-model-series: "example-model" # Kelas komputasi GPU memerlukan Anda untuk menentukan model GPU.
            pod-group.scheduling.sigs.k8s.io: demo-job-podgroup # Kaitkan dengan instans PodGroup demo-job-podgroup.
        spec:
          containers:
          - name: demo-job
            image: registry.cn-hangzhou.aliyuncs.com/acs/stress:v1.0.4
            args:
              - 'infinity'
            command:
              - sleep
            resources:
              requests:
                cpu: "1"
                memory: "1Gi"
                nvidia.com/gpu: "1"
              limits:
                cpu: "1"
                memory: "1Gi"
                nvidia.com/gpu: "1"
          restartPolicy: Never
      backoffLimit: 4
  5. Jalankan perintah berikut untuk menerapkan pekerjaan gang-job ke kluster.

    kubectl apply -f gang-job.yaml
  6. Jalankan perintah berikut untuk melihat status Pod.

    kubectl get pod -n test-gang

    Output yang diharapkan:

    NAME             READY   STATUS    RESTARTS   AGE
    gang-job-hrnc6   0/1     Pending   0          23s
    gang-job-wthnq   0/1     Pending   0          23s

    ResourceQuota membatasi jumlah Pod yang berjalan menjadi dua, sehingga hanya dua Pod yang dibuat untuk pekerjaan ini. Jumlah ini kurang dari nilai `minMember` yang ditentukan dalam PodGroup. Oleh karena itu, kedua Pod tetap dalam status Pending dan tidak dijadwalkan.

  7. Jalankan perintah berikut untuk menghapus ResourceQuota dan menghilangkan batasan pada jumlah Pod.

    kubectl delete resourcequota -n test-gang object-counts
  8. Jalankan perintah berikut untuk melihat status Pod.

    kubectl get pod -n test-gang

    Output yang diharapkan:

    NAME             READY   STATUS    RESTARTS   AGE
    gang-job-24cz9   1/1     Berjalan   0          96s
    gang-job-mmkxl   1/1     Berjalan   0          96s
    gang-job-msr8v   1/1     Berjalan   0          96s
    gang-job-qnclz   1/1     Berjalan   0          96s

    Output menunjukkan bahwa Pod berhasil dijadwalkan.