All Products
Search
Document Center

Container Service for Kubernetes:Tingkatkan pemanfaatan resource dengan ElasticQuotaTree dan antrian task

Last Updated:Mar 26, 2026

Tingkatkan pemanfaatan resource dengan ElasticQuotaTree dan antrian task

Ketika beberapa tim berbagi kluster untuk beban kerja AI, machine learning (ML), dan batch, konflik sumber daya serta pemanfaatan di bawah kapasitas menjadi masalah umum. Gunakan ElasticQuotaTree, ack-kube-queue, dan ack-scheduler secara bersamaan untuk menetapkan kuota sumber daya hierarkis ke unit organisasi, mengantrekan pekerjaan secara otomatis, dan mereklaim sumber daya ketika jaminan minimum tidak dapat dipenuhi.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Cara kerja

Tiga komponen ini bekerja sama untuk mengelola alokasi sumber daya dan penjadwalan pekerjaan:

  • ElasticQuotaTree: Menentukan kuota sumber daya hierarkis yang dipetakan ke unit organisasi (misalnya, tim atau departemen). Setiap node daun dalam pohon tersebut berkorespondensi dengan satu atau lebih namespace, dan pekerjaan yang diajukan ke namespace tersebut dibatasi oleh kuota node tersebut.

  • ack-kube-queue: Memantau kluster untuk pekerjaan baru, membuat QueueUnit untuk setiap pekerjaan, dan mengarahkannya ke antrian yang sesuai berdasarkan namespace pekerjaan tersebut. Pekerjaan menunggu dalam antrian hingga permintaan sumber dayanya sesuai dengan kuota yang tersedia, lalu dilepaskan ke penjadwal.

  • ack-scheduler: Memilih node untuk menjalankan pekerjaan yang telah dilepaskan dari antrian.

Ketika kebutuhan sumber daya minimum suatu pekerjaan tidak dapat dipenuhi, sistem penjadwalan secara otomatis mereklaim sumber daya dari node kuota yang saat ini menggunakan lebih dari alokasi min-nya.

Siapkan kuota sumber daya dengan ElasticQuotaTree

ElasticQuotaTree menggunakan struktur pohon untuk menetapkan kuota CPU, memori, dan GPU kepada tim. Contoh berikut menunjukkan perusahaan dengan tiga departemen—devops, algorithm (dengan sub-tim text dan video), dan infrastructure (dengan sub-tim test)—masing-masing dipetakan ke namespace khusus.

image

Aturan kuota

Sebelum membuat ElasticQuotaTree, pastikan konfigurasi Anda memenuhi batasan berikut:

AturanPersyaratan
Penempatan namespacePasang namespace hanya pada node daun. Node induk tidak boleh memiliki namespace.
Node min/maxPada setiap node, nilai min harus kurang dari atau sama dengan max.
Aturan induk minimalNilai min node induk harus kurang dari atau sama dengan jumlah nilai min anak-anaknya.
Parent max ruleNilai max node induk harus kurang dari atau sama dengan nilai max salah satu anaknya.

Semantik parameter:

ParameterDefaultPerilaku
min0Lantai sumber daya terjamin. Pekerjaan tetap dapat diajukan meskipun min bernilai 0, tetapi sistem tidak menjamin sumber daya tersebut. Jika kuota min tidak dapat dipenuhi, penjadwal mereklaim sumber daya dari node yang menggunakan lebih dari alokasi min-nya.
maxNA (tidak terbatas)Batas atas sumber daya. Pekerjaan tidak dapat menggunakan sumber daya melebihi nilai ini.

Buat namespace dan ElasticQuotaTree

Terapkan manifes berikut untuk membuat namespace dan mendefinisikan pohon kuota. Komentar dalam YAML menunjukkan bagaimana setiap node dipetakan ke diagram di atas.

---
apiVersion: v1
kind: Namespace
metadata:
  name: devops
---
apiVersion: v1
kind: Namespace
metadata:
  name: text1
---
apiVersion: v1
kind: Namespace
metadata:
  name: text2
---
apiVersion: v1
kind: Namespace
metadata:
  name: video
---
apiVersion: v1
kind: Namespace
metadata:
  name: test1
---
apiVersion: v1
kind: Namespace
metadata:
  name: test2
---
apiVersion: scheduling.sigs.k8s.io/v1beta1
kind: ElasticQuotaTree
metadata:
  name: elasticquotatree  # Hanya satu ElasticQuotaTree yang didukung.
  namespace: kube-system  # Harus dibuat di namespace kube-system agar berlaku.
spec:
  root:
    name: root  # Node root: kuota total kluster
    min:
      cpu: 100
      memory: 50Gi
      nvidia.com/gpu: 16
    max:
      cpu: 100
      memory: 50Gi
      nvidia.com/gpu: 16
    children:
    - name: devops  # Anak dari root
      min:
        cpu: 20
        memory: 10Gi
        nvidia.com/gpu: 4
      max:
        cpu: 40
        memory: 20Gi
        nvidia.com/gpu: 8
      namespaces:
      - devops
    - name: algorithm  # Anak dari root; induk dari text dan video
      min:
        cpu: 50
        memory: 25Gi
        nvidia.com/gpu: 10
      max:
        cpu: 80
        memory: 50Gi
        nvidia.com/gpu: 14
      children:
      - name: text  # Anak dari algorithm
        min:
          cpu: 40
          memory: 15Gi
          nvidia.com/gpu: 8
        max:
          cpu: 40
          memory: 30Gi
          nvidia.com/gpu: 10
        namespaces:
        - text1
        - text2
      - name: video  # Anak dari algorithm
        min:
          cpu: 12
          memory: 12Gi
          nvidia.com/gpu: 2
        max:
          cpu: 14
          memory: 14Gi
          nvidia.com/gpu: 4
        namespaces:
        - video
    - name: infrastructure  # Anak dari root; induk dari test
      min:
        cpu: 30
        memory: 15Gi
        nvidia.com/gpu: 2
      max:
        cpu: 50
        memory: 30Gi
        nvidia.com/gpu: 4
      children:
      - name: test  # Anak dari infrastructure
        min:
          cpu: 30
          memory: 15Gi
          nvidia.com/gpu: 2
        max:
          cpu: 50
          memory: 30Gi
          nvidia.com/gpu: 4
        namespaces:
        - test1
        - test2

Kelola antrian pekerjaan dengan ack-kube-queue

Setelah Anda menerapkan ElasticQuotaTree, ack-kube-queue secara otomatis membuat antrian untuk setiap node daun dalam kluster. Kuota setiap node daun dipetakan ke satu antrian. Pekerjaan yang diajukan ke suatu namespace akan ditugaskan ke antrian yang sesuai dengan node kuota namespace tersebut.

Asosiasi antrian

Sebuah controller di ack-kube-queue secara otomatis mengelola sumber daya antrian dalam kluster. Controller ini dikelola berdasarkan ElasticQuotaTree dan memetakan asosiasi antara kuota dan namespace yang didefinisikan dalam ElasticQuotaTree ke antrian yang sesuai.

image

Sebagai contoh, namespace video adalah node daun di bawah node algorithm, yang merupakan anak dari root. ack-kube-queue membuat antrian bernama root-algorithm-video untuk node ini. Ketika Anda mengajukan RayJob di namespace video, ack-kube-queue membuat QueueUnit dan mengarahkannya ke antrian root-algorithm-video.

image

Jika total sumber daya yang diminta oleh RayJob sesuai dengan kuota yang tersedia di root-algorithm-video, pekerjaan tersebut dikeluarkan dari antrian dan diteruskan ke ack-scheduler untuk penugasan node.

Operasi antrian dan handoff suspend

ack-kube-queue mengontrol eksekusi pekerjaan melalui bidang spec.suspend pada RayJob:

  1. Ajukan RayJob dengan spec.suspend: true. Hal ini mencegah operator KubeRay membuat pod segera.

  2. ack-kube-queue mendeteksi pekerjaan tersebut, membuat QueueUnit, dan menempatkannya di antrian yang sesuai.

  3. Ketika kebijakan pengantrean mengizinkan pekerjaan untuk dilanjutkan, ack-kube-queue mengatur spec.suspend menjadi false.

  4. Operator KubeRay menangkap perubahan tersebut dan membuat pod. ack-scheduler kemudian menugaskan pod ke node.

image
Jika suatu pekerjaan tampak macet di antrian, periksa apakah spec.suspend telah diatur ke false. Jika belum, pastikan permintaan sumber daya pekerjaan tersebut sesuai dengan kuota yang tersedia di antrian yang ditugaskan.