All Products
Search
Document Center

:Aktifkan co-scheduling dengan ack-co-scheduler

Last Updated:Aug 21, 2026

Dibandingkan dengan scheduler Kubernetes native, ACK memperluas kemampuan penjadwalan melalui Gang Scheduling, CPU topology-aware scheduling, ECI elastic scheduling, dan lainnya. Instal add-on ack-co-scheduler pada kluster terdaftar untuk menggunakan penjadwalan ACK di kluster lokal Anda serta meningkatkan efisiensi beban kerja data besar, AI, dan beban kerja komputasi-intensif lainnya.

Prasyarat

Pastikan Anda telah:

  • Kluster Kubernetes yang dikelola sendiri Anda terhubung ke kluster terdaftar ACK One.

  • Memiliki komponen sistem dalam versi berikut:

    Component Version
    Kubernetes 1.18.8 atau yang lebih baru
    Helm 3.0 atau yang lebih baru
    Docker 19.03.5
    Operating system CentOS 7.6, CentOS 7.7, Ubuntu 16.04, Ubuntu 18.04, Alibaba Cloud Linux

Catatan penggunaan

Atur .template.spec.schedulerName menjadi ack-co-scheduler dalam spesifikasi pekerjaan Anda agar Pod diarahkan melalui co-scheduler ACK, bukan scheduler default.

Instal komponen ack-co-scheduler

Gunakan onectl untuk lingkungan berbasis skrip atau Konsol untuk pendekatan berbasis antarmuka pengguna.

Instal menggunakan onectl

  1. Instal onectl di mesin Anda.

  2. Instal ack-co-scheduler:

    onectl addon install ack-co-scheduler

    Output yang diharapkan:

    Addon ack-co-scheduler, version **** installed.

Instal menggunakan Konsol

  1. Login ke Container Service Management Console. Di panel navigasi kiri, klik Clusters.

  2. Klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.

  3. Pada halaman Add-ons, klik tab Others. Temukan ack-co-scheduler dan klik Install.

  4. Pada kotak dialog, klik OK.

Gang scheduling

Gang scheduling menerapkan penempatan Pod secara all-or-nothing: semua Pod dalam satu kelompok dijadwalkan bersamaan atau tidak sama sekali. Pendekatan ini mencegah deadlock sumber daya pada pekerjaan terdistribusi seperti MPI dan pelatihan AI, yang memerlukan semua worker berjalan secara simultan.

Kirim pekerjaan terdistribusi TensorFlow

Contoh ini mengirim pekerjaan pelatihan terdistribusi TensorFlow dengan Gang Scheduling. Baik Pod PS maupun Worker menggunakan label pod-group.scheduling.sigs.k8s.io untuk membentuk kelompok Pod.

apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
  name: "tf-smoke-gpu"
spec:
  tfReplicaSpecs:
    PS:
      replicas: 1
      template:
        metadata:
          creationTimestamp: null
          labels:
            pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu
            pod-group.scheduling.sigs.k8s.io/min-available: "2"
        spec:
          schedulerName: ack-co-scheduler   # Arahkan Pod melalui co-scheduler ACK.
          containers:
          - args:
            - python
            - tf_cnn_benchmarks.py
            - --batch_size=32
            - --model=resnet50
            - --variable_update=parameter_server
            - --flush_stdout=true
            - --num_gpus=1
            - --local_parameter_device=cpu
            - --device=cpu
            - --data_format=NHWC
            image: registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
            name: tensorflow
            ports:
            - containerPort: 2222
              name: tfjob-port
            resources:
              limits:
                cpu: '10'
            workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
          restartPolicy: OnFailure
    Worker:
      replicas: 4
      template:
        metadata:
          creationTimestamp: null
          labels:
            pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu
            pod-group.scheduling.sigs.k8s.io/min-available: "2"
        spec:
          schedulerName: ack-co-scheduler
          containers:
          - args:
            - python
            - tf_cnn_benchmarks.py
            - --batch_size=32
            - --model=resnet50
            - --variable_update=parameter_server
            - --flush_stdout=true
            - --num_gpus=1
            - --local_parameter_device=cpu
            - --device=gpu
            - --data_format=NHWC
            image: registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
            name: tensorflow
            ports:
            - containerPort: 2222
              name: tfjob-port
            resources:
              limits:
                cpu: 10
            workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
          restartPolicy: OnFailure

Bidang utama:

Field Description
pod-group.scheduling.sigs.k8s.io/name Mengelompokkan Pod ke dalam satu kelompok Pod. Pod dengan nama yang sama dijadwalkan bersamaan.
pod-group.scheduling.sigs.k8s.io/min-available Jumlah minimum Pod yang harus dapat dijadwalkan sebelum Pod mana pun dalam kelompok tersebut mulai berjalan. Pada contoh ini, minimal 2 dari 5 Pod (1 PS + 4 Worker) harus dapat dijadwalkan secara simultan.
schedulerName: ack-co-scheduler Mengarahkan Pod melalui co-scheduler ACK. Atur ini pada setiap templat Pod dalam pekerjaan.

Verifikasi Penjadwalan Gang

Setelah mengirim pekerjaan, verifikasi bahwa Pod masuk ke status pending secara bersamaan:

kubectl get pods -l pod-group.scheduling.sigs.k8s.io/name=tf-smoke-gpu

Pod tetap dalam status Pending hingga jumlah minimal Pod yang ditentukan oleh min-available dapat dijadwalkan secara simultan. Ini merupakan perilaku yang diharapkan. Jika Pod tetap dalam status pending, periksa Events untuk pesan penjadwalan:

kubectl describe pod <pod-name>

Lihat Use Gang scheduling.

CPU topology-aware scheduling

CPU topology-aware scheduling mengikat core CPU kontainer ke node Non-Uniform Memory Access (NUMA) yang sama, sehingga mengurangi latensi memori lintas node. Fitur ini bermanfaat bagi beban kerja intensif CPU seperti inferensi real-time dan layanan yang sensitif terhadap latensi.

Prasyarat

Komponen resource-controller telah dideploy. Lihat Manage add-ons.

Aktifkan CPU topology-aware scheduling

Tambahkan anotasi cpuset-scheduler: "true" ke templat Pod Deployment Anda dan atur schedulerName menjadi ack-co-scheduler:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-numa
  labels:
    app: nginx-numa
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-numa
  template:
    metadata:
      annotations:
        cpuset-scheduler: "true"   # Aktifkan CPU topology-aware scheduling.
      labels:
        app: nginx-numa
    spec:
      schedulerName: ack-co-scheduler   # Arahkan Pod melalui co-scheduler ACK.
      containers:
      - name: nginx-numa
        image: nginx:1.13.3
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 4
          limits:
            cpu: 4

Bidang utama:

Field Description
cpuset-scheduler: "true" Mengikat core CPU Pod ke satu node NUMA. Atur di bawah template.metadata.annotations.
schedulerName: ack-co-scheduler Mengarahkan Pod melalui co-scheduler ACK.
resources.requests.cpu / resources.limits.cpu Permintaan dan batas sumber daya CPU untuk kontainer.

Verifikasi CPU topology-aware scheduling

Setelah berjalan, konfirmasi bahwa Pod dijadwalkan dengan pengikatan cpuset:

kubectl get pods -l app=nginx-numa -o wide

Untuk mengonfirmasi pengikatan NUMA, login ke node dan periksa cpuset kontainer:

cat /sys/fs/cgroup/cpuset/kubepods/pod<pod-uid>/<container-id>/cpuset.cpus

Jika semua core yang tercantum termasuk dalam satu node NUMA yang sama, maka pengikatan cpuset aktif.

Lihat Enable CPU topology-aware scheduling.

ECI elastic scheduling

ECI elastic scheduling mengontrol apakah Pod berjalan di node Elastic Compute Service (ECS), sumber daya Elastic Container Instance (ECI), atau hanya burst ke ECI ketika kapasitas ECS tidak mencukupi. Gunakan fitur ini untuk beban kerja dengan permintaan sumber daya fluktuatif guna menghindari over-provisioning node ECS.

Prasyarat

Komponen ack-virtual-node telah dideploy. Lihat Use ECI in ACK.

Aktifkan ECI elastic scheduling

Tambahkan anotasi alibabacloud.com/burst-resource ke templat Pod Deployment Anda:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      annotations:
        alibabacloud.com/burst-resource: eci   # Gunakan ECI ketika kapasitas ECS tidak mencukupi.
      labels:
        app: nginx
    spec:
      schedulerName: ack-co-scheduler   # Arahkan Pod melalui co-scheduler ACK.
      containers:
      - name: nginx
        image: nginx
        resources:
          limits:
            cpu: 2
          requests:
            cpu: 2

Nilai anotasi untuk `alibabacloud.com/burst-resource`:

Value Behavior
Tidak diatur Gunakan hanya node ECS dalam kluster.
eci Gunakan node ECS terlebih dahulu; burst ke ECI ketika kapasitas ECS tidak mencukupi.
eci_only Gunakan hanya sumber daya ECI.

Verifikasi ECI elastic scheduling

Setelah deployment, periksa node tempat Pod berjalan:

kubectl get pods -l app=nginx -o wide

Lihat Menggunakan ElasticResource untuk Menerapkan Penjadwalan Elastis ECI (Tidak Digunakan Lagi).

Shared GPU scheduling

Shared GPU scheduling memungkinkan beberapa Pod berbagi satu GPU, sehingga meningkatkan pemanfaatan GPU untuk inferensi dan beban kerja yang tidak memerlukan GPU penuh.

Lihat:

Langkah selanjutnya