All Products
Search
Document Center

Container Service for Kubernetes:Aktifkan kebijakan optimasi performa CPU Burst

Last Updated:Mar 05, 2026

Batas CPU membatasi jumlah CPU yang dapat digunakan oleh sebuah kontainer. Saat penggunaan aktual mencapai batas tersebut, kernel akan melakukan throttling terhadap kontainer tersebut. Throttling menurunkan kualitas layanan. Fitur CPU Burst mendeteksi throttling dan secara otomatis menyesuaikan parameter kontainer. Selama lonjakan beban, CPU Burst menyediakan sumber daya CPU tambahan bagi kontainer, sehingga mengurangi bottleneck performa terkait CPU dan meningkatkan kualitas layanan—terutama untuk aplikasi yang sensitif terhadap latensi.

Catatan

Untuk memahami dokumen ini dan menggunakan fitur ini secara optimal, pelajari terlebih dahulu tentang CFS Scheduler dan kebijakan manajemen CPU node.

Mengapa mengaktifkan CPU Burst

Kluster Kubernetes menggunakan batas CPU untuk membatasi konsumsi CPU oleh sebuah kontainer. Hal ini memastikan pembagian sumber daya yang adil di antara kontainer dan mencegah satu kontainer menghabiskan sumber daya yang seharusnya tersedia untuk kontainer lain.

CPU merupakan sumber daya yang dibagi berdasarkan waktu. Banyak proses atau kontainer berbagi time slice CPU. Saat Anda menetapkan batas CPU, kernel sistem operasi menggunakan Completely Fair Scheduler (CFS) untuk mengontrol berapa banyak waktu CPU yang diberikan kepada sebuah kontainer dalam setiap siklus penjadwalan. Panjang siklus ditentukan oleh cpu.cfs_period_us. Waktu CPU yang diizinkan per siklus ditentukan oleh cpu.cfs_quota_us. Sebagai contoh, jika sebuah kontainer memiliki batas CPU sebesar 4, kernel membatasinya hingga 400 ms waktu CPU per siklus penjadwalan 100 ms.

Manfaat

Penggunaan CPU merupakan metrik utama untuk memantau kesehatan kontainer. Administrator kluster sering menggunakannya untuk menetapkan batas CPU. Dibandingkan dengan metrik tingkat detik, penggunaan CPU tingkat milidetik menunjukkan lonjakan dan fluktuasi jangka pendek yang lebih nyata. Pada grafik di bawah ini, penggunaan CPU yang diukur per detik (garis ungu) tampak jauh di bawah 4 core. Namun pada tingkat milidetik (garis hijau), penggunaan melebihi 4 core selama beberapa periode. Jika batas CPU ditetapkan pada 4 core, throttling akan menunda thread—dan meningkatkan latensi respons (RT). Ini merupakan penyebab utama masalah RT long-tail.

原理说明

Gambar berikutnya menunjukkan alokasi sumber daya CPU untuk kontainer layanan web dengan batas CPU 2 pada node 4-core. Sisi kiri menunjukkan perilaku normal. Sisi kanan menunjukkan perilaku setelah mengaktifkan CPU Burst.

Meskipun penggunaan CPU keseluruhan dalam satu detik terakhir rendah, throttling memaksa Thread 2 menunggu hingga siklus penjadwalan berikutnya untuk menyelesaikan pemrosesan req 2. Hal ini meningkatkan RT permintaan dan merupakan penyebab umum dari RT long-tail.ack-slo-manager example.png

Setelah mengaktifkan CPU Burst, kontainer mengumpulkan waktu CPU yang tidak terpakai dan menggunakannya selama lonjakan beban. Hal ini meningkatkan performa dan mengurangi latensi.CPU Burst.png

CPU Burst juga membantu ketika permintaan CPU melonjak secara tiba-tiba. Misalnya, jika lalu lintas layanan meningkat pesat, ack-koordinator mengatasi bottleneck CPU dalam hitungan detik—sementara tetap menjaga beban total node dalam batas aman.

Catatan

ack-koordinator hanya menyesuaikan parameter cfs quota dalam cgroup node. Parameter ini tidak mengubah bidang batas CPU dalam spesifikasi Pod.

Skenario

Kasus penggunaan khas untuk CPU Burst meliputi hal-hal berikut:

  • Penggunaan CPU sebagian besar waktu berada di bawah batas CPU—namun throttling tetap terjadi dan merusak performa aplikasi. Mengaktifkan CPU Burst memungkinkan kontainer menggunakan waktu CPU terakumulasi selama lonjakan beban, sehingga mengatasi throttling dan meningkatkan kualitas layanan.

  • Kontainer menggunakan CPU tinggi selama startup dan pemuatan. Setelah pemuatan selesai, penggunaan CPU turun ke level rendah yang stabil. Dengan CPU Burst diaktifkan, Anda tidak perlu menetapkan batas CPU yang terlalu tinggi. Kontainer menggunakan waktu CPU ekstra selama startup—dan memulai lebih cepat.

Prasyarat

Konfigurasi

Anda dapat mengaktifkan CPU Burst untuk Pod tertentu menggunakan anotasi Pod. Atau Anda dapat mengaktifkannya di seluruh kluster atau namespace menggunakan ConfigMap.

Aktifkan CPU Burst untuk Pod tertentu menggunakan anotasi

Tambahkan anotasi CPU Burst di bawah bidang metadata dalam YAML Pod. Konfigurasi ini hanya berlaku untuk Pod tersebut.

Catatan

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

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

Mengaktifkan pada dimensi kluster menggunakan ConfigMap

ConfigMap mengonfigurasi CPU Burst 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 sudah ada di namespace kube-system.

    • Jika sudah ada, perbarui menggunakan PATCH agar pengaturan lain tidak berubah.

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

      kubectl apply -f configmap.yaml

Aktifkan melalui ConfigMap pada Dimensi Namespace

Anda dapat mengonfigurasi kebijakan CPU Burst untuk Pod dalam suatu namespace dengan menentukan namespace tersebut. Kebijakan tersebut kemudian 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 sebelum penggunaan pertama.
    data:
      # Aktifkan atau nonaktifkan CPU Burst untuk namespace yang dipilih.
      cpu-burst: |
        {
          "enabledNamespaces": ["allowed-ns"], 
          "disabledNamespaces": ["blocked-ns"]
        }
      # Mengaktifkan CPU Burst untuk semua Pod di namespace allowed-ns. Kebijakan adalah auto.
      # Menonaktifkan CPU Burst untuk semua Pod di namespace blocked-ns. Kebijakan adalah none.
  2. Periksa apakah ConfigMap ack-slo-config sudah ada di namespace kube-system.

    • Jika sudah ada, perbarui menggunakan PATCH agar pengaturan lain tidak berubah.

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

      kubectl apply -f configmap.yaml

Prosedur

Contoh ini menggunakan aplikasi layanan web untuk menunjukkan bagaimana CPU Burst mengurangi latensi akses—dan membuktikan manfaat performanya.

Langkah verifikasi

  1. Buat file bernama apache-demo.yaml menggunakan YAML berikut.

    Tambahkan anotasi CPU Burst di bawah bidang metadata untuk mengaktifkan CPU Burst pada Pod ini.

    apiVersion: v1
    kind: Pod
    metadata:
      name: apache-demo
      annotations:
        koordinator.sh/cpuBurst: '{"policy": "auto"}'   # Aktifkan 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 # Ganti dengan nama node yang sebenarnya.
      hostNetwork: False
      restartPolicy: Never
      schedulerName: default-scheduler
  2. Deploy Apache HTTP Server sebagai aplikasi uji coba.

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

    # Unduh dan ekstrak tool open-source wrk2. Lihat https://github.com/giltene/wrk2.
    # Image Apache telah mengaktifkan kompresi Gzip untuk mensimulasikan pemrosesan permintaan di sisi server.
    # Jalankan uji beban. Ganti $target_ip_address dengan alamat IP Pod Apache.
    ./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.

    • Sesuaikan tekanan QPS dengan mengubah parameter -R.

Analisis hasil

Tabel berikut membandingkan performa pada Alibaba Cloud Linux dan CentOS komunitas—dengan dan tanpa CPU Burst.

  • All disabled berarti kebijakan CPU Burst diatur ke none.

  • All enabled berarti kebijakan CPU Burst diatur ke auto.

Penting

Nilai di bawah ini bersifat teoretis. Hasil aktual bergantung pada lingkungan Anda.

Alibaba Cloud Linux

Shutdown All

All enabled

apache RT-p99

107,37 ms

67,18 ms (-37,4%)

CPU Throttled Ratio

33,3%

0%

Rata-rata utilisasi CPU Pod

31,8%

32,6%

CentOS

Shut Down All

All enabled

apache RT-p99

111,69 ms

71,30 ms (-36,2%)

CPU Throttled Ratio

33%

0%

Rata-rata utilisasi CPU Pod

32,5%

33,8%

Hasil ini menunjukkan:

  • Mengaktifkan CPU Burst secara signifikan meningkatkan metrik RT p99.

  • Mengaktifkan CPU Burst sangat mengurangi throttling CPU. Rata-rata utilisasi CPU Pod tetap hampir tidak berubah.

Konfigurasi lanjutan

Anda dapat mengonfigurasi parameter lanjutan CPU Burst dalam ConfigMap atau dalam anotasi Pod. Jika keduanya diatur, anotasi Pod memiliki prioritas lebih tinggi. Jika tidak ada anotasi yang ditetapkan, ack-koordinator memeriksa ConfigMap tingkat namespace. Jika tidak ada ConfigMap tingkat namespace yang ditetapkan, ack-koordinator menggunakan ConfigMap tingkat kluster.

Contoh:

# 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}'

Tabel berikut mencantumkan parameter lanjutan CPU Burst:

Catatan

Kolom Anotasi dan ConfigMap menunjukkan apakah setiap parameter mendukung konfigurasi melalui anotasi Pod atau ConfigMap. 对 berarti didukung. 错 berarti tidak didukung.

Parameter

Tipe

Deskripsi

Anotasi

ConfigMap

policy

string

  • none (default): Nonaktifkan CPU Burst. Semua parameter terkait dikembalikan ke nilai awalnya.

  • cpuBurstOnly: Aktifkan hanya elastisitas CPU Burst tingkat kernel Alibaba Cloud Linux.

  • cfsQuotaBurstOnly: Aktifkan hanya elastisitas kuota CFS. Berfungsi pada semua versi kernel.

  • auto: Secara otomatis mengaktifkan kedua elastisitas—fitur kernel Alibaba Cloud Linux dan elastisitas kuota CFS.

对

对

cpuBurstPercent

int

Default: 1000. Satuan: persen.

Untuk elastisitas CPU Burst tingkat kernel Alibaba Cloud Linux, parameter ini menentukan seberapa besar CPU Burst diperkuat melebihi batas CPU. Memetakan ke parameter cgroup cpu.cfs_burst_us. Untuk detailnya, lihat Aktifkan CPU Burst menggunakan antarmuka cgroup v1.

Sebagai contoh, dengan pengaturan default, CPU Limit = 1 menetapkan cpu.cfs_quota_us menjadi 100.000. Lalu cpu.cfs_burst_us menjadi 1.000.000—peningkatan 10×.

对

对

cfsQuotaBurstPercent

int

Default: 300. Satuan: persen.

Saat elastisitas kuota CFS diaktifkan, parameter ini menentukan peningkatan maksimum yang diizinkan untuk parameter cgroup cpu.cfs_quota_us. Nilai default adalah 3×.

对

对

cfsQuotaBurstPeriodSeconds

int

Default: -1. Satuan: detik. -1 berarti tidak terbatas.

Saat elastisitas kuota CFS diaktifkan, parameter ini menentukan berapa lama sebuah Pod dapat mengonsumsi CPU pada kuota yang ditingkatkan (cfsQuotaBurstPercent). Setelah periode ini, cpu.cfs_quota_us Pod tersebut dikembalikan ke nilai aslinya. Pod lain tidak terpengaruh.

对

对

sharePoolThresholdPercent

int

Default: 50. Satuan: persen.

Saat elastisitas kuota CFS diaktifkan, parameter ini menetapkan ambang batas aman penggunaan CPU untuk node. Jika penggunaan melebihi ambang batas ini, semua Pod dengan cpu.cfs_quota_us yang ditingkatkan dikembalikan ke nilai aslinya.

错

对

Catatan
  • Saat Anda mengaktifkan penyesuaian kuota CFS otomatis (policy diatur ke cfsQuotaBurstOnly atau auto), parameter cpu.cfs_quota_us untuk Pod berubah secara dinamis berdasarkan event throttling.

  • Selama uji stres Pod, pantau penggunaan CPU Pod—atau nonaktifkan sementara penyesuaian kuota CFS otomatis (policy diatur ke cpuBurstOnly atau none). Hal ini menjaga stabilitas elastisitas sumber daya di lingkungan produksi.

FAQ

Saya menggunakan CPU Burst dengan protokol lama ack-slo-manager. Apakah masih berfungsi setelah upgrade ke ack-koordinator?

Anotasi Pod lama menggunakan alibabacloud.com/cpuBurst. ack-koordinator sepenuhnya mendukung protokol lama ini. Anda dapat melakukan upgrade secara mulus.

Catatan

Periode kompatibilitas ack-koordinator untuk versi protokol sebelumnya berakhir pada 30 Juli 2023. Kami sangat menyarankan Anda untuk mengupgrade parameter sumber daya dari versi protokol sebelumnya ke versi terbaru.

ack-koordinator kompatibel dengan versi protokol berikut.

ack-koordinator versi

protokol alibabacloud.com

protokol koordinator.sh

≥0.2.0

Didukung

Tidak didukung

≥0.8.0

Didukung

Didukung

Mengapa throttling CPU masih terjadi setelah mengaktifkan CPU Burst?

Penyebab umum dan solusinya:

  • Sintaksis konfigurasi tidak valid mencegah CPU Burst berjalan. Lihat Konfigurasi lanjutan untuk memperbaiki dan memverifikasi.

  • Throttling tetap terjadi saat penggunaan CPU mencapai batas cfsQuotaBurstPercent karena sumber daya CPU tidak mencukupi.

    Sesuaikan nilai request dan limit CPU Anda agar sesuai dengan kebutuhan riil aplikasi.

  • CPU Burst menyesuaikan dua parameter cgroup: cpu.cfs_quota_us dan cpu.cfs_burst_us. Lihat Konfigurasi lanjutan. cpu.cfs_quota_us hanya diperbarui setelah ack-koordinator mendeteksi throttling—sehingga terdapat sedikit penundaan. cpu.cfs_burst_us diperbarui langsung dari nilai yang dikonfigurasi—sehingga merespons lebih cepat.

    Untuk hasil terbaik, gunakan Alibaba Cloud Linux.

  • Kebijakan CPU Burst memiliki mekanisme perlindungan saat menyesuaikan cpu.cfs_quota_us, yaitu pengaturan ambang batas watermark keamanan keseluruhan sharePoolThresholdPercent. Saat utilisasi keseluruhan terlalu tinggi, untuk mencegah satu Pod menyebabkan gangguan lebih lanjut, cpu.cfs_quota_us dikembalikan ke nilai awalnya.

    Anda harus menetapkan ambang batas keamanan mesin yang sesuai berdasarkan kondisi aktual aplikasi Anda untuk mencegah utilisasi mesin tinggi memengaruhi performa aplikasi.

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

ack-koordinator CPU Burst berfungsi pada semua kernel open-source Alibaba Cloud Linux dan CentOS. Kami merekomendasikan Alibaba Cloud Linux. Fitur kernel-nya memungkinkan ack-koordinator memberikan elastisitas CPU yang lebih granular. Untuk detailnya, lihat Aktifkan CPU Burst menggunakan antarmuka cgroup v1.

Setelah mengaktifkan CPU Burst, mengapa aplikasi saya melaporkan jumlah thread yang berbeda?

Hal ini karena mekanisme kerja CPU Burst bertentangan dengan cara aplikasi tertentu memperoleh sumber daya sistem. ack-koordinator secara dinamis menyesuaikan parameter cgroup dasar kontainer, cpu.cfs_quota_us, saat menerapkan CPU Burst. Nilai ini merepresentasikan kuota waktu CPU yang tersedia untuk kontainer dalam siklus penjadwalan saat ini. ack-koordinator secara dinamis mengubah skala kuota ini berdasarkan beban aplikasi.

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

Sebagai gantinya, buat aplikasi Anda bergantung pada nilai tetap limits.cpu yang didefinisikan dalam spesifikasi Pod.

  1. Suntikkan variabel lingkungan: Gunakan resourceFieldRef untuk menyuntikkan nilai limits.cpu Pod ke dalam kontainer.

    env: 
      - name: CPU_LIMIT 
        valueFrom: 
          resourceFieldRef: 
            resource: limits.cpu
  2. Perbarui kode aplikasi Anda: Ubah logika startup untuk membaca CPU_LIMIT terlebih dahulu saat menghitung dan menetapkan ukuran kolam thread. Hal ini memastikan perilaku yang stabil dan andal—meskipun CPU Burst mengubah kuota.