全部产品
Search
文档中心

Container Service for Kubernetes:Aktifkan CPU QoS untuk kontainer

更新时间:Jul 02, 2025

Dalam beberapa kasus, Anda mungkin perlu menyebarkan beban kerja sensitif latensi (LS) dan beban kerja usaha terbaik (BE) pada node yang sama di kluster Kubernetes. Meskipun Kubernetes menggunakan permintaan CPU dan batas CPU untuk mengontrol jumlah sumber daya CPU yang dapat digunakan oleh pod, masih ada persaingan CPU di antara aplikasi dengan prioritas berbeda, yang dapat menurunkan kinerja aplikasi, terutama aplikasi dengan prioritas tinggi. Untuk memastikan pasokan CPU untuk aplikasi LS, disarankan untuk mengaktifkan fitur CPU QoS.

Catatan

Untuk membantu Anda lebih memahami dan menggunakan fitur CPU QoS, disarankan untuk membaca topik-topik berikut di dokumentasi resmi Kubernetes: Kelas Kualitas Layanan Pod dan Tetapkan Sumber Daya Memori ke Kontainer dan Pod. Kami juga sarankan Anda membaca topik fitur identitas grup untuk mempelajari tentang fitur tersebut.

Mengapa CPU QoS?

Untuk sepenuhnya memanfaatkan sumber daya pada node dalam skenario kolokasi, sistem menyebarkan aplikasi LS dan BE pada node yang sama. Aplikasi LS memiliki kelas QoS yang lebih tinggi dibandingkan aplikasi BE. Meskipun Kubernetes menggunakan permintaan CPU dan batas CPU untuk mengontrol jumlah sumber daya CPU yang dapat digunakan oleh pod, persaingan CPU tetap ada di antara kontainer. Sebagai contoh, pod BE dan pod LS dapat berbagi core CPU atau vCore. Ketika beban pod BE meningkat, kinerja pod LS terganggu, sehingga meningkatkan latensi respons aplikasi yang menggunakan pod LS.

Untuk memesan sumber daya CPU untuk pod LS dan mencegah pod BE bersaing mendapatkan sumber daya, Anda dapat menggunakan fitur CPU QoS yang disediakan oleh komponen ack-koordinator. Fitur ini didasarkan pada Alibaba Cloud Linux. Komponen ack-koordinator memungkinkan Anda menggunakan fitur identitas grup untuk mengonfigurasi prioritas penjadwalan Linux untuk pod. Dengan mengatur prioritas pod LS menjadi tinggi dan prioritas pod BE menjadi rendah, pod LS diprioritaskan untuk menggunakan sumber daya CPU yang terbatas, memastikan kualitas layanan dari beban kerja LS.

Fitur CPU QoS memberikan manfaat berikut:

  • Latensi bangun tugas untuk beban kerja LS berkurang, meningkatkan kecepatan respons dan kinerja beban kerja.

  • Proses beban kerja LS tidak direbut ketika Anda membangunkan tugas untuk beban kerja BE.

  • Dalam skenario di mana pemrosesan multithreading simultan (SMT) digunakan, tugas untuk beban kerja BE dan LS tidak diproses secara paralel pada core CPU yang sama. Ini mencegah beban kerja BE bersaing untuk mendapatkan sumber daya melawan beban kerja LS dan memastikan pasokan CPU untuk beban kerja LS.

Prasyarat

  • Kluster Container Service for Kubernetes (ACK) yang memenuhi persyaratan berikut telah dibuat:

    • Versi Kubernetes: 1.18 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui kluster ACK, lihat Perbarui Kluster ACK secara Manual.

    • Sistem operasi: Alibaba Cloud Linux. Fitur identitas grup bergantung pada Alibaba Cloud Linux. Untuk informasi lebih lanjut tentang versi kernel yang diperlukan, lihat Fitur Identitas Grup.

      Catatan

      Jika Anda menggunakan sistem operasi lain, Anda dapat menggunakan fitur Penekanan CPU untuk membatasi penggunaan CPU pod BE. Untuk informasi lebih lanjut, lihat Aktifkan Penekanan CPU.

  • ack-koordinator 0.8.0 telah diinstal di kluster. Untuk informasi lebih lanjut, lihat ack-koordinator (sebelumnya dikenal sebagai ack-slo-manager).

Penagihan

Tidak ada biaya yang dikenakan saat Anda menginstal atau menggunakan komponen ack-koordinator. Namun, biaya mungkin dikenakan dalam skenario berikut:

  • ack-koordinator adalah komponen non-managed yang menggunakan sumber daya node pekerja setelah diinstal. Anda dapat menentukan jumlah sumber daya yang diminta oleh setiap modul saat menginstal komponen.

  • Secara default, ack-koordinator mengekspos metrik pemantauan fitur seperti profil sumber daya dan penjadwalan granular sebagai metrik Prometheus. Jika Anda mengaktifkan metrik Prometheus untuk ack-koordinator dan menggunakan Managed Service for Prometheus, metrik ini dianggap sebagai metrik kustom dan biaya akan dikenakan untuk metrik ini. Biaya tergantung pada faktor-faktor seperti ukuran kluster Anda dan jumlah aplikasi. Sebelum mengaktifkan metrik Prometheus, kami sarankan Anda membaca topik Penagihan dari Managed Service for Prometheus untuk mempelajari tentang kuota gratis dan aturan penagihan metrik kustom. Untuk informasi lebih lanjut tentang cara memantau dan mengelola penggunaan sumber daya, lihat Kueri jumlah data observabel dan tagihan.

Prosedur

Anda dapat menggunakan ConfigMap untuk mengaktifkan CPU QoS di kluster dan mengonfigurasi prioritas identitas grup CPU untuk pod LS dan BE. Anda dapat menggunakan fitur identitas grup untuk menentukan pengenal untuk setiap cgroup CPU. Saat kernel menjadwalkan tugas yang identitasnya dikonfigurasi, kernel memproses tugas tersebut berdasarkan prioritas tugas.

Setelah konfigurasi selesai, Anda dapat menentukan kelas CPU QoS pod dengan menambahkan label koordinator.sh/qosClass ke file YAML pod. Jika Anda tidak menambahkan label koordinator.sh/qosClass ke pod, ack-koordinator memilih kelas QoS asli Kubernetes. BE menunjukkan kelas QoS BestEffort dan LS menunjukkan kelas QoS Burstable atau Guaranteed.

  1. Buat file bernama configmap.yaml dan salin konten berikut ke file tersebut. File ini digunakan untuk membuat ConfigMap yang memungkinkan Anda mengaktifkan fitur CPU QoS.

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

    Tentukan parameter lsClass dan beClass untuk menetapkan kelas LS dan BE ke pod yang berbeda. Bidang cpuQOS digunakan untuk mengonfigurasi fitur CPU QoS. Tabel berikut menjelaskan parameter utama.

    Parameter

    Tipe

    Rentang nilai

    Deskripsi

    enable

    Boolean

    • true

    • false

    • true: mengaktifkan fitur CPU QoS untuk semua kontainer di kluster.

    • false: menonaktifkan fitur CPU QoS untuk semua kontainer di kluster.

    groupIdentity

    Int

    [-1, 2]

    Prioritas identitas grup CPU. Nilai group identity yang lebih besar menunjukkan prioritas yang lebih tinggi dalam penjadwalan CPU. Untuk informasi lebih lanjut, lihat Fitur identitas grup.

    Nilai default untuk pod LS adalah 2 dan nilai default untuk pod BE adalah -1. Nilai 0 menonaktifkan fitur identitas grup.

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

    • Jika ConfigMap ack-slo-config ada, jalankan perintah kubectl patch untuk memperbarui ConfigMap. Ini menghindari perubahan pengaturan lain dalam ConfigMap.

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

      kubectl apply -f configmap.yaml
  3. Buat file bernama ls-pod-demo.yaml dan salin konten berikut ke file tersebut. File YAML menetapkan kelas LS ke pod. Kemudian, terapkan file YAML di kluster.

    Catatan

    Untuk menerapkan konfigurasi ke beban kerja, seperti deployment, tetapkan anotasi yang sesuai untuk pod di bidang template.metadata.

    apiVersion: v1
    kind: Pod
    metadata:
      name: ls-pod-demo
      labels:
        koordinator.sh/qosClass: 'LS' # Tetapkan kelas QoS pod ke 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 untuk memeriksa apakah identitas grup CPU pod LS di control group (cgroup) node berlaku:

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

    Output yang diharapkan:

    # Identitas grup pod LS adalah 2 (prioritas tinggi).
    2
  5. Buat file bernama ls-pod-demo.yaml dan salin konten berikut ke file tersebut. File YAML menetapkan kelas BE ke pod. Kemudian, terapkan file YAML di kluster.

    apiVersion: v1
    kind: Pod
    metadata:
      name: be-pod-demo
      labels:
        koordinator.sh/qosClass: 'BE' # Tetapkan kelas QoS pod ke BE.
    spec:
      containers:
        - args:
            - '-c'
            - '1'
            - '--vm'
            - '1'
          command:
            - stress
          image: polinux/stress
          imagePullPolicy: Always
          name: stress
      restartPolicy: Always
      schedulerName: default-scheduler
    kubectl apply -f be-pod-demo.yaml
  6. Jalankan perintah berikut untuk memeriksa apakah identitas grup CPU pod BE di cgroup node berlaku:

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

    Output yang diharapkan:

    # Identitas grup pod BE adalah -1 (prioritas rendah).
    -1

    Output menunjukkan bahwa identitas grup pod LS memiliki prioritas tinggi dan identitas grup pod BE memiliki prioritas rendah. Sumber daya CPU diutamakan dialokasikan ke pod LS untuk memastikan kualitas layanan.

FAQ

Apakah fitur CPU QoS yang diaktifkan berdasarkan versi sebelumnya dari protokol ack-slo-manager masih didukung setelah saya memutakhirkan dari ack-slo-manager ke ack-koordinator?

Pada versi sebelumnya (≤ 0.8.0) dari protokol ack-slo-manager, anotasi pod alibabacloud.com/qosClass digunakan untuk mengaktifkan CPU QoS.

ack-koordinator kompatibel dengan versi sebelumnya dari protokol ack-slo-manager. Anda dapat memutakhirkan dari ack-slo-manager ke ack-koordinator secara mulus dan secara bertahap mengubah protokol yang digunakan oleh pod ke koordinator.sh. ack-koordinator kompatibel dengan versi protokol sebelumnya hingga 30 Juli 2023. Kami sarankan Anda memutakhirkan parameter sumber daya dalam versi protokol sebelumnya ke versi terbaru.

Tabel berikut menjelaskan kompatibilitas antara versi berbeda dari ack-koordinator dan fitur CPU QoS.

Versi ack-koordinator

Protokol alibabacloud.com

Protokol koordinator.sh

≥ 0.5.2 dan < 0.8.0

×

≥ 0.8.0