All Products
Search
Document Center

Container Compute Service:Bekerja dengan penjadwalan kapasitas

Last Updated:Jun 28, 2025

Container Compute Service (ACS) menggunakan mekanisme ResourceQuota dari Kubernetes open source untuk membatasi dan mengontrol penggunaan sumber daya dalam namespace. ResourceQuotas dapat digunakan untuk membatasi dan memantau penggunaan berbagai sumber daya dalam namespace, seperti penggunaan CPU, memori, dan penyimpanan, jumlah pod replika, serta jumlah Services. Hal ini membantu mencegah aplikasi lain menempati terlalu banyak sumber daya di namespace dan memastikan stabilitas serta keandalan aplikasi Anda.

ResourceQuota

Anda dapat menggunakan mekanisme ResourceQuota dari Kubernetes open source di kluster ACS untuk mengontrol total penggunaan sumber daya setiap namespace. Anda dapat mendefinisikan ResourceQuota guna membatasi batas atas suatu sumber daya dalam namespace, seperti CPU, memori, dan sumber daya tambahan. Saat membuat sumber daya Kubernetes seperti pod dan Services dalam namespace, sistem kuota Kubernetes melacak penggunaan sumber daya kluster dan memastikan bahwa total penggunaan tidak melebihi batas sumber daya keras yang didefinisikan dalam ResourceQuota namespace tersebut.

Saat menggunakan ResourceQuota, perhatikan hal-hal berikut:

  • Setiap tim atau aplikasi memerlukan namespace terpisah.

  • Administrator kluster perlu membuat satu atau lebih ResourceQuotas untuk setiap namespace.

  • Jika penggunaan sumber daya melebihi batas sumber daya keras dari ResourceQuota, permintaan pembuatan sumber daya Kubernetes berikutnya akan ditolak.

  • Jika Anda mengonfigurasi kuota CPU dan memori dalam ResourceQuota, Anda harus mengonfigurasi permintaan dan batas sumber daya untuk pod yang ingin dibuat. Jika tidak, pod tidak dapat dibuat.

Catatan
  • Anda tidak perlu mengonfigurasi permintaan atau batas sumber daya untuk sumber daya lain, seperti sumber daya tambahan. Catatan: Anda dapat menggunakan pengontrol admission LimitRanger untuk mengonfigurasi batas sumber daya default bagi pod yang tidak dikonfigurasi dengan permintaan sumber daya.

  • Nama ResourceQuota harus merupakan DNS subdomain yang valid.

  • Setelah Anda memodifikasi ResourceQuota, modifikasi tersebut tidak berlaku untuk sumber daya yang sudah menggunakan ResourceQuota.

Aktifkan fitur ResourceQuota

Secara default, fitur ResourceQuota diaktifkan untuk kluster Container Service for Kubernetes (ACK) yang dibuat di konsol ACS. Anda hanya perlu membuat ResourceQuota di namespace, dan fitur ResourceQuota akan aktif untuk namespace tersebut.

Tipe sumber daya yang didukung

ACS sepenuhnya kompatibel dengan mekanisme ResourceQuota dari Kubernetes open source. Oleh karena itu, baik sumber daya standar maupun sumber daya tambahan mendukung ResourceQuotas.

Sumber daya standar

Sumber daya

Deskripsi

limits.cpu

Penggunaan CPU pod yang tidak dalam status Terminated tidak boleh melebihi batas ini.

limits.memory

Penggunaan memori pod yang tidak dalam status Terminated tidak boleh melebihi batas ini.

requests.cpu

Permintaan CPU pod yang tidak dalam status Terminated tidak boleh melebihi batas ini.

requests.memory

Permintaan memori pod yang tidak dalam status Terminated tidak boleh melebihi batas ini.

enormouspages-<ukuran>

Ukuran permintaan EnormousPage pod yang tidak dalam status Terminated tidak boleh melebihi batas ini.

cpu

Ekuivalen dengan requests.cpu.

memory

Ekuivalen dengan requests.memory.

Sumber daya tambahan

Kubernetes tidak mendukung overcommitment sumber daya tambahan (limit > request). Oleh karena itu, Anda hanya perlu mengonfigurasi kuota sumber daya yang dimulai dengan requests.. Untuk informasi lebih lanjut, lihat Kuota Sumber Daya.

Contoh

Contoh ini menunjukkan cara menggunakan kubectl untuk melihat dan membuat ResourceQuotas.

  1. Jalankan perintah berikut untuk membuat namespace bernama test:

  2. kubectl create namespace test
  3. Buat ResourceQuota untuk menetapkan batas CPU Namespace bernama test menjadi 4000 millicores.

  4. cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: test-quota
      namespace: test
    spec:
      hard:
        requests.cpu: "4000m"
        limits.cpu: "4000m"
    EOF
  5. Jalankan perintah berikut untuk menanyakan ResourceQuota:

    kubectl -n test describe resourcequota test-quota

    Hasil yang Diharapkan:

    Namespace:    test
    Resource      Used  Hard
    --------      ----  ----
    limits.cpu    0     4
    requests.cpu  0     4
  6. Buat empat pod. Setiap pod dapat menggunakan hingga 1000 millicores.

  7. cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: test-app
      name: test-app
      namespace: test
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: test-app
      template:
        metadata:
          labels:
            app: test-app
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2
            imagePullPolicy: IfNotPresent
            name: test
            command:
            - sleep
            - "360000000"
            resources:
              limits:
                cpu: "1"
    EOF
  8. Jalankan perintah berikut untuk menanyakan pod:

    kubectl -n test get pod

    Hasil yang Diharapkan:

    NAME                        READY   STATUS    RESTARTS   AGE
    test-app-5ddxxxxx94-jdv4m   1/1     Running   0          35s
    test-app-5ddxxxxx94-jhmtb   1/1     Running   0          35s
    test-app-5ddxxxxx94-mr8vq   1/1     Running   0          35s
    test-app-5ddxxxxx94-pjdfn   1/1     Running   0          35s

    Keluaran menunjukkan bahwa keempat pod berada dalam status Running.

  9. Jalankan perintah berikut untuk menanyakan status ResourceQuota:

    kubectl -n test describe resourcequota

    Hasil yang Diharapkan:

    Name:         test-quota
    Namespace:    test
    Resource      Used  Hard
    --------      ----  ----
    limits.cpu    4     4
    requests.cpu  4     4

    Nilai pada kolom Used sama dengan nilai pada kolom Hard.

  10. Buat pod lain. Permintaan pembuatan pod dicegat oleh pengontrol admission ResourceQuota.

    1. Buat pod.

      kubectl -n test scale deploy test-app --replicas 5
    2. Tanyakan ReplicaSet. Kolom DESIRED menampilkan 5 tetapi kolom CURRENT menampilkan 4. Ini menunjukkan bahwa sebuah pod gagal dibuat.

      kubectl -n test get rs

      Hasil yang Diharapkan:

      NAME                  DESIRED   CURRENT   READY   AGE
      test-app-5ddxxxxx94   5         4         4       3m10s
    3. Tanyakan peristiwa ReplicaSet. Keluaran menunjukkan bahwa pod baru dicegat oleh pengontrol admission ResourceQuota.

      kubectl -n test describe rs test-app-5ddxxxxx94

      Hasil yang Diharapkan:

      Name:           test-app-5ddc68c994
      Namespace:      test
      Selector:       app=test-app,pod-template-hash=5ddc68c994
      Labels:         app=test-app
                      pod-template-hash=5ddc68c994
      Annotations:    deployment.kubernetes.io/desired-replicas: 5
                      deployment.kubernetes.io/max-replicas: 7
                      deployment.kubernetes.io/revision: 1
      Controlled By:  Deployment/test-app
      Replicas:       4 current / 5 desired
      Pods Status:    4 Running / 0 Waiting / 0 Succeeded / 0 Failed
      Pod Template:
        Labels:  app=test-app
                 pod-template-hash=5ddc68c994
        Containers:
         test:
          Image:      busybox:latest
          Port:       <none>
          Host Port:  <none>
          Command:
            sleep
            360000000
          Limits:
            cpu:        1
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type             Status  Reason
        ----             ------  ------
        ReplicaFailure   True    FailedCreate
      Events:
        Type     Reason            Age                    From                   Message
        ----     ------            ----                   ----                   -------
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-pjdfn
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-jdv4m
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-jhmtb
        Normal   SuccessfulCreate  3m18s                  replicaset-controller  Created pod: test-app-5ddc68c994-mr8vq
        Warning  FailedCreate      3m18s                  replicaset-controller  Error creating: pods "test-app-5ddc68c994-5s4ph" is forbidden: exceeded quota: test-quota, requested: limits.cpu=1,requests.cpu=1, used: limits.cpu=4,requests.cpu=4, limited: limits.cpu=4,requests.cpu=