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 resource | Resource Key | Unit |
|---|---|---|
| Batch CPU | kubernetes.io/batch-cpu | Millicores |
| Batch memory | kubernetes.io/batch-memory | Bytes |
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.
Buat file bernama
configmap.yamldengan konten berikut. Tabel berikut menjelaskan parameter utama. Untuk detail semua item konfigurasi, lihat Aktifkan overcommitment resource dinamis.Parameter Deskripsi Nilai contoh enableMengaktifkan overcommitment resource pada node. truemetricAggregateDurationSecondsInterval dalam detik untuk agregasi metrik resource node. 60cpuReclaimThresholdPercentPersentase CPU yang dialokasikan yang dapat dipulihkan. 60memoryReclaimThresholdPercentPersentase memori yang dialokasikan yang dapat dipulihkan. 70memoryCalculatePolicyMetode perhitungan ketersediaan memori. usagemenggunakan 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" }Terapkan ConfigMap tersebut.
Jika ConfigMap
ack-slo-configsudah ada di namespacekube-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
Verifikasi resource Batch yang tersedia di sebuah node. Ganti
<node-name>dengan nama node sebenarnya. Di output, cari bagianallocatable. Jikakubernetes.io/batch-cpudankubernetes.io/batch-memorymuncul di bawahallocatable, maka ConfigMap overcommitment berfungsi dengan benar.kubectl get node <node-name> -o yamlstatus: 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.
Masuk ke Konsol ASM.
Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Di halaman Mesh Management, klik nama instans ASM target.
Di panel navigasi kiri, pilih Data Plane Component Management > Sidecar Proxy Setting.
Di halaman Sidecar Proxy Setting, klik tab global, lalu klik Resource Settings.
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 QoS Panduan Guaranteed Tetapkan Resource Limits dan Required Resources dengan nilai yang sama. Burstable atau BestEffort Tetapkan Required Resources lebih rendah daripada Resource Limits. Panduan ini juga berlaku untuk resource biasa. Kontainer Pengaturan CPU Memori Configure Resources for Injected Sidecar Proxy (ACK Dynamically Overcommitted Resources) Resource Limits 2000 millicores 2048 MiB Required Resources 200 millicores 256 MiB Configure Resources for istio-init Container (ACK Dynamically Overcommitted Resources) Resource Limits 1000 millicores 1024 MiB Required Resources 100 millicores 128 MiB 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.
Buat file bernama
demo.yamldengan 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"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.
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 100000Periksa 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.