Dalam kluster Kubernetes, beberapa pod mungkin diterapkan pada node yang sama untuk berbagi L3 cache (last level cache) dan Memory Bandwidth Allocation (MBA) yang disediakan oleh host. Hal ini dapat menyebabkan aplikasi bersaing untuk mendapatkan sumber daya dalam kondisi yang ketat. Kami menyarankan Anda mengaktifkan isolasi sumber daya untuk aplikasi dengan prioritas berbeda dengan mengontrol L3 cache dan menggunakan fitur MBA. Metode ini memastikan kualitas layanan (QoS) untuk aplikasi prioritas tinggi selama persaingan sumber daya.
Untuk lebih memahami dan secara efektif menggunakan fitur ini, kami sarankan Anda merujuk ke dokumentasi resmi Kubernetes berikut: Kelas QoS Pod dan Tetapkan sumber daya memori ke kontainer dan pod.
Ikhtisar
Untuk memanfaatkan sepenuhnya sumber daya komputasi, biasanya pod yang berbeda diterapkan pada node yang sama untuk berbagi L3 cache dan bandwidth memori. Jika Anda tidak mengaktifkan isolasi sumber daya, beban kerja dengan prioritas berbeda mungkin bersaing untuk mendapatkan sumber daya komputasi seperti L3 cache dan bandwidth memori. Akibatnya, jaminan sumber daya untuk tugas prioritas tinggi terganggu, dan QoS mereka menurun.
Resource Director Technology (RDT) mengaktifkan isolasi sumber daya untuk aplikasi dengan prioritas berbeda melalui ConfigMap. Anda dapat mendeklarasikan jumlah sumber daya L3 cache dan MBA yang tersedia di file YAML dari pod BestEffort (BE) untuk secara efektif memastikan QoS dari aplikasi sensitif-latensi (LS).
Prasyarat
Kluster dengan instance bare metal Elastic Compute Service (ECS) yang model CPU-nya mendukung fitur RDT telah dibuat. Untuk informasi lebih lanjut, lihat Ikhtisar ECS Bare Metal Instance dan intel-cmt-cat.
Komponen ack-koordinator telah diinstal dan versi komponen adalah 0.8.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara menginstal ack-koordinator, lihat ack-koordinator (FKA ack-slo-manager).
Tagihan
Tidak ada biaya yang dikenakan saat Anda menginstal atau menggunakan komponen ack-koordinator. Namun, biaya mungkin dikenakan dalam skenario berikut:
ack-koordinator adalah komponen non-managed yang menggunakan sumber daya node pekerja setelah diinstal. Anda dapat menentukan jumlah sumber daya yang diminta oleh setiap modul saat menginstal komponen tersebut.
Secara default, ack-koordinator mengekspos metrik pemantauan fitur seperti profil sumber daya dan penjadwalan terperinci sebagai metrik Prometheus. Jika Anda mengaktifkan metrik Prometheus untuk ack-koordinator dan menggunakan Managed Service for Prometheus, metrik ini dianggap sebagai metrik kustom dan biaya akan dikenakan untuk metrik ini. Biaya bergantung pada faktor-faktor seperti ukuran kluster Anda dan jumlah aplikasi. Sebelum mengaktifkan metrik Prometheus, kami sarankan Anda membaca topik Tagihan dari Managed Service for Prometheus untuk mempelajari tentang kuota gratis dan aturan tagihan metrik kustom. Untuk informasi lebih lanjut tentang cara memantau dan mengelola penggunaan sumber daya, lihat Kueri jumlah data observabel dan tagihan.
Langkah 1: Periksa apakah kernel node telah mengaktifkan RDT
Sebelum menggunakan L3 cache dan MBA untuk mengaktifkan isolasi sumber daya, Anda harus mengaktifkan fitur RDT dari kernel.
Jalankan perintah berikut untuk memeriksa apakah fitur RDT dari kernel telah diaktifkan:
cat /proc/cmdlineOutput yang diharapkan:
# Konten lain dihilangkan, contoh ini hanya menunjukkan bagian RDT dari field BOOT_IMAGE. BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mbaJika output mencakup opsi
l3catdanmba, fitur RDT telah diaktifkan. Jika tidak, lanjutkan ke langkah berikutnya.Aktifkan fitur RDT dari kernel.
Ubah file /etc/default/grub untuk menyertakan konfigurasi RDT di field
GRUB_CMDLINE_LINUX.# Konten lain dihilangkan, contoh ini hanya menunjukkan bagian RDT dari field GRUB_CMDLINE_LINUX. GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba"PentingPisahkan konfigurasi RDT baru dari pengaturan yang ada dengan spasi.
Jalankan perintah berikut untuk memperbarui file grub.cfg:
# Jalur file tergantung pada kondisi aktual. sudo grub2-mkconfig -o /boot/grub2/grub.cfgJalankan perintah berikut untuk me-restart node:
sudo systemctl reboot
Langkah 2: Gunakan fitur isolasi L3 cache dan MBA
Setelah fitur RDT dari kernel diaktifkan, Anda dapat mengaktifkan isolasi L3 cache dan MBA di tingkat kluster menggunakan ConfigMap. Ini memungkinkan Anda menetapkan alokasi sumber daya L3 cache dan MBA untuk pod kelas QoS yang berbeda, memberikan manajemen sumber daya yang fleksibel dan presisi. Setelah dikonfigurasi, Anda dapat menentukan tingkat QoS di file YAML pod untuk membatasi sumber daya L3 cache dan MBA yang tersedia.
Buat file configmap.yaml dengan template YAML berikut:
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: resource-qos-config: | { "clusterStrategy": { "beClass": { "resctrlQOS": { "enable": true # Atur ke true untuk mengaktifkan isolasi L3 cache dan MBA untuk pod tipe BE. } } } }Periksa apakah ConfigMap
ack-slo-configada di namespacekube-system.Jika ConfigMap ada: Kami sarankan Anda menjalankan perintah kubectl patch untuk memperbarui ConfigMap. Ini menghindari perubahan pengaturan lain di ConfigMap.
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"Jika ConfigMap tidak ada: Jalankan perintah berikut untuk membuat ConfigMap:
kubectl apply -f configmap.yaml
(Opsional) Untuk isolasi terperinci berdasarkan kelas QoS beban kerja, konfigurasikan parameter lanjutan berdasarkan template YAML berikut:
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: resource-qos-config: | { "clusterStrategy": { "lsClass": { "resctrlQOS": { "enable": true, "catRangeEndPercent": 100, "mbaPercent": 100 } }, "beClass": { "resctrlQOS": { "enable": true, "catRangeEndPercent": 30, "mbaPercent": 100 } } } }Tabel berikut menjelaskan parameter utama:
Parameter
Tipe
Nilai valid
Deskripsi
enableBoolean
truefalse
true: mengaktifkan isolasi L3 cache dan MBA untuk beban kerja di kluster.false: menonaktifkan isolasi L3 cache dan MBA untuk beban kerja di kluster.
catRangeEndPercentInt
[0, 100]
Persentase L3 cache yang dialokasikan untuk kelas QoS masing-masing. Unit: %. Nilai default untuk beban kerja kelas LS adalah
100. Nilai default untuk beban kerja kelas BE adalah30.mbaPercentInt
[0, 100]
Persentase MBA yang dapat digunakan oleh kelas QoS masing-masing. Unit: %. Anda harus menetapkan nilai menjadi kelipatan 10. Nilai default untuk beban kerja kelas LS dan BE adalah
100.Gunakan template YAML berikut untuk membuat file bernama pod-demo.yaml. File ini membatasi L3 cache dan bandwidth memori yang dapat digunakan oleh pod BE.
CatatanUntuk menerapkan konfigurasi ke beban kerja, seperti deployment, tetapkan anotasi yang sesuai untuk pod di field
template.metadata.apiVersion: v1 kind: Pod metadata: name: pod-demo labels: koordinator.sh/qosClass: 'BE' # Tetapkan kelas QoS pod menjadi 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"]Jalankan perintah berikut untuk menerapkan
pod-demo.yamldi kluster:kubectl apply -f pod-demo.yaml