All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan resource overcommitted secara dinamis untuk proxy sidecar

Last Updated:Mar 12, 2026

Proxy sidecar mengonsumsi CPU secara burst—tinggi saat pembentukan koneksi dan rendah saat lalu lintas stabil. Pola burst ini menyebabkan sebagian besar CPU dan memori yang dialokasikan untuk sidecar menganggur selama sebagian besar waktu. Dengan menetapkan resource overcommitted secara dinamis ACK (Batch CPU dan Batch memory) ke kontainer sidecar, Anda dapat memulihkan kapasitas menganggur tersebut dan menjadikannya tersedia untuk Pod lain, sehingga meningkatkan pemanfaatan kluster secara keseluruhan.

Topik ini menjelaskan langkah-langkah menerapkan ConfigMap overcommitment, mengonfigurasi batas resource Batch untuk kontainer sidecar di Konsol ASM, menerapkan workload contoh, serta memverifikasi hasilnya.

Cara kerja overcommitment resource dinamis

Di Kubernetes, kubelet mengelola resource Pod berdasarkan kelas quality of service (QoS): Guaranteed, Burstable, dan BestEffort. Kelas-kelas ini ditentukan oleh permintaan dan batas CPU serta memori yang ditetapkan pada setiap Pod.

ack-koordinator memperluas model ini dengan memantau beban node secara real time dan memulihkan resource yang telah dialokasikan namun tidak digunakan secara aktif. Untuk membedakan resource yang dipulihkan ini dari CPU dan memori biasa, ack-koordinator memberinya prioritas Batch:

Jenis resourceResource KeyUnit
Batch CPUkubernetes.io/batch-cpuMillicores
Batch memorykubernetes.io/batch-memoryBytes

Pod yang mengonsumsi resource Batch harus memiliki label koordinator.sh/qosClass: "BE", yang dipetakan ke kelas QoS BestEffort Koordinator. Label ini memberi tahu penjadwal untuk memperlakukan Pod sebagai konsumen prioritas rendah atas kapasitas yang dipulihkan.

Untuk detail mengenai model overcommitment, lihat Aktifkan overcommitment resource dinamis.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Membuat kluster ACK Pro. Untuk informasi lebih lanjut, lihat Buat kluster ACK Pro.

    Catatan Hanya kluster ACK Pro yang mendukung resource overcommitted secara dinamis.
  • Mengaktifkan fitur overcommitment resource dinamis pada kluster ACK Pro. Untuk informasi lebih lanjut, lihat Aktifkan overcommitment resource dinamis.

  • Menambahkan kluster ACK Pro ke instans ASM yang menjalankan versi 1.16 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instans ASM.

Langkah 1: Terapkan ConfigMap ack-slo-config

ConfigMap ack-slo-config mengontrol cara ack-koordinator memulihkan resource menganggur di setiap node.

  1. Buat file bernama configmap.yaml dengan konten berikut. Tabel berikut menjelaskan parameter utama. Untuk detail semua item konfigurasi, lihat Aktifkan overcommitment resource dinamis.

    ParameterDeskripsiNilai contoh
    enableMengaktifkan overcommitment resource pada node.true
    metricAggregateDurationSecondsInterval dalam detik untuk agregasi metrik resource node.60
    cpuReclaimThresholdPercentPersentase CPU yang dialokasikan yang dapat dipulihkan.60
    memoryReclaimThresholdPercentPersentase memori yang dialokasikan yang dapat dipulihkan.70
    memoryCalculatePolicyMetode perhitungan ketersediaan memori. usage menggunakan konsumsi memori aktual sebagai dasar perhitungan."usage"
       apiVersion: v1
       kind: ConfigMap
       metadata:
         name: ack-slo-config
         namespace: kube-system
       data:
         colocation-config: |
           {
             "enable": true,
             "metricAggregateDurationSeconds": 60,
             "cpuReclaimThresholdPercent": 60,
             "memoryReclaimThresholdPercent": 70,
             "memoryCalculatePolicy": "usage"
           }
  2. Terapkan ConfigMap tersebut.

    • Jika ConfigMap ack-slo-config sudah ada di namespace kube-system, lakukan patch agar pengaturan lain tetap terjaga:

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • Jika ConfigMap belum ada, buatlah:

      kubectl apply -f configmap.yaml
  3. Verifikasi resource Batch yang tersedia di sebuah node. Ganti <node-name> dengan nama node sebenarnya. Di output, cari bagian allocatable. Jika kubernetes.io/batch-cpu dan kubernetes.io/batch-memory muncul di bawah allocatable, maka ConfigMap overcommitment berfungsi dengan benar.

       kubectl get node <node-name> -o yaml
       status:
         allocatable:
           # Unit: millicores. Pada contoh ini, tersedia 50 core.
           kubernetes.io/batch-cpu: 50000
           # Unit: bytes. Pada contoh ini, tersedia memori 50 GB.
           kubernetes.io/batch-memory: 53687091200

Langkah 2: Konfigurasikan resource Batch untuk kontainer sidecar

Tetapkan permintaan dan batas resource Batch untuk kontainer proxy sidecar yang disuntikkan dan kontainer istio-init di Konsol ASM.

  1. Masuk ke Konsol ASM.

  2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Di halaman Mesh Management, klik nama instans ASM target.

  4. Di panel navigasi kiri, pilih Data Plane Component Management > Sidecar Proxy Setting.

  5. Di halaman Sidecar Proxy Setting, klik tab global, lalu klik Resource Settings.

  6. Pilih Set ACK Resources That Can Be Dynamically Overcommitted for Sidecar Proxy dan konfigurasikan nilai resource. Tetapkan Resource Limits dan Required Resources berdasarkan kelas QoS workload Anda. Tabel berikut menunjukkan nilai contoh:

    Kelas QoSPanduan
    GuaranteedTetapkan Resource Limits dan Required Resources dengan nilai yang sama.
    Burstable atau BestEffortTetapkan Required Resources lebih rendah daripada Resource Limits. Panduan ini juga berlaku untuk resource biasa.
    KontainerPengaturanCPUMemori
    Configure Resources for Injected Sidecar Proxy (ACK Dynamically Overcommitted Resources)Resource Limits2000 millicores2048 MiB
    Required Resources200 millicores256 MiB
    Configure Resources for istio-init Container (ACK Dynamically Overcommitted Resources)Resource Limits1000 millicores1024 MiB
    Required Resources100 millicores128 MiB
  7. Klik Update Settings.

Langkah 3: Terapkan workload dengan resource Batch

Terapkan aplikasi contoh yang meminta resource Batch. Setiap Pod yang menggunakan resource Batch harus memiliki label koordinator.sh/qosClass: "BE" agar ack-koordinator menjadwalkannya sebagai konsumen BestEffort atas kapasitas yang dipulihkan.

  1. Buat file bernama demo.yaml dengan konten berikut:

       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: sleep
       spec:
         replicas: 1
         selector:
           matchLabels:
             app: sleep
         template:
           metadata:
             labels:
               app: sleep
               # Wajib. Menetapkan QoS BestEffort ke Pod.
               koordinator.sh/qosClass: "BE"
           spec:
             terminationGracePeriodSeconds: 0
             containers:
             - name: sleep
               image: curlimages/curl
               command: ["/bin/sleep", "infinity"]
               imagePullPolicy: IfNotPresent
               resources:
                 requests:
                   # 1 core (1000 millicores)
                   kubernetes.io/batch-cpu: "1k"
                   # 1 GiB
                   kubernetes.io/batch-memory: "1Gi"
                 limits:
                   kubernetes.io/batch-cpu: "1k"
                   kubernetes.io/batch-memory: "1Gi"
  2. Terapkan aplikasi:

       kubectl apply -f demo.yaml

Langkah 4 (opsional): Verifikasi batas resource

Setelah penerapan, pastikan batas resource di level cgroup sesuai dengan nilai yang Anda konfigurasikan.

  1. Masuk ke node tempat Pod berjalan dan periksa batas CPU. Output yang diharapkan:

       cat /sys/fs/cgroup/cpu,cpuacct/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/cpu.cfs_quota_us
       # 1 core = 100000 mikrodetik per periode CFS
       100000
  2. Periksa batas memori. Output yang diharapkan:

       cat /sys/fs/cgroup/memory/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/memory.limit_in_bytes
       # 1 GB = 1073741824 bytes
       1073741824

Jika kedua nilai tersebut sesuai dengan spesifikasi Deployment, maka batas resource Batch telah diterapkan.