All Products
Search
Document Center

Container Service for Kubernetes:Aktifkan CPU QoS untuk kontainer

Last Updated:Mar 25, 2026

Di kluster Kubernetes, Anda mungkin menjalankan aplikasi latency-sensitive (LS) dan best-effort (BE) pada node yang sama. Meskipun aplikasi memiliki pengaturan CPU request dan CPU limit, aplikasi dengan prioritas berbeda tetap dapat bersaing memperebutkan sumber daya CPU. Persaingan ini dapat menurunkan kualitas layanan (QoS), terutama bagi aplikasi berprioritas tinggi. Aktifkan fitur CPU QoS untuk memprioritaskan alokasi sumber daya CPU bagi aplikasi LS.

Catatan

Untuk memahami dan menggunakan fitur ini secara lebih baik, rujuk topik Pod Quality of Service Classes dan Assign Memory Resources to Containers and Pods dalam dokumentasi resmi Kubernetes. Rujuk juga topik Group identity feature untuk mempelajari cara kerja fitur group identity.

Mengapa Anda memerlukan CPU QoS untuk kontainer

Untuk memaksimalkan pemanfaatan sumber daya node, skenario colocation sering melibatkan penempatan aplikasi LS berprioritas tinggi dan aplikasi BE berprioritas rendah pada node yang sama. Meskipun Kubernetes membatasi penggunaan sumber daya kontainer melalui CPU request dan CPU limit, persaingan CPU antar kontainer tetap tidak dapat dihindari. Misalnya, ketika aplikasi BE dan LS berbagi core fisik atau logis, beban tinggi pada aplikasi BE dapat mengganggu eksekusi aplikasi LS, sehingga meningkatkan waktu respons layanan.

ack-koordinator menyediakan fitur CPU QoS pada Alibaba Cloud Linux untuk meningkatkan stabilitas alokasi sumber daya CPU bagi aplikasi LS dan mengurangi gangguan dari aplikasi BE. Dengan memanfaatkan fitur group identity, ack-koordinator menggunakan prioritas penjadwalan Linux untuk memberikan penjadwalan CPU diferensial bagi aplikasi dengan prioritas berbeda. Fitur ini mengidentifikasi aplikasi LS sebagai prioritas tinggi dan aplikasi BE sebagai prioritas rendah, sehingga secara efektif meningkatkan kualitas layanan untuk aplikasi LS dalam skenario colocation.

Setelah mengaktifkan fitur CPU QoS, Anda memperoleh manfaat berikut:

  • Sistem operasi menjadwalkan tugas untuk aplikasi LS lebih cepat, yang meningkatkan kecepatan respons dan kinerjanya.

  • Tugas aplikasi BE yang terbangun tidak mengambil alih proses aplikasi LS, sehingga mencegah gangguan terhadap tugas berprioritas tinggi.

  • Bahkan dalam skenario Simultaneous MultiThreading (SMT), tugas aplikasi BE tidak berjalan secara paralel dengan tugas aplikasi LS pada core fisik yang sama. Hal ini mencegah tugas BE memengaruhi kinerja tugas LS akibat persaingan sumber daya komputasi pada core fisik yang sama.

Prasyarat

  • Anda telah membuat kluster ACK yang memenuhi persyaratan berikut:

    • Versi kluster adalah 1.18 atau lebih baru. Untuk memperbarui kluster, lihat Manually update ACK clusters.

    • Sistem operasi harus berupa Alibaba Cloud Linux. Fitur ini bergantung pada parameter group identity yang spesifik untuk OS ini. Untuk informasi tentang persyaratan versi kernel, lihat Group identity feature.

      Catatan

      Jika Anda tidak menggunakan Alibaba Cloud Linux, Anda dapat menggunakan fitur CPU Suppress untuk mengontrol jumlah sumber daya CPU yang tersedia untuk Pod BE. Untuk informasi selengkapnya, lihat Enable CPU Suppress.

  • Anda telah menginstal ack-koordinator v0.8.0 atau lebih baru. Untuk informasi selengkapnya, lihat ack-koordinator (FKA ack-slo-manager).

Prosedur

Anda dapat menggunakan ConfigMap untuk mengaktifkan fitur CPU QoS di tingkat kluster dan mengonfigurasi prioritas group identity CPU untuk Pod LS dan BE. Fitur group identity menetapkan identifier untuk setiap cgroup CPU. Saat kernel menjadwalkan tugas yang memiliki identifier tersebut, tugas tersebut diproses sesuai dengan prioritas yang ditentukan.

Setelah konfigurasi selesai, Anda dapat mendeklarasikan kelas CPU QoS untuk Pod dengan menambahkan label koordinator.sh/qosClass ke file YAML-nya. Untuk Pod yang tidak menentukan label koordinator.sh/qosClass, ack-koordinator mengikuti kelas QoS Pod native Kubernetes. Pod BestEffort dipetakan ke BE, sedangkan Pod dalam kelas QoS lainnya dipetakan ke LS.

  1. Buat file bernama configmap.yaml dengan konten berikut untuk mengaktifkan fitur CPU QoS.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      # Enable the CPU QoS feature for containers.
      resource-qos-config: |
        {
          "clusterStrategy": {
            "lsClass": {
              "cpuQOS": {
                "enable": true,
                "groupIdentity": 2
              }
            },
            "beClass": {
              "cpuQOS": {
                "enable": true,
                "groupIdentity": -1
              }
            }
          }
        }

    Bidang lsClass dan beClass mengonfigurasi Pod dalam kelas QoS LS dan BE, masing-masing. Bidang cpuQOS mengonfigurasi CPU QoS. Tabel berikut menjelaskan parameter utamanya.

    Parameter

    Type

    Nilai

    Deskripsi

    enable

    Boolean

    • true

    • false

    • true: Mengaktifkan fitur CPU QoS di seluruh kluster.

    • false: Menonaktifkan fitur CPU QoS di seluruh kluster.

    groupIdentity

    Integer

    [-1, 2]

    Prioritas group identity CPU. Nilai groupIdentity yang lebih besar menunjukkan prioritas penjadwalan kernel yang lebih tinggi untuk kontainer. Untuk informasi selengkapnya, lihat Group identity feature.

    Secara default, nilainya adalah 2 untuk Pod LS dan -1 untuk Pod BE. Nilai 0 menonaktifkan fitur ini.

  2. Periksa apakah ConfigMap ack-slo-config sudah ada di namespace kube-system.

    • Jika sudah ada, jalankan perintah patch berikut untuk memperbaruinya. Hal ini mencegah penimpaan konfigurasi lain dalam ConfigMap.

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • Jika belum ada, jalankan perintah berikut untuk membuat ConfigMap.

      kubectl apply -f configmap.yaml
  3. Buat file bernama ls-pod-demo.yaml dengan konten berikut. Konfigurasi ini menetapkan kelas QoS Pod sebagai LS. Lalu, terapkan file YAML tersebut ke kluster Anda.

    Catatan

    Untuk menerapkan konfigurasi ke workload, seperti deployment, atur anotasi yang sesuai untuk pod di bidang template.metadata.

    apiVersion: v1
    kind: Pod
    metadata:
      name: ls-pod-demo
      labels:
        koordinator.sh/qosClass: 'LS' # Specify the QoS class of the Pod as LS.
    spec:
      containers:
      - command:
        - httpd
        - -D
        - FOREGROUND
        image: registry.cn-zhangjiakou.aliyuncs.com/acs/apache-2-4-51-for-slo-test:v0.1
        imagePullPolicy: Always
        name: apache
        resources:
          limits:
            cpu: "4"
            memory: 10Gi
          requests:
            cpu: "4"
            memory: 10Gi
      restartPolicy: Never
      schedulerName: default-scheduler
    kubectl apply -f ls-pod-demo.yaml
  4. Jalankan perintah berikut pada node untuk memeriksa group identity kernel dari Pod LS dalam hierarki cgroup:

    cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-pod1c20f2ad****.slice/cpu.bvt_warp_ns

    Output yang diharapkan:

    # The group identity of the LS Pod is 2, which indicates high priority.
    2
  5. Buat file bernama be-pod-demo.yaml dengan konten berikut. Konfigurasi ini menetapkan kelas QoS Pod sebagai BE. Lalu, terapkan file YAML tersebut ke kluster Anda.

    apiVersion: v1
    kind: Pod
    metadata:
      name: be-pod-demo
      labels:
        koordinator.sh/qosClass: 'BE' # Specify the QoS class of the Pod as BE.
    spec:
      containers:
        - args:
            - '-c'
            - '1'
            - '--vm'
            - '1'
          command:
            - stress
          image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4
          imagePullPolicy: Always
          name: stress
      restartPolicy: Always
      schedulerName: default-scheduler
    kubectl apply -f be-pod-demo.yaml
  6. Jalankan perintah berikut pada node untuk memeriksa group identity kernel dari Pod BE dalam hierarki cgroup:

    cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod4b6e96c8****.slice/cpu.bvt_warp_ns

    Output yang diharapkan:

    # The group identity of the BE Pod is -1, which indicates low priority.
    -1

    Output tersebut menunjukkan bahwa Pod LS memiliki prioritas group identity yang lebih tinggi daripada Pod BE. Hal ini mengonfirmasi bahwa CPU QoS memprioritaskan alokasi sumber daya CPU untuk Pod LS.

FAQ

Kompatibilitas protokol saat melakukan upgrade ke ack-koordinator

Pada versi protokol sebelumnya (ack-slo-manager v0.8.0 dan sebelumnya), Anda mengaktifkan CPU QoS dengan menambahkan anotasi alibabacloud.com/qosClass ke Pod.

ack-koordinator tetap kompatibel dengan protokol lama ini. Anda dapat melakukan upgrade komponen ke ack-koordinator secara mulus dan secara bertahap memigrasikan Pod Anda ke protokol koordinator.sh. ack-koordinator akan mendukung protokol lama hingga 30 Juli 2023. Segera perbarui konfigurasi resource Anda ke versi protokol baru.

Tabel berikut menjelaskan kompatibilitas berbagai versi ack-koordinator dengan fitur CPU QoS.

Versi komponen

Protokol alibabacloud.com

Protokol koordinator.sh

≥ 0.5.2 dan < 0.8.0

Didukung

Tidak didukung

≥ 0.8.0

Didukung

Didukung