Container Service for Kubernetes (ACK) menyediakan penjadwalan beban kerja berbasis tujuan tingkat layanan (SLO) melalui komponen ack-koordinator. Anda dapat menggunakan penjadwalan beban kerja yang sadar SLO untuk menempatkan aplikasi layanan online dan aplikasi komputasi offline secara bersamaan. Topik ini menjelaskan cara menggunakan ack-koordinator untuk menempatkan layanan online dan aplikasi transkoding video secara bersamaan.
Skenario penggunaan
Anda dapat menempatkan layanan NGINX online dan aplikasi transkoding video yang menggunakan FFmpeg secara bersamaan. Ini memungkinkan Anda memanfaatkan sumber daya yang dialokasikan ke pod tetapi tidak digunakan pada node. Anda dapat mengaktifkan fitur isolasi sumber daya dari ack-koordinator untuk mengisolasi sumber daya yang dialokasikan untuk layanan NGINX online dari sumber daya yang dialokasikan untuk aplikasi transkoding video yang menggunakan FFmpeg. Dengan cara ini, kinerja layanan NGINX online dapat dijamin.
Arsitektur penyebaran penempatan bersama
Dalam contoh ini, layanan NGINX online dan aplikasi transkoding video yang menggunakan FFmpeg ditempatkan pada node yang sama. Kelas Kualitas Layanan (QoS) dari pod yang dibuat untuk layanan NGINX diatur ke sensitif-latensi (LS). Kelas QoS dari pod yang dibuat untuk aplikasi transkoding video diatur ke usaha-terbaik (BE). Dalam topik ini, layanan NGINX diterapkan dalam mode penempatan bersama yang berbeda untuk menguji kinerja layanan NGINX.
Fitur-fitur berikut digunakan dalam penempatan bersama:
Penggunaan ulang sumber daya: Fitur ini memungkinkan beban kerja BE untuk melakukan overcommit terhadap sumber daya yang dialokasikan ke beban kerja LS tetapi tidak digunakan. Ini meningkatkan pemanfaatan sumber daya kluster. Untuk informasi lebih lanjut, lihat Aktifkan Overcommit Sumber Daya Dinamis.
Isolasi sumber daya: Fitur ini menggunakan berbagai metode untuk membatasi sumber daya yang digunakan oleh beban kerja BE dan memprioritaskan permintaan sumber daya beban kerja LS. Untuk informasi lebih lanjut, lihat Aktifkan CPU QoS untuk Kontainer, Aktifkan Penekanan CPU, dan Aktifkan Isolasi Sumber Daya Berdasarkan Cache L3 dan MBA.
Persiapan
Mengatur lingkungan
Tambahkan dua node ke kluster ACK Pro. Salah satu node menjalankan layanan web NGINX dan aplikasi transkoding video yang menggunakan FFmpeg, serta berfungsi sebagai mesin yang diuji. Node lainnya memiliki alat wrk terinstal dan digunakan untuk melakukan uji stres dengan mengirimkan permintaan ke layanan NGINX. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Pro.
Untuk memaksimalkan manfaat yang diberikan oleh kemampuan penempatan bersama dari ack-koordinator, kami sarankan Anda menerapkan mesin yang diuji pada Elastic Compute Service (ECS) Bare Metal Instance dan menggunakan Alibaba Cloud Linux sebagai sistem operasi node.
Instal ack-koordinator (sebelumnya dikenal sebagai ack-slo-manager) dan aktifkan kebijakan penempatan bersama. Untuk informasi lebih lanjut, lihat Memulai. Dalam contoh ini, ack-koordinator versi 0.8.0 digunakan.
Menyebarkan layanan NGINX online
Sebarkan layanan NGINX online dan wrk.
Buat file YAML bernama ls-nginx.yaml dan salin konten berikut ke dalam file tersebut:
Jalankan perintah berikut untuk menerapkan layanan NGINX:
kubectl apply -f ls-nginx.yamlJalankan perintah berikut untuk menanyakan nama pod yang menjalankan layanan NGINX:
kubectl get pod -l app=nginx -o wideKeluaran yang Diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 43s 11.162.XXX.XXX cn-beijing.192.168.2.93 <none> <none>Keluaran menunjukkan bahwa pod berada dalam status
Running. Ini menunjukkan bahwa layanan NGINX berjalan sesuai harapan pada mesin yang diuji.Jalankan perintah berikut di node lain untuk menerapkan wrk:
wget -O wrk-4.2.0.tar.gz https://github.com/wg/wrk/archive/refs/tags/4.2.0.tar.gz && tar -xvf wrk-4.2.0.tar.gz cd wrk-4.2.0 && make && chmod +x ./wrk
Menyebarkan aplikasi transkoding video offline
Sebarkan aplikasi transkoding video offline yang menggunakan FFmpeg.
Buat file YAML bernama be-ffmpeg.yaml dan salin konten berikut ke dalam file tersebut:
Jalankan perintah berikut untuk menerapkan aplikasi transkoding video yang menggunakan FFmpeg:
kubectl apply -f be-ffmpeg.yamlJalankan perintah berikut untuk menanyakan status pod tempat aplikasi transkoding video yang menggunakan FFmpeg berjalan:
kubectl get pod -l app=ffmpeg -o wideKeluaran yang Diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES be-ffmpeg 1/1 Running 0 15s 11.162.XXX.XXX cn-beijing.192.168.2.93 <none> <none>Keluaran menunjukkan bahwa pod berada dalam status
Running. Ini menunjukkan bahwa aplikasi transkoding video yang menggunakan FFmpeg berjalan sesuai harapan pada mesin yang diuji.
Prosedur
Dalam topik ini, layanan online dan aplikasi offline diterapkan dalam tiga mode penempatan bersama untuk menguji kinerja aplikasi dan pemanfaatan sumber daya node dalam mode-mode ini. Tabel berikut membandingkan mode-mode ini dalam hal kinerja aplikasi dan pemanfaatan sumber daya node.
Mode Penyebaran | Deskripsi |
Mode Penyebaran Eksklusif Layanan Online (Kelompok Dasar) | Dalam mode ini, hanya layanan NGINX online yang diterapkan pada mesin yang diuji. Aplikasi transkoding video yang menggunakan FFmpeg tidak diterapkan pada mesin yang diuji. Gunakan wrk untuk mengirimkan permintaan ke layanan NGINX guna menguji kinerja dan pemanfaatan sumber daya node dalam mode ini. |
Mode Penempatan Bersama Default Kubernetes (Kelompok Kontrol) | Terapkan layanan NGINX online dan aplikasi transkoding video offline yang menggunakan FFmpeg pada mesin yang diuji. Kemudian, gunakan wrk untuk mengirimkan permintaan ke layanan NGINX. Dalam contoh ini, kelas QoS aplikasi transkoding video yang menggunakan FFmpeg diatur ke BE, dan permintaan serta batasan sumber daya tidak ditentukan dalam konfigurasi pod aplikasi transkoding video. Anda dapat mengubah jumlah proses untuk mengontrol pemanfaatan CPU node. Dalam contoh ini, pemanfaatan CPU node adalah 65%. Uji kinerja layanan NGINX dan pemanfaatan sumber daya node dalam mode ini. |
Mode Penempatan Bersama yang Sadar SLO dari ACK (Kelompok Eksperimen) | Dalam mode ini, layanan NGINX online dan aplikasi transkoding video offline yang menggunakan FFmpeg diterapkan pada mesin yang diuji. Gunakan wrk untuk mengirimkan permintaan ke layanan NGINX guna menguji kinerja dan pemanfaatan sumber daya node dalam mode ini. Dalam contoh ini, kelas QoS aplikasi transkoding video yang menggunakan FFmpeg diatur ke BE, dan sumber daya ekstensi diminta oleh pod aplikasi transkoding video. Untuk informasi lebih lanjut, lihat Aktifkan Overcommit Sumber Daya Dinamis. Fitur Aktifkan Penekanan CPU, Aktifkan CPU QoS untuk Kontainer, dan Isolasi Sumber Daya Berdasarkan Cache L3 dan MBA diaktifkan untuk mesin yang diuji. Uji kinerja layanan NGINX dan pemanfaatan sumber daya node dalam mode ini. |
Hasil pengujian
Metrik berikut digunakan untuk mengevaluasi kinerja layanan NGINX dan pemanfaatan sumber daya node dalam mode penempatan bersama yang berbeda:
Waktu Respons (RT)-persentil: RT umumnya digunakan untuk mengevaluasi kinerja aplikasi online. Nilai RT yang lebih rendah menunjukkan kinerja yang lebih tinggi. Anda dapat memperoleh nilai RT dalam keluaran wrk. Nilai RT menunjukkan jumlah waktu yang diperlukan layanan NGINX untuk memproses permintaan dari wrk. Misalnya, RT-P50 menunjukkan jumlah waktu maksimum yang diperlukan layanan NGINX untuk memproses 50% permintaan dari wrk. RT-P90 menunjukkan jumlah waktu maksimum yang diperlukan layanan NGINX untuk memproses 90% permintaan dari wrk.
Rata-rata Pemanfaatan CPU Node: Metrik ini menunjukkan pemanfaatan CPU aplikasi pada node dalam periode waktu tertentu. Anda dapat menjalankan perintah
kubectl top nodeuntuk menanyakan rata-rata pemanfaatan CPU node dalam mode penempatan bersama yang berbeda.
Tabel berikut menjelaskan metrik dalam mode yang berbeda.
Metrik | Kelompok dasar (Mode penyebaran eksklusif) | Kelompok kontrol (Mode penempatan bersama default) | Kelompok eksperimen (Mode penempatan bersama yang sadar SLO) |
NGINX RT-P90 (ms) | 0.533 | 0.574 (+7.7%) | 0.548 (2.8%) |
NGINX RT-P99 (ms) | 0.93 | 1.07 (+16%) | 0.96 (+3.2%) |
Rata-rata pemanfaatan CPU node | 29.6% | 65.1% | 64.8% |
Bandingkan metrik kelompok kontrol dengan metrik kelompok dasar: Rata-rata pemanfaatan CPU node meningkat dari 29.6% menjadi 65.1%. Nilai NGINX RT-P90 dan NGINX RT-P99 meningkat secara signifikan. Kurva RT memiliki ekor panjang.
Bandingkan metrik kelompok eksperimen dengan metrik kelompok dasar: Rata-rata pemanfaatan CPU node meningkat dari 28.5% menjadi 64.8%. Nilai NGINX RT-P90 dan NGINX RT-P99 meningkat sedikit.
Bandingkan metrik kelompok eksperimen dengan metrik kelompok kontrol: Rata-rata pemanfaatan CPU node serupa. Nilai NGINX RT-P90 dan NGINX RT-P99 menurun secara signifikan dan mendekati nilai NGINX RT-P90 dan NGINX RT-P99 kelompok dasar.
Hasil di atas menunjukkan bahwa mode penempatan bersama yang sadar SLO dari ACK dapat secara efektif meningkatkan pemanfaatan CPU node dan mengurangi gangguan kinerja ketika layanan NGINX online dan aplikasi transkoding video offline diterapkan pada node yang sama.
Menyebarkan aplikasi
Exclusive deployment mode of the online service
Terapkan hanya layanan online pada mesin yang diuji.
Lihat bagian Menyebarkan Layanan NGINX Online dari topik ini untuk menerapkan layanan NGINX online pada mesin yang diuji.
Gunakan wrk untuk mengirimkan permintaan ke layanan NGINX.
# Ganti node_ip dengan alamat IP mesin yang diuji. Port 8000 layanan NGINX diekspos ke mesin yang diuji. ./wrk -t6 -c54 -d60s --latency http://${node_ip}:8000/Jalankan perintah berikut untuk menanyakan rata-rata pemanfaatan CPU mesin yang diuji:
kubectl top nodeKeluaran yang Diharapkan:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% cn-beijing.192.168.2.93 29593m 29% xxxx xxxx cn-beijing.192.168.2.94 6874m 7% xxxx xxxxKeluaran menunjukkan bahwa rata-rata pemanfaatan CPU mesin yang diuji sekitar
29%.Setelah uji stres selesai, jalankan perintah berikut untuk menanyakan hasil pengujian dari wrk:
Untuk mendapatkan hasil pengujian yang akurat, kami sarankan Anda melakukan beberapa uji stres.
Running 1m test @ http://192.168.2.94:8000/Keluaran yang Diharapkan:
6 threads and 54 connections Thread Stats Avg Stdev Max +/- Stdev Latency 402.18us 1.07ms 59.56ms 99.83% Req/Sec 24.22k 1.12k 30.58k 74.15% Latency Distribution 50% 343.00us 75% 402.00us 90% 523.00us 99% 786.00us 8686569 requests in 1.00m, 6.88GB read Requests/sec: 144537.08 Transfer/sec: 117.16MBRT adalah metrik kunci untuk mengevaluasi kinerja layanan NGINX online dalam skenario yang berbeda. Dalam keluaran, bagian
Latency Distributionmenunjukkan distribusi nilai persentil RT. Misalnya,90% 523.00usmenunjukkan bahwa RT untuk memproses 90% permintaan adalah 523.00 mikrodetik. Ketika hanya layanan NGINX online yang diterapkan, RT-P50 adalah 343 mikrodetik, RT-P90 adalah 523 mikrodetik, dan RT-P99 adalah 786 mikrodetik.
Default colocation mode of Kubernetes
Tempatkan layanan NGINX online dan aplikasi transkoding video offline yang menggunakan FFmpeg pada mesin yang diuji. Kemudian, gunakan wrk untuk mengirimkan permintaan ke layanan NGINX. Lihat bagian Mode Penempatan Bersama yang Sadar SLO dari ACK dari topik ini untuk menempatkan aplikasi secara bersamaan. Anda harus mengonfigurasi parameter dan anotasi berdasarkan persyaratan dalam template YAML.
SLO-aware colocation mode of ACK
Atur kelas QoS aplikasi transkoding video yang menggunakan FFmpeg menjadi BE.
Lihat topik Memulai untuk mengaktifkan penempatan bersama yang sadar SLO.
Daftar berikut menjelaskan fitur-fitur yang terkait dengan penempatan bersama yang sadar SLO:
Aktifkan Overcommit Sumber Daya Dinamis: Setelah Anda mengaktifkan fitur ini, gunakan konfigurasi default. Fitur ini memungkinkan sistem untuk melakukan overcommit terhadap sumber daya yang dialokasikan ke pod tetapi tidak digunakan pada node, lalu menjadwalkan sumber daya yang diovercommit ke pod BE.
Aktifkan Penekanan CPU: Setelah Anda mengaktifkan fitur ini, atur parameter
cpuSuppressThresholdPercentmenjadi65dan gunakan pengaturan default untuk konfigurasi lainnya. Fitur ini dapat membatasi penggunaan CPU pod BE ketika pemanfaatan CPU node melebihi 65%. Ini memastikan kinerja pod LS.Aktifkan CPU QoS untuk Kontainer: Setelah Anda mengaktifkan fitur ini, gunakan konfigurasi default. Fitur ini memungkinkan Anda mengaktifkan kemampuan CPU Identity dari Alibaba Cloud Linux. Dengan cara ini, pod LS diprioritaskan daripada pod BE selama penjadwalan CPU. Ini mencegah pod BE memengaruhi pod LS ketika Simultaneous Multithreading (SMT) digunakan untuk menjalankan utas kedua pod secara bersamaan.
Aktifkan Isolasi Sumber Daya Berdasarkan Cache L3 dan MBA: Setelah Anda mengaktifkan fitur ini, gunakan konfigurasi default. Fitur ini memungkinkan Anda mengisolasi cache L3 (last level cache) dan bandwidth memori pada instance ECS Bare Metal. Dengan cara ini, pod LS diprioritaskan untuk menggunakan cache L3 dan bandwidth memori.
PentingFitur CPU QoS hanya dapat diaktifkan ketika Alibaba Cloud Linux digunakan sebagai OS node.
Isolasi cache L3 dan bandwidth memori hanya dapat diaktifkan ketika node diterapkan pada instance ECS Bare Metal.
Lihat bagian Menyebarkan Layanan NGINX Online dari topik ini untuk menerapkan aplikasi NGINX online pada mesin yang diuji.
Buat file YAML bernama be-ffmpeg.yaml dan salin konten berikut ke dalam file tersebut:
Jalankan perintah berikut untuk menerapkan aplikasi transkoding video yang menggunakan FFmpeg:
kubectl apply -f besteffort-ffmpeg.yamlJalankan perintah berikut untuk menanyakan status pod yang dibuat untuk cert-manager:
kubectl get pod -l app=ffmpeg -o wideKeluaran yang Diharapkan:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES besteffort-ffmpeg 1/1 Running 0 15s 11.162.XXX.XXX cn-beijing.192.168.2.93 <none> <none>Jalankan perintah berikut untuk mengirimkan permintaan ke layanan NGINX menggunakan wrk:
# Ganti node_ip dengan alamat IP mesin yang diuji. Port 8000 layanan NGINX diekspos ke mesin yang diuji. ./wrk -t6 -c54 -d60s --latency http://${node_ip}:8000/Jalankan perintah berikut untuk menanyakan pemanfaatan CPU mesin yang diuji:
kubectl top nodeKeluaran yang Diharapkan:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% cn-beijing.192.168.2.93 65424m 63% xxxx xxxx cn-beijing.192.168.2.94 7040m 7% xxxx xxxxKeluaran menunjukkan bahwa pemanfaatan CPU mesin yang diuji sekitar
63%.Setelah uji stres selesai, jalankan perintah berikut untuk mencetak hasil pengujian dari wrk:
Untuk informasi lebih lanjut tentang hasil pengujian, lihat bagian Hasil Pengujian dari topik ini.
Untuk informasi lebih lanjut tentang penempatan bersama berbagai jenis beban kerja, lihat topik-topik berikut:
Pertanyaan Umum
Apa yang harus saya lakukan jika hasil uji stres yang dikembalikan oleh wrk menampilkan "Socket errors: connect 54,"?
Problem description
Hasil uji stres yang dikembalikan oleh wrk menampilkan Socket errors: connect 54,. Koneksi antara klien wrk dan server NGINX gagal dibuat. Akibatnya, uji stres gagal.
Cause
Kesalahan ini terjadi ketika jumlah koneksi klien melebihi batas atas. Akibatnya, klien gagal membuat koneksi ke server NGINX.
Solution
Untuk mencegah kesalahan ini, periksa pengaturan koneksi TCP pada mesin uji stres dan aktifkan fitur penggunaan ulang koneksi TCP.
Masuk ke mesin uji stres dan jalankan perintah berikut untuk memeriksa apakah penggunaan ulang koneksi TCP diaktifkan:
sudo sysctl -n net.ipv4.tcp_tw_reuseJika
0atau2dikembalikan, fitur penggunaan ulang koneksi TCP dinonaktifkan.Jalankan perintah berikut untuk mengaktifkan fitur penggunaan ulang koneksi TCP:
sudo sysctl -w net.ipv4.tcp_tw_reuse=1Gunakan wrk untuk memulai uji stres lainnya.
Jika hasil uji stres tidak menampilkan
Socket errors: connect 54, ..., uji stres berhasil.
Jalankan perintah-perintah di atas hanya pada mesin uji stres. Anda tidak perlu mengonfigurasi mesin yang diuji. Setelah pengujian selesai, jalankan perintah sysctl -w net.ipv4.tcp_tw_reuse untuk menonaktifkan fitur penggunaan ulang koneksi TCP agar layanan Anda tidak terpengaruh oleh fitur tersebut.