全部产品
Search
文档中心

Container Service for Kubernetes:Aktifkan kebijakan optimasi kinerja CPU Burst

更新时间:Nov 11, 2025

Sumber daya CPU yang tersedia untuk sebuah kontainer dibatasi oleh CPU Limit-nya. Ketika penggunaan aktual mencapai batas tersebut, kernel melakukan throttle terhadap kontainer, yang dapat menurunkan kinerja layanan. Fitur CPU Burst mendeteksi throttling CPU secara dinamis dan menyesuaikan parameter kontainer secara adaptif. Selama lonjakan beban mendadak, CPU Burst dapat memberikan sementara sumber daya CPU tambahan kepada kontainer, sehingga mengurangi hambatan kinerja akibat batas CPU dan meningkatkan kualitas layanan aplikasi—terutama yang sensitif terhadap latensi.

Catatan

Untuk memahami dokumen ini dan menggunakan fitur ini secara optimal, pelajari konsep-konsep seperti CFS Scheduler dan Kebijakan Manajemen CPU.

Mengapa Anda perlu mengaktifkan CPU Burst

Kluster Kubernetes menggunakan CPU Limit untuk membatasi jumlah maksimum sumber daya CPU yang dapat digunakan oleh sebuah kontainer. Hal ini memastikan alokasi sumber daya yang adil di antara beberapa kontainer serta mencegah satu kontainer mengonsumsi terlalu banyak sumber daya CPU hingga memengaruhi kinerja kontainer lainnya.

CPU merupakan sumber daya berbagi waktu, artinya beberapa proses atau kontainer dapat berbagi irisan waktu CPU. Saat Anda mengonfigurasi CPU Limit suatu kontainer, kernel sistem operasi menggunakan Completely Fair Scheduler (CFS) untuk mengontrol penggunaan CPU kontainer (cpu.cfs_quota_us) dalam setiap periode (cpu.cfs_period_us). Misalnya, jika CPU Limit kontainer adalah 4, kernel sistem operasi membatasi kontainer tersebut hingga maksimal 400 ms waktu CPU dalam setiap periode penjadwalan, yang biasanya berdurasi 100 ms.

Manfaat

Pemanfaatan CPU merupakan metrik utama untuk mengukur kesehatan sebuah kontainer. Administrator kluster biasanya menggunakan metrik ini untuk mengonfigurasi CPU Limit kontainer. Dibandingkan dengan metrik per detik yang umum digunakan, pemanfaatan CPU kontainer pada skala ratusan milidetik sering kali menunjukkan gangguan yang lebih jelas dan fluktuasi cepat. Pada gambar berikut, penggunaan CPU jauh di bawah 4 core dalam basis per detik (garis ungu). Namun, dalam basis per milidetik (garis hijau), penggunaan CPU kontainer melebihi 4 core selama beberapa periode. Jika Anda menetapkan CPU Limit sebesar 4 core, sistem operasi akan menangguhkan thread karena throttling CPU.

原理说明

Gambar berikut menunjukkan bagaimana sumber daya CPU dialokasikan ke thread-thread kontainer layanan web pada node 4-core setelah kontainer menerima permintaan (req). CPU Limit kontainer adalah 2. Gambar di sebelah kiri menunjukkan kasus normal, sedangkan gambar di sebelah kanan menunjukkan kasus setelah CPU Burst diaktifkan.

Meskipun pemanfaatan CPU keseluruhan kontainer dalam satu detik terakhir rendah, Thread 2 harus menunggu periode berikutnya untuk menyelesaikan pemrosesan req 2 karena throttling CPU. Hal ini meningkatkan waktu respons (RT) permintaan dan menjadi penyebab utama masalah latensi ekor panjang pada kontainer.ack-slo-manager example.png

Setelah Anda mengaktifkan CPU Burst, kontainer dapat mengumpulkan irisan waktu CPU saat idle dan menggunakannya untuk memenuhi kebutuhan sumber daya selama lonjakan beban. Hal ini meningkatkan kinerja kontainer dan mengurangi latensi.CPU Burst.png

Selain skenario di atas, CPU Burst juga cocok untuk menangani lonjakan penggunaan CPU. Misalnya, ketika lalu lintas layanan melonjak, ack-koordinator dapat menghilangkan hambatan CPU dalam beberapa detik sambil memastikan beban keseluruhan pada node tetap berada pada level aman.

Catatan

ack-koordinator hanya memodifikasi cfs quota dalam parameter cgroup node dan tidak memodifikasi bidang CPU Limit dalam Spesifikasi Pod.

Skenario

Fitur CPU Burst berguna dalam skenario berikut.

  • Sebuah kontainer sering mengalami throttling CPU, yang memengaruhi kinerja aplikasi, meskipun penggunaan CPU-nya biasanya di bawah CPU Limit yang dikonfigurasi. Anda dapat mengaktifkan CPU Burst agar kontainer menggunakan irisan waktu yang terakumulasi selama lonjakan beban. Hal ini secara efektif menyelesaikan masalah throttling CPU dan meningkatkan kualitas layanan aplikasi.

  • Aplikasi kontainer mengonsumsi lebih banyak sumber daya CPU selama fase startup. Setelah aplikasi mulai berjalan dan memasuki kondisi stabil, penggunaan CPU-nya turun ke level yang lebih rendah dan stabil. Jika Anda mengaktifkan CPU Burst, aplikasi dapat menggunakan lebih banyak irisan waktu selama startup untuk memastikan peluncuran cepat tanpa perlu mengonfigurasi CPU Limit yang terlalu tinggi.

Penagihan

Komponen ack-koordinator dapat diinstal dan digunakan secara gratis. Namun, biaya tambahan mungkin timbul dalam skenario berikut:

  • ack-koordinator adalah komponen yang dikelola sendiri dan mengonsumsi sumber daya node pekerja setelah instalasi. Anda dapat mengonfigurasi permintaan sumber daya untuk setiap modul saat menginstal komponen tersebut.

  • Secara default, ack-koordinator mengekspos metrik pemantauan untuk fitur-fitur seperti profiling sumber daya dan penjadwalan detail halus dalam format Prometheus. Jika Anda memilih opsi Aktifkan Pemantauan Prometheus untuk ACK-Koordinator saat mengonfigurasi komponen dan menggunakan layanan Alibaba Cloud Prometheus, metrik-metrik ini dianggap sebagai metrik kustom dan dikenai biaya. Biaya tersebut bergantung pada faktor-faktor seperti ukuran kluster dan jumlah aplikasi. Sebelum mengaktifkan fitur ini, bacalah dengan cermat dokumentasi Penagihan instans Prometheus Alibaba Cloud Prometheus untuk memahami kuota gratis dan kebijakan penagihan untuk metrik kustom. Anda dapat memantau dan mengelola penggunaan sumber daya Anda dengan menanyakan data penggunaan.

Prasyarat

Deskripsi Konfigurasi

Anda dapat mengaktifkan fitur CPU Burst untuk pod tertentu menggunakan anotasi pod. Anda juga dapat mengaktifkannya di tingkat kluster atau namespace menggunakan ConfigMap.

Gunakan anotasi untuk mengaktifkan CPU Burst untuk sebuah pod

Untuk mengaktifkan kebijakan CPU Burst untuk pod tertentu, tambahkan anotasi ke bidang metadata file YAML pod tersebut.

Catatan

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

annotations:
  # Atur ke auto untuk mengaktifkan fitur CPU Burst untuk pod ini.
  koordinator.sh/cpuBurst: '{"policy": "auto"}'
  # Atur ke none untuk menonaktifkan fitur CPU Burst untuk pod ini.
  koordinator.sh/cpuBurst: '{"policy": "none"}'

Gunakan ConfigMap untuk mengaktifkan CPU Burst di tingkat kluster

Kebijakan CPU Burst yang dikonfigurasi melalui ConfigMap berlaku untuk seluruh kluster secara default.

  1. Buat file bernama configmap.yaml menggunakan contoh ConfigMap berikut.

    apiVersion: v1
    data:
      cpu-burst-config: '{"clusterStrategy": {"policy": "auto"}}'
      #cpu-burst-config: '{"clusterStrategy": {"policy": "cpuBurstOnly"}}'
      #cpu-burst-config: '{"clusterStrategy": {"policy": "none"}}'
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
  2. Periksa apakah ConfigMap ack-slo-config ada di namespace kube-system.

    • Jika ada, gunakan metode PATCH untuk memperbaruinya guna menghindari gangguan terhadap item konfigurasi lain dalam ConfigMap.

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

      kubectl apply -f configmap.yaml

Gunakan ConfigMap untuk mengaktifkan CPU Burst di tingkat namespace

Saat Anda mengonfigurasi kebijakan CPU Burst untuk beberapa pod dengan menentukan namespace, kebijakan tersebut berlaku untuk namespace tersebut.

  1. Buat file bernama configmap.yaml menggunakan contoh ConfigMap berikut.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-pod-config
      namespace: koordinator-system # Buat namespace ini secara manual jika Anda menggunakannya untuk pertama kali.
    data:
      # Aktifkan atau nonaktifkan pod secara individual di beberapa namespace.
      cpu-burst: |
        {
          "enabledNamespaces": ["allowed-ns"], 
          "disabledNamespaces": ["blocked-ns"]
        }
      # Kebijakan CPU Burst diaktifkan untuk semua pod di namespace allowed-ns, sesuai dengan policy: auto.
      # Kebijakan CPU Burst dinonaktifkan untuk semua pod di namespace blocked-ns, sesuai dengan policy: none.
  2. Periksa apakah ConfigMap ack-slo-config ada di namespace kube-system.

    • Jika ada, gunakan metode PATCH untuk memperbaruinya guna menghindari gangguan terhadap item konfigurasi lain dalam ConfigMap.

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

      kubectl apply -f configmap.yaml

Prosedur

Contoh ini menggunakan aplikasi layanan web untuk menunjukkan latensi akses sebelum dan setelah kebijakan CPU Burst diaktifkan, guna memverifikasi efek optimasi kebijakan tersebut.

Langkah verifikasi

  1. Buat file bernama apache-demo.yaml yang berisi konten berikut untuk aplikasi contoh.

    Tambahkan anotasi ke bidang metadata objek pod untuk mengaktifkan kebijakan CPU Burst untuk pod tersebut.

    apiVersion: v1
    kind: Pod
    metadata:
      name: apache-demo
      annotations:
        koordinator.sh/cpuBurst: '{"policy": "auto"}'   # Aktifkan kebijakan CPU Burst.
    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
      nodeName: $nodeName # Ubah ini menjadi nama node yang sebenarnya.
      hostNetwork: False
      restartPolicy: Never
      schedulerName: default-scheduler
  2. Jalankan perintah berikut untuk menerapkan Apache HTTP Server sebagai aplikasi target evaluasi.

    kubectl apply -f apache-demo.yaml
  3. Gunakan alat uji stres wrk2 untuk mengirim permintaan.

    # Unduh, ekstrak, dan instal alat pengujian wrk2 open-source. Untuk detailnya, lihat https://github.com/giltene/wrk2.
    # Modul kompresi Gzip diaktifkan dalam konfigurasi citra Apache saat ini untuk mensimulasikan logika pemrosesan permintaan di sisi server.
    # Jalankan perintah uji stres. Pastikan untuk mengubah alamat IP menjadi alamat IP aplikasi target.
    ./wrk -H "Accept-Encoding: deflate, gzip" -t 2 -c 12 -d 120 --latency --timeout 2s -R 24 http://$target_ip_address:8010/static/file.1m.test
    Catatan
    • Ganti alamat target dalam perintah dengan alamat IP pod Apache.

    • Anda dapat memodifikasi parameter -R untuk menyesuaikan laju QPS dari pengirim.

Analisis hasil

Data berikut menunjukkan kinerja pada Alibaba Cloud Linux dan versi komunitas CentOS sebelum dan setelah kebijakan CPU Burst diaktifkan.

  • Benar-benar dinonaktifkan berarti kebijakan CPU Burst diatur ke none.

  • Saat diaktifkan, kebijakan CPU Burst diatur ke auto.

Penting

Data berikut hanya sebagai referensi. Hasil aktual dapat berbeda tergantung pada lingkungan operasi Anda.

Alibaba Cloud Linux

Shut Down All

Enabled

apache RT-p99

107,37 ms

67,18 ms (-37,4%)

CPU Throttled Ratio

33,3%

0%

Pod CPU average utilization

31,8%

32,6%

CentOS

Matikan Semua

Diaktifkan

apache RT-p99

111,69 ms

71,30 ms (-36,2%)

Rasio CPU Throttled

33%

0%

Rata-rata pemanfaatan CPU Pod

32,5%

33,8%

Perbandingan data menunjukkan hal berikut:

  • Setelah fitur CPU Burst diaktifkan, waktu respons (RT) p99 aplikasi meningkat secara signifikan.

  • Setelah fitur CPU Burst diaktifkan, throttling CPU berkurang secara signifikan, sedangkan pemanfaatan CPU pod secara keseluruhan tetap hampir tidak berubah.

Konfigurasi Lanjutan

Anda dapat menentukan konfigurasi lanjutan menggunakan ConfigMap atau dengan menambahkan anotasi ke konfigurasi pod. Anotasi memiliki prioritas lebih tinggi daripada ConfigMap. Jika suatu parameter dapat dikonfigurasi dengan kedua metode dan anotasi tidak ditambahkan, ack-koordinator menggunakan nilai dari ConfigMap tingkat namespace. Jika parameter tersebut tidak ditentukan dalam ConfigMap tingkat namespace, ack-koordinator menggunakan nilai dari ConfigMap tingkat kluster.

Berikut adalah contoh konfigurasi.

# Contoh ConfigMap ack-slo-config.
data:
  cpu-burst-config: |
    {
      "clusterStrategy": {
        "policy": "auto",
        "cpuBurstPercent": 1000,
        "cfsQuotaBurstPercent": 300,
        "sharePoolThresholdPercent": 50,
        "cfsQuotaBurstPeriodSeconds": -1
      }
    }

# Contoh anotasi pod.
  koordinator.sh/cpuBurst: '{"policy": "auto", "cpuBurstPercent": 1000, "cfsQuotaBurstPercent": 300, "cfsQuotaBurstPeriodSeconds": -1}'

Berikut adalah parameter lanjutan untuk kebijakan CPU Burst:

Catatan

Kolom Anotasi dan ConfigMap menunjukkan apakah Anda dapat mengonfigurasi parameter menggunakan anotasi pod atau ConfigMap. 对 menunjukkan didukung, dan 错 menunjukkan tidak didukung.

Parameter

Tipe

Deskripsi

Anotasi

ConfigMap

policy

string

  • none (default): Menonaktifkan kebijakan CPU Burst dan mengatur ulang parameter terkait ke nilai awalnya.

  • cpuBurstOnly: Mengaktifkan hanya fitur CPU Burst tingkat kernel yang disediakan oleh Alibaba Cloud Linux.

  • cfsQuotaBurstOnly: Mengaktifkan hanya elastisitas otomatis kuota CFS. Didukung oleh semua versi kernel.

  • auto: Secara otomatis mengaktifkan kedua kemampuan elastis di atas, termasuk fitur kernel Alibaba Cloud Linux dan elastisitas otomatis kuota CFS.

对

对

cpuBurstPercent

int

Nilai default adalah 1000, dan satuannya persentase.

Parameter ini digunakan untuk mengonfigurasi fitur CPU Burst tingkat kernel yang disediakan oleh Alibaba Cloud Linux. Parameter ini menentukan persentase hingga mana batas CPU dapat ditingkatkan oleh CPU Burst. Parameter ini sesuai dengan parameter cgroup pod cpu.cfs_burst_us. Untuk informasi lebih lanjut, lihat Aktifkan fitur CPU Burst untuk cgroup v1.

Sebagai contoh, dengan konfigurasi default, untuk CPU Limit = 1, cpu.cfs_quota_us yang sesuai adalah 100.000, dan cpu.cfs_burst_us ditingkatkan sebesar faktor 10 menjadi 1.000.000.

对

对

cfsQuotaBurstPercent

int

Nilai default adalah 300. Satuannya persentase.

Menentukan persentase maksimum hingga mana nilai parameter cgroup pod cpu.cfs_quota_us dapat ditingkatkan saat elastisitas kuota CFS diaktifkan. Nilai default adalah 3 kali lipat.

对

对

cfsQuotaBurstPeriodSeconds

int

Nilai default adalah -1, yang berarti tidak ada batasan. Satuannya detik.

Saat fitur burst kuota CFS diaktifkan, parameter ini menentukan batas waktu bagi pod untuk terus-menerus mengonsumsi CPU pada batas atasnya (cfsQuotaBurstPercent). Setelah pod melebihi batas waktu ini, parameter cgroup cpu.cfs_quota_us yang ditingkatkan dikembalikan ke nilai aslinya. Pod lain tidak terpengaruh.

对

对

sharePoolThresholdPercent

int

Nilai default adalah 50 persen.

Parameter ini menentukan ambang batas pemanfaatan CPU node saat penyesuaian otomatis kuota CFS diaktifkan. Jika ambang batas ini terlampaui, parameter cgroup cpu.cfs_quota_us dikembalikan ke nilai aslinya untuk semua pod di node yang kuotanya telah ditingkatkan.

错

对

Catatan
  • Saat Anda mengaktifkan penyesuaian otomatis kuota CFS dengan mengatur policy ke cfsQuotaBurstOnly atau auto, parameter batas CPU pod cpu.cfs_quota_us pada node disesuaikan secara dinamis berdasarkan throttling CPU.

  • Saat melakukan uji stres pada pod, kami merekomendasikan agar Anda memantau penggunaan CPU pod atau sementara menonaktifkan penyesuaian otomatis kuota CFS (atur policy ke cpuBurstOnly atau none) untuk menjaga elastisitas sumber daya yang lebih baik di lingkungan produksi.

FAQ

Apakah fitur CPU Burst yang saya aktifkan berdasarkan protokol versi sebelumnya dari ack-slo-manager masih berfungsi setelah saya meningkatkan ack-slo-manager ke ack-koordinator?

Ya. Protokol Pod versi sebelumnya mengharuskan Anda menambahkan anotasi alibabacloud.com/cpuBurst. ack-koordinator sepenuhnya kompatibel dengan versi protokol sebelumnya ini. Anda dapat meningkatkan komponen tersebut ke versi baru secara mulus.

Catatan

ack-koordinator kompatibel dengan versi protokol hingga 30 Juli 2023. Kami merekomendasikan agar Anda mengganti parameter sumber daya yang digunakan dalam versi protokol sebelumnya dengan yang digunakan dalam versi terbaru.

Berikut ini menjelaskan kompatibilitas ack-koordinator dengan berbagai versi protokol.

ack-koordinator versi

Protokol alibabacloud.com

Protokol koordinator.sh

≥0.2.0

Didukung

Tidak didukung

≥0.8.0

Didukung

Didukung

Setelah saya mengaktifkan konfigurasi CPU Burst, mengapa pod saya masih mengalami throttling CPU?

Hal ini dapat terjadi karena beberapa alasan. Tinjau poin-poin berikut untuk memecahkan masalah tersebut.

  • Format konfigurasi mungkin salah, sehingga kebijakan CPU Burst tidak berlaku. Untuk informasi lebih lanjut, lihat Konfigurasi Lanjutan untuk memverifikasi dan memodifikasi konfigurasi.

  • Event throttling CPU mungkin tetap dihasilkan jika pemanfaatan CPU mencapai batas atas yang ditentukan oleh cfsQuotaBurstPercent karena sumber daya CPU yang tidak mencukupi.

    Anda dapat menyesuaikan nilai Request dan Limit berdasarkan kebutuhan aktual aplikasi Anda.

  • Kebijakan CPU Burst menyesuaikan dua parameter cgroup untuk pod: cpu.cfs_quota_us dan cpu.cfs_burst_us. Untuk informasi lebih lanjut, lihat Konfigurasi parameter lanjutan. Parameter cpu.cfs_quota_us hanya diatur setelah ack-koordinator mendeteksi event CPU Throttled, yang menyebabkan sedikit keterlambatan. Sebaliknya, parameter cpu.cfs_burst_us diatur langsung berdasarkan konfigurasi, sehingga lebih responsif.

    Untuk hasil optimal, kami merekomendasikan agar Anda menggunakan sistem operasi Alibaba Cloud Linux.

  • Kebijakan CPU Burst mencakup mekanisme perlindungan untuk menyesuaikan cpu.cfs_quota_us, yaitu ambang batas keamanan tingkat node yang dikonfigurasi oleh parameter sharePoolThresholdPercent. Jika pemanfaatan CPU node menjadi terlalu tinggi, cpu.cfs_quota_us dikembalikan ke nilai awalnya untuk mencegah pod memengaruhi pod lain.

    Anda dapat mengatur ambang batas keamanan berdasarkan kebutuhan aplikasi Anda untuk menghindari degradasi kinerja akibat pemanfaatan mesin yang tinggi.

Apakah perlu menggunakan sistem operasi Alibaba Cloud Linux untuk mengaktifkan kebijakan CPU Burst?

Tidak. Kebijakan CPU Burst ack-koordinator mendukung semua kernel open source Alibaba Cloud Linux dan CentOS. Namun, kami merekomendasikan agar Anda menggunakan sistem operasi Alibaba Cloud Linux. Fitur kernel Alibaba Cloud Linux memungkinkan ack-koordinator menyediakan mekanisme manajemen CPU yang lebih detail halus dan elastis. Untuk informasi lebih lanjut, lihat Aktifkan Fitur CPU Burst pada Antarmuka cgroup v1.

Setelah saya mengaktifkan CPU Burst, mengapa jumlah thread yang dilaporkan oleh kode aplikasi saya berubah?

Hal ini terjadi karena mekanisme CPU Burst dapat bertentangan dengan cara beberapa aplikasi mengambil informasi sumber daya sistem. ack-koordinator mengimplementasikan CPU Burst dengan menyesuaikan secara dinamis parameter cgroup dasar kontainer cpu.cfs_quota_us. Nilai ini merepresentasikan kuota waktu CPU yang tersedia untuk kontainer dalam periode penjadwalan saat ini. ack-koordinator secara dinamis mengubah kuota ini berdasarkan beban aplikasi.

Banyak aplikasi, seperti Runtime.getRuntime().availableProcessors() pada Java, langsung membaca cpu.cfs_quota_us untuk memperkirakan jumlah core CPU yang tersedia. Oleh karena itu, ketika kuota CPU disesuaikan secara dinamis, jumlah core yang diambil oleh aplikasi juga berubah, menyebabkan parameter yang bergantung pada nilai ini—seperti ukuran kolam thread—menjadi tidak stabil.

Kami merekomendasikan agar Anda memodifikasi aplikasi Anda agar bergantung pada nilai tetap limits.cpu yang didefinisikan dalam pod.

  1. Suntikkan variabel lingkungan: Anda dapat menggunakan resourceFieldRef untuk menyuntikkan nilai limits.cpu pod ke dalam kontainer sebagai variabel lingkungan.

    env: 
      - name: CPU_LIMIT 
        valueFrom: 
          resourceFieldRef: 
            resource: limits.cpu
  2. Modifikasi kode aplikasi: Anda dapat memodifikasi logika startup aplikasi agar memprioritaskan pembacaan variabel lingkungan CPU_LIMIT untuk menghitung dan mengatur ukuran kolam thread. Setelah perubahan ini, aplikasi berjalan berdasarkan nilai yang stabil dan andal, terlepas dari bagaimana CPU Burst menyesuaikan kuota.