全部产品
Search
文档中心

Container Compute Service:Penjadwalan prioritas sumber daya kustom

更新时间:Nov 09, 2025

Alibaba Cloud Container Compute Service (ACS) mendukung deklarasi kelas komputasi (compute-class) dan Kualitas Layanan Komputasi (compute QoS) dalam label pod. Persediaan tipe instans berubah secara dinamis, dan pembuatan instans dengan tipe tertentu dapat gagal karena faktor seperti ketersediaan sumber daya yang tidak mencukupi. Dengan penjadwalan prioritas kustom, Anda dapat menentukan beberapa kelas komputasi atau kelas compute QoS untuk sebuah pod. Penjadwal kemudian mencoba membuat instans pod sesuai dengan urutan yang ditentukan. Fitur ini juga mengontrol skala-masuk aplikasi dalam urutan terbalik menggunakan mekanisme biaya penghapusan pod. Topik ini menjelaskan cara menggunakan penjadwalan prioritas kustom di kluster ACS.

Prasyarat

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

Catatan

  • Untuk informasi lebih lanjut tentang kelas komputasi yang mendukung penjadwalan sumber daya berdasarkan prioritas kustom, lihat Kelas komputasi.

  • Penjadwalan sumber daya ACS berdasarkan prioritas kustom menggunakan fitur Biaya penghapusan Pod dari Kubernetes untuk mengontrol urutan skala-masuk pod. Secara teori, pod dengan biaya penghapusan pod terendah akan diskalakan masuk pertama kali. Namun, algoritma skala-masuk mempertimbangkan berbagai faktor yang bergantung pada implementasi pengontrol pod. Perhatikan bahwa jika pod yang Anda buat memiliki anotasi controller.kubernetes.io/pod-deletion-cost, nilainya akan ditimpa oleh kebijakan penjadwalan prioritas kustom ACS.

Peringatan

Jangan gunakan label sistem-reserved, seperti alibabacloud.com/compute-class dan alibabacloud.com/compute-qos, dalam pemilih label beban kerja, seperti spec.selector.matchLabels dari penerapan. Sistem dapat memodifikasi label-label ini selama penjadwalan prioritas kustom. Hal ini dapat menyebabkan pengontrol sering membuat ulang pod dan memengaruhi stabilitas aplikasi.

Penggunaan

Kluster ACS menyediakan sumber daya dalam bentuk node virtual. Properti sumber daya utama dari sebuah pod meliputi zona, kelas komputasi, dan compute QoS. Untuk tujuan ini, ACS mendefinisikan kebijakan penjadwalan ResourcePolicy. Kebijakan ini memungkinkan Anda menandai sekelompok pod menggunakan spec.selector dan mengonfigurasi beberapa properti sumber daya secara bersamaan. Jika persediaan sumber daya tidak mencukupi, penjadwal membuat jenis instans lain berdasarkan urutan yang dikonfigurasi. Anda dapat menggunakan kebijakan penjadwalan ResourcePolicy sebagai berikut.

  1. Buat kebijakan penjadwalan ResourcePolicy.

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: rp-demo
      namespace: default
    spec:
      selector: # Tandai pod dalam pemilih. Pod dengan label app=stress akan mengikuti kebijakan penjadwalan ini.
        app: stress
      units: # Tentukan urutan penjadwalan dalam unit.
      - resource: acs # Pertama, minta sumber daya tipe best-effort.
        podLabels:
          alibabacloud.com/compute-class: general-purpose
          alibabacloud.com/compute-qos: best-effort
      - resource: acs # Jika yang sebelumnya habis stoknya, minta sumber daya tipe default.
        podLabels:
            alibabacloud.com/compute-class: general-purpose
            alibabacloud.com/compute-qos: default
  2. Buat beban kerja dari jenis apa pun, seperti Job. Pastikan konfigurasi labels cocok dengan pemilih dalam ResourcePolicy.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: demo-job
      namespace: default
    spec:
      parallelism: 3
      template:
        metadata:
          labels:
            app: stress # Hubungkan dengan konfigurasi yang didefinisikan dalam spec.selector dari ResourcePolicy.
        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"
              limits:
                cpu: "1"
                memory: "1Gi"
          restartPolicy: Never
      backoffLimit: 4

Parameter konfigurasi lanjutan

Contoh YAML rinci berikut dari ResourcePolicy menunjukkan format parameter konfigurasi lanjutan untuk penjadwalan prioritas kustom.

Catatan

Topik ini hanya menjelaskan konfigurasi umum untuk menggunakan ResourcePolicy di kluster ACS. Untuk informasi lebih lanjut tentang semua konfigurasi fitur ResourcePolicy, lihat Penjadwalan Prioritas Sumber Daya Elastis Kustom.

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: rp-demo
  namespace: default
spec:
  # Berikut adalah konfigurasi aplikasi. Ini digunakan untuk menandai sekelompok pod. Pod yang memenuhi kondisi akan mengikuti kebijakan penjadwalan ini.
  selector:
    app: stress
  # Akhir dari konfigurasi aplikasi.

  # Berikut adalah konfigurasi sumber daya. Ini digunakan untuk menggambarkan urutan penjadwalan.
  units:
  - resource: acs # Jenis sumber daya harus disetel ke acs.
    podLabels: # Pertama, minta sumber daya tipe "general-purpose" + "best-effort".
      alibabacloud.com/compute-class: general-purpose
      alibabacloud.com/compute-qos: best-effort
    nodeSelector: # Anda dapat menggunakan nodeSelector untuk menentukan zona node virtual.
      topology.kubernetes.io/zone: cn-hangzhou-i
  - resource: acs # Jika yang sebelumnya habis stoknya, minta sumber daya tipe "general-purpose" + "default".
    podLabels:
      alibabacloud.com/compute-class: general-purpose
      alibabacloud.com/compute-qos: default
  # Akhir dari konfigurasi sumber daya.
 # Bidang lainnya berlaku untuk kluster non-ACS. ResourcePolicy memiliki nilai default untuk bidang tersebut setelah pembuatan. Anda dapat mengabaikannya.

Konfigurasi aplikasi

Konfigurasi aplikasi terdiri dari satu set label. Hanya pod dengan label-label ini yang mengikuti kebijakan ini. Anda dapat mengonfigurasi urutan sumber daya yang berbeda berdasarkan jenis aplikasi.

Item konfigurasi

Tipe

Deskripsi

Contoh

selector

map[string]string

Pod yang memiliki semua label ini dijadwalkan sesuai dengan aturan ResourcePolicy ini.

selector:
  app: stress
  stage: pre-publish

Konfigurasi sumber daya

Konfigurasi sumber daya adalah daftar. Setiap elemen dalam daftar menggambarkan properti sumber daya secara rinci. Penjadwal mencoba membuat pod yang memenuhi kondisi dalam Konfigurasi aplikasi secara berurutan, berdasarkan properti setiap elemen. Jika persediaan tidak mencukupi, penjadwal secara otomatis mencoba menggunakan elemen berikutnya. Jika semua tipe sumber daya yang ditentukan habis stoknya, pod tetap dalam status Pending. Penjadwal terus mencoba semua tipe sumber daya hingga pod dibuat. Tabel berikut menjelaskan parameter yang dimiliki setiap elemen.

Item konfigurasi

Tipe

Deskripsi

Nilai

Contoh

resource

string

Jenis sumber daya. Parameter ini wajib. Hanya `acs` yang didukung.

acs

resource: acs

nodeSelector

map[string]string

Filter node virtual berdasarkan label, misalnya, berdasarkan zona.

Untuk informasi lebih lanjut tentang label yang didukung, lihat penjadwalan afinitas node.

nodeSelector:
  topology.kubernetes.io/zone: cn-hangzhou-i

podLabels[alibabacloud.com/compute-class]

string

Menggambarkan kelas komputasi yang diminta oleh pod.

  • general-purpose (default)

  • performance

general-purpose

podLabels[alibabacloud.com/compute-qos]

string

Menggambarkan compute QoS yang diminta oleh pod.

  • default (default)

  • best-effort

default

Contoh

Contoh ini menunjukkan cara menggunakan ResourcePolicy untuk meminta sumber daya secara berurutan dengan compute QoS default dan best-effort untuk aplikasi.

  1. Buat file bernama resource-policy.yaml dengan konten berikut. Ini mendeklarasikan bahwa untuk pod dengan label app=stress, sumber daya dengan kelas komputasi `performance` dan compute QoS `default` diminta.

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: stress-demo
      namespace: default
    spec:
      selector:
        app: stress
      units:
      - resource: acs
        podLabels:
          alibabacloud.com/compute-class: performance
          alibabacloud.com/compute-qos: default
  2. Jalankan perintah berikut untuk menerapkan ResourcePolicy ke kluster.

    kubectl apply -f resource-policy.yaml
  3. Buat file bernama stress-dep.yaml dengan konten berikut.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: stress
      template:
        metadata:
          labels: # Pertahankan ini agar konsisten dengan konfigurasi dalam ResourcePolicy.
            app: stress
        spec:
          containers:
          - name: stress
            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
  4. Jalankan perintah berikut untuk menerapkan aplikasi stress ke kluster.

    kubectl apply -f stress-dep.yaml
  5. Jalankan perintah berikut untuk melihat status pod.

    kubectl get pod -L alibabacloud.com/compute-class,alibabacloud.com/compute-qos

    Output yang diharapkan:

    # Output dipengaruhi oleh faktor-faktor seperti stok sumber daya. Output aktual mungkin berbeda.
    NAME               READY   STATUS    RESTARTS   AGE   COMPUTE-CLASS   COMPUTE-QOS
    stress-xxxxxxxx1   1/1     Running   0          53s   performance     default
  6. Perbarui file resource-policy.yaml dengan konten berikut. Ini menambahkan deskripsi properti sumber daya untuk meminta sumber daya dalam urutan berikut:

    1. Pertama, minta sumber daya dengan kelas komputasi `general-purpose` dan compute QoS `best-effort`.

    2. Jika persediaan sumber daya sebelumnya tidak mencukupi, minta sumber daya dengan kelas komputasi `performance` dan compute QoS `default`.

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: stress-demo
      namespace: default
    spec:
      selector:
        app: stress
      units:
      - resource: acs
        podLabels:
          alibabacloud.com/compute-class: general-purpose
          alibabacloud.com/compute-qos: best-effort
      - resource: acs
        podLabels:
          alibabacloud.com/compute-class: performance
          alibabacloud.com/compute-qos: default
  7. Jalankan perintah berikut untuk memperbarui ResourcePolicy di kluster. Kebijakan yang diperbarui berlaku untuk pod yang dibuat setelahnya.

    kubectl apply -f resource-policy.yaml
  8. Jalankan perintah berikut untuk menambah replika aplikasi stress yang dibuat pada Langkah 3 menjadi dua replika.

    kubectl scale deployment stress --replicas=2
  9. Jalankan perintah berikut untuk melihat status pod.

    kubectl get pod -L alibabacloud.com/compute-class,alibabacloud.com/compute-qos

    Output yang diharapkan:

    # Output dipengaruhi oleh faktor-faktor seperti stok sumber daya. Output aktual mungkin berbeda.
    NAME                     READY   STATUS    RESTARTS   AGE     COMPUTE-CLASS     COMPUTE-QOS
    stress-xxxxxxxx1         1/1     Running   0          2m14s   performance       default
    stress-xxxxxxxx2         1/1     Running   0          33s     general-purpose   best-effort

    Anda dapat melihat bahwa replika baru memiliki kelas komputasi `general-purpose` dan compute QoS `best-effort`.