Batasi penggunaan cache L3 dan bandwidth memori untuk Pod BestEffort guna melindungi workload sensitif latensi pada node bersama.
Cara kerja
Intel Resource Director Technology (RDT) mempartisi resource perangkat keras per node. ack-koordinator membaca ConfigMap ack-slo-config dan menerapkan pengaturan grup resctrl berdasarkan kelas QoS setiap pod. Secara default, pod BestEffort (BE) mendapatkan 30% cache L3, sedangkan pod sensitif latensi (LS) mendapatkan 100%. Bandwidth memori secara default dialokasikan 100% untuk kedua kelas tersebut.
Prasyarat
Pastikan Anda telah memiliki:
-
Kluster ACK dengan setidaknya satu instans bare metal Elastic Compute Service (ECS) bare metal instance yang CPU-nya mendukung RDT (model yang didukung).
-
ack-koordinator versi 0.8.0 atau lebih baru telah diinstal.
Penagihan
ack-koordinator gratis. Biaya mungkin berlaku di dua area berikut:
-
Konsumsi resource node: ack-koordinator tidak dikelola dan berjalan pada node pekerja. Tentukan permintaan resource per modul saat instalasi untuk mengontrol overhead.
-
Metrik Prometheus: Jika Anda mengaktifkan metrik Prometheus untuk ack-koordinator dan menggunakan Managed Service for Prometheus, metrik tersebut dihitung sebagai metrik kustom dan dikenai biaya sesuai ketentuan. Biaya tergantung pada ukuran kluster dan jumlah aplikasi. Tinjau penagihan Managed Service for Prometheus sebelum mengaktifkan fitur ini, dan pantau penggunaan melalui Kueri data observabel dan tagihan.
Langkah 1: Periksa dan aktifkan RDT pada kernel node
-
Periksa apakah kernel telah mengaktifkan RDT:
cat /proc/cmdlineCari
l3catdanmbadalam output:# Bidang lain dihilangkan. Contoh ini hanya menampilkan bagian RDT dari bidang BOOT_IMAGE. BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mbaJika
l3catdanmbamuncul, RDT sudah diaktifkan — lanjutkan ke Langkah 2. -
Tambahkan opsi RDT ke parameter boot kernel. Di
/etc/default/grub, tambahkan baris berikut keGRUB_CMDLINE_LINUX:PentingPisahkan opsi RDT dari pengaturan yang sudah ada dengan spasi. Jangan menimpa parameter kernel lainnya.
# Bidang lain dihilangkan. Contoh ini hanya menampilkan bagian RDT dari bidang GRUB_CMDLINE_LINUX. GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba" -
Buat ulang konfigurasi GRUB:
# Jalur file dapat berbeda tergantung distribusi OS Anda. sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
Mulai ulang node:
sudo systemctl rebootSetelah node dimulai ulang, jalankan kembali
cat /proc/cmdlinedan pastikan bahwal3catdanmbamuncul.
Langkah 2: Konfigurasikan isolasi cache L3 dan MBA
Isolasi cache L3 dan MBA dikendalikan oleh ConfigMap ack-slo-config di namespace kube-system. Terapkan ConfigMap tersebut, lalu beri label pod sesuai kelas QoS-nya untuk mengaktifkan kebijakan ini.
Terapkan ConfigMap
Buat file configmap.yaml dengan konten berikut:
apiVersion: v1
kind: ConfigMap
metadata:
name: ack-slo-config
namespace: kube-system
data:
# resource-qos-config: mengonfigurasi fitur isolasi resource berbasis QoS.
# resctrlQOS: mengontrol isolasi Intel RDT (cache L3 dan MBA) per kelas QoS.
# enable: atur ke true untuk mengaktifkan isolasi cache L3 dan MBA untuk pod kelas ini.
resource-qos-config: |
{
"clusterStrategy": {
"beClass": {
"resctrlQOS": {
"enable": true
}
}
}
}
Kemudian terapkan ConfigMap tersebut:
-
Jika
ack-slo-configsudah ada dikube-system, patch ConfigMap tersebut agar pengaturan lain tetap terjaga:kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)" -
Jika ConfigMap belum ada, buat ConfigMap tersebut:
kubectl apply -f configmap.yaml
(Opsional) Sesuaikan persentase isolasi per kelas QoS
Untuk menyesuaikan alokasi cache L3 dan bandwidth memori per kelas QoS, perbarui ConfigMap dengan persentase eksplisit:
apiVersion: v1
kind: ConfigMap
metadata:
name: ack-slo-config
namespace: kube-system
data:
resource-qos-config: |
{
"clusterStrategy": {
"lsClass": {
"resctrlQOS": {
"enable": true,
"catRangeEndPercent": 100, # Pod LS: 100% cache L3 (default)
"mbaPercent": 100 # Pod LS: 100% bandwidth memori (default)
}
},
"beClass": {
"resctrlQOS": {
"enable": true,
"catRangeEndPercent": 30, # Pod BE: 30% cache L3 (default)
"mbaPercent": 100 # Pod BE: 100% bandwidth memori (default)
}
}
}
}
Parameter resctrlQOS:
| Parameter | Tipe | Nilai valid | Default (kelas LS) | Default (kelas BE) | Deskripsi |
|---|---|---|---|---|---|
enable |
Boolean | true / false |
— | — | Mengaktifkan atau menonaktifkan isolasi cache L3 dan MBA. |
catRangeEndPercent |
Int | 0–100 (%) | 100 | 30 | Persentase cache L3 yang dialokasikan untuk kelas QoS tersebut. |
mbaPercent |
Int | 0–100 (%), harus kelipatan 10 | 100 | 100 | Persentase bandwidth memori yang tersedia untuk kelas QoS tersebut. |
Beri label pod sesuai kelas QoS
Terapkan label koordinator.sh/qosClass pada pod yang ingin Anda isolasi. Contoh berikut membuat pod BE yang menjalankan workload stres memori:
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
labels:
koordinator.sh/qosClass: 'BE' # Menetapkan pod ini ke kelas QoS BE.
spec:
containers:
- name: pod-demo
image: polinux/stress
resources:
requests:
cpu: 1
memory: "50Mi"
limits:
cpu: 1
memory: "1Gi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "256M", "-c", "2", "--vm-hang", "1"]
koordinator.sh/qosClass pada bidang template.metadata, bukan pada level Deployment.Terapkan pod tersebut:
kubectl apply -f pod-demo.yaml