Dalam beberapa kasus, Anda mungkin perlu menyebarkan beban kerja sensitif latensi (LS) dan beban kerja usaha terbaik (BE) pada node yang sama di kluster Kubernetes. Meskipun Kubernetes menggunakan permintaan CPU dan batas CPU untuk mengontrol jumlah sumber daya CPU yang dapat digunakan oleh pod, masih ada persaingan CPU di antara aplikasi dengan prioritas berbeda, yang dapat menurunkan kinerja aplikasi, terutama aplikasi dengan prioritas tinggi. Untuk memastikan pasokan CPU untuk aplikasi LS, disarankan untuk mengaktifkan fitur CPU QoS.
Untuk membantu Anda lebih memahami dan menggunakan fitur CPU QoS, disarankan untuk membaca topik-topik berikut di dokumentasi resmi Kubernetes: Kelas Kualitas Layanan Pod dan Tetapkan Sumber Daya Memori ke Kontainer dan Pod. Kami juga sarankan Anda membaca topik fitur identitas grup untuk mempelajari tentang fitur tersebut.
Mengapa CPU QoS?
Untuk sepenuhnya memanfaatkan sumber daya pada node dalam skenario kolokasi, sistem menyebarkan aplikasi LS dan BE pada node yang sama. Aplikasi LS memiliki kelas QoS yang lebih tinggi dibandingkan aplikasi BE. Meskipun Kubernetes menggunakan permintaan CPU dan batas CPU untuk mengontrol jumlah sumber daya CPU yang dapat digunakan oleh pod, persaingan CPU tetap ada di antara kontainer. Sebagai contoh, pod BE dan pod LS dapat berbagi core CPU atau vCore. Ketika beban pod BE meningkat, kinerja pod LS terganggu, sehingga meningkatkan latensi respons aplikasi yang menggunakan pod LS.
Untuk memesan sumber daya CPU untuk pod LS dan mencegah pod BE bersaing mendapatkan sumber daya, Anda dapat menggunakan fitur CPU QoS yang disediakan oleh komponen ack-koordinator. Fitur ini didasarkan pada Alibaba Cloud Linux. Komponen ack-koordinator memungkinkan Anda menggunakan fitur identitas grup untuk mengonfigurasi prioritas penjadwalan Linux untuk pod. Dengan mengatur prioritas pod LS menjadi tinggi dan prioritas pod BE menjadi rendah, pod LS diprioritaskan untuk menggunakan sumber daya CPU yang terbatas, memastikan kualitas layanan dari beban kerja LS.
Fitur CPU QoS memberikan manfaat berikut:
Latensi bangun tugas untuk beban kerja LS berkurang, meningkatkan kecepatan respons dan kinerja beban kerja.
Proses beban kerja LS tidak direbut ketika Anda membangunkan tugas untuk beban kerja BE.
Dalam skenario di mana pemrosesan multithreading simultan (SMT) digunakan, tugas untuk beban kerja BE dan LS tidak diproses secara paralel pada core CPU yang sama. Ini mencegah beban kerja BE bersaing untuk mendapatkan sumber daya melawan beban kerja LS dan memastikan pasokan CPU untuk beban kerja LS.
Prasyarat
Kluster Container Service for Kubernetes (ACK) yang memenuhi persyaratan berikut telah dibuat:
Versi Kubernetes: 1.18 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui kluster ACK, lihat Perbarui Kluster ACK secara Manual.
Sistem operasi: Alibaba Cloud Linux. Fitur identitas grup bergantung pada Alibaba Cloud Linux. Untuk informasi lebih lanjut tentang versi kernel yang diperlukan, lihat Fitur Identitas Grup.
CatatanJika Anda menggunakan sistem operasi lain, Anda dapat menggunakan fitur Penekanan CPU untuk membatasi penggunaan CPU pod BE. Untuk informasi lebih lanjut, lihat Aktifkan Penekanan CPU.
ack-koordinator 0.8.0 telah diinstal di kluster. Untuk informasi lebih lanjut, lihat ack-koordinator (sebelumnya dikenal sebagai ack-slo-manager).
Penagihan
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.
Secara default, ack-koordinator mengekspos metrik pemantauan fitur seperti profil sumber daya dan penjadwalan granular 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 tergantung pada faktor-faktor seperti ukuran kluster Anda dan jumlah aplikasi. Sebelum mengaktifkan metrik Prometheus, kami sarankan Anda membaca topik Penagihan dari Managed Service for Prometheus untuk mempelajari tentang kuota gratis dan aturan penagihan metrik kustom. Untuk informasi lebih lanjut tentang cara memantau dan mengelola penggunaan sumber daya, lihat Kueri jumlah data observabel dan tagihan.
Prosedur
Anda dapat menggunakan ConfigMap untuk mengaktifkan CPU QoS di kluster dan mengonfigurasi prioritas identitas grup CPU untuk pod LS dan BE. Anda dapat menggunakan fitur identitas grup untuk menentukan pengenal untuk setiap cgroup CPU. Saat kernel menjadwalkan tugas yang identitasnya dikonfigurasi, kernel memproses tugas tersebut berdasarkan prioritas tugas.
Setelah konfigurasi selesai, Anda dapat menentukan kelas CPU QoS pod dengan menambahkan label koordinator.sh/qosClass ke file YAML pod. Jika Anda tidak menambahkan label koordinator.sh/qosClass ke pod, ack-koordinator memilih kelas QoS asli Kubernetes. BE menunjukkan kelas QoS BestEffort dan LS menunjukkan kelas QoS Burstable atau Guaranteed.
Buat file bernama configmap.yaml dan salin konten berikut ke file tersebut. File ini digunakan untuk membuat ConfigMap yang memungkinkan Anda mengaktifkan fitur CPU QoS.
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: # Aktifkan fitur CPU QoS. resource-qos-config: | { "clusterStrategy": { "lsClass": { "cpuQOS": { "enable": true, "groupIdentity": 2 } }, "beClass": { "cpuQOS": { "enable": true, "groupIdentity": -1 } } } }Tentukan parameter
lsClassdanbeClassuntuk menetapkan kelas LS dan BE ke pod yang berbeda. BidangcpuQOSdigunakan untuk mengonfigurasi fitur CPU QoS. Tabel berikut menjelaskan parameter utama.Parameter
Tipe
Rentang nilai
Deskripsi
enableBoolean
true
false
true: mengaktifkan fitur CPU QoS untuk semua kontainer di kluster.false: menonaktifkan fitur CPU QoS untuk semua kontainer di kluster.
groupIdentityInt
[-1, 2]
Prioritas identitas grup CPU. Nilai
group identityyang lebih besar menunjukkan prioritas yang lebih tinggi dalam penjadwalan CPU. Untuk informasi lebih lanjut, lihat Fitur identitas grup.Nilai default untuk pod LS adalah
2dan nilai default untuk pod BE adalah-1. Nilai0menonaktifkan fitur identitas grup.Periksa apakah ConfigMap bernama
ack-slo-configada di namespace kube-system.Jika ConfigMap ack-slo-config ada, jalankan perintah kubectl patch untuk memperbarui ConfigMap. Ini menghindari perubahan pengaturan lain dalam ConfigMap.
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"Jika ConfigMap ack-slo-config tidak ada, jalankan perintah berikut untuk membuat ConfigMap:
kubectl apply -f configmap.yaml
Buat file bernama ls-pod-demo.yaml dan salin konten berikut ke file tersebut. File YAML menetapkan kelas LS ke pod. Kemudian, terapkan file YAML di kluster.
CatatanUntuk menerapkan konfigurasi ke beban kerja, seperti deployment, tetapkan anotasi yang sesuai untuk pod di bidang
template.metadata.apiVersion: v1 kind: Pod metadata: name: ls-pod-demo labels: koordinator.sh/qosClass: 'LS' # Tetapkan kelas QoS pod ke LS. 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 restartPolicy: Never schedulerName: default-schedulerkubectl apply -f ls-pod-demo.yamlJalankan perintah berikut untuk memeriksa apakah identitas grup CPU pod LS di control group (cgroup) node berlaku:
cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-pod1c20f2ad****.slice/cpu.bvt_warp_nsOutput yang diharapkan:
# Identitas grup pod LS adalah 2 (prioritas tinggi). 2Buat file bernama ls-pod-demo.yaml dan salin konten berikut ke file tersebut. File YAML menetapkan kelas BE ke pod. Kemudian, terapkan file YAML di kluster.
apiVersion: v1 kind: Pod metadata: name: be-pod-demo labels: koordinator.sh/qosClass: 'BE' # Tetapkan kelas QoS pod ke BE. spec: containers: - args: - '-c' - '1' - '--vm' - '1' command: - stress image: polinux/stress imagePullPolicy: Always name: stress restartPolicy: Always schedulerName: default-schedulerkubectl apply -f be-pod-demo.yamlJalankan perintah berikut untuk memeriksa apakah identitas grup CPU pod BE di cgroup node berlaku:
cat /sys/fs/cgroup/cpu/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod4b6e96c8****.slice/cpu.bvt_warp_nsOutput yang diharapkan:
# Identitas grup pod BE adalah -1 (prioritas rendah). -1Output menunjukkan bahwa identitas grup pod LS memiliki prioritas tinggi dan identitas grup pod BE memiliki prioritas rendah. Sumber daya CPU diutamakan dialokasikan ke pod LS untuk memastikan kualitas layanan.
FAQ
Apakah fitur CPU QoS yang diaktifkan berdasarkan versi sebelumnya dari protokol ack-slo-manager masih didukung setelah saya memutakhirkan dari ack-slo-manager ke ack-koordinator?
Pada versi sebelumnya (≤ 0.8.0) dari protokol ack-slo-manager, anotasi pod alibabacloud.com/qosClass digunakan untuk mengaktifkan CPU QoS.
ack-koordinator kompatibel dengan versi sebelumnya dari protokol ack-slo-manager. Anda dapat memutakhirkan dari ack-slo-manager ke ack-koordinator secara mulus dan secara bertahap mengubah protokol yang digunakan oleh pod ke koordinator.sh. ack-koordinator kompatibel dengan versi protokol sebelumnya hingga 30 Juli 2023. Kami sarankan Anda memutakhirkan parameter sumber daya dalam versi protokol sebelumnya ke versi terbaru.
Tabel berikut menjelaskan kompatibilitas antara versi berbeda dari ack-koordinator dan fitur CPU QoS.
Versi ack-koordinator | Protokol alibabacloud.com | Protokol koordinator.sh |
≥ 0.5.2 dan < 0.8.0 | ✓ | × |
≥ 0.8.0 | ✓ | ✓ |