Klien Container Network File System (CNFS) memungkinkan Anda mengakses data melalui beberapa koneksi, menyimpan metadata dalam cache, dan mendistribusikan penyimpanan data untuk meningkatkan kecepatan baca. Klien CNFS juga mendukung pemantauan performa dan kualitas layanan (QoS). Topik ini menjelaskan cara mengaktifkan fitur caching terdistribusi klien CNFS serta cara menggunakan fitur tersebut untuk meningkatkan kecepatan baca.
Prasyarat
Gunakan Alibaba Cloud Linux 2 dengan versi kernel 4.19.91-23 hingga 4.19.91-26. Fitur caching terdistribusi didukung pada Alibaba Cloud Linux 2.
Buat kluster Container Service for Kubernetes (ACK) yang menjalankan Kubernetes 1.20 atau lebih baru. Gunakan plug-in Container Storage Interface (CSI) sebagai plug-in volume. Untuk informasi lebih lanjut, lihat Buat kluster ACK yang dikelola.
Versi csi-plugin dan csi-provisioner adalah v1.22.11-abbb810e-aliyun atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui csi-plugin dan csi-provisioner, lihat Instal dan perbarui plug-in CSI.
Versi storage-operator adalah v1.22.86-041b094-aliyun atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui storage-operator, lihat Kelola komponen.
Pastikan klien kubectl terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Indikator kinerja utama fitur caching terdistribusi
Indikator | Skenario benchmarking① | Caching terdistribusi dinonaktifkan | Caching terdistribusi diaktifkan |
Kinerja baca dan tulis pada metadata | Durasi penelusuran satu juta direktori | 18 menit | < 60 detik |
Durasi pembuatan file berukuran 4 KB | 3.000 mikrodetik | < 200 mikrodetik | |
Durasi membaca file berukuran 4 KB untuk kedua kalinya | 400 mikrodetik | < 100 mikrodetik | |
Throughput baca dan tulis | Throughput baca dan tulis node tunggal② | 200 hingga 500 MB/s | > 800 MB/s |
Kinerja keseluruhan dalam skenario komprehensif | Durasi ekstraksi 5.000 gambar yang masing-masing berukuran 150 KB | 52 detik | Sekitar 15 detik |
Durasi pembuatan proyek Redis | 27 detik | Sekitar 21 detik |
Nilai yang disediakan dalam tabel di atas hanya nilai teoretis (nilai referensi). Nilai aktual bergantung pada lingkungan operasi Anda.
Catatan ①: Jenis Instance Elastic Compute Service (ECS) yang digunakan untuk menjalankan pengujian benchmark adalah ecs.hfg6.4xlarge. Data benchmark dapat bervariasi berdasarkan lingkungan.
Catatan ②: Bandwidth instance ECS dan jenis sistem file File Storage NAS (NAS) memengaruhi throughput baca dan tulis node.
Langkah 1: Mount sistem file NAS yang memiliki caching terdistribusi diaktifkan
Jalankan perintah berikut untuk membuat dan menerapkan ConfigMap csi-plugin di kluster serta instal klien CNFS:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cnfs-client-properties: | nas-efc=true nas-efc-cache: | enable=true container-number=3 volume-type=memory volume-size=15Gi node-selector: | cache=true EOFParameter
Deskripsi
cnfs-client-properties
Menentukan apakah akan mengaktifkan caching terdistribusi. Jika Anda menentukan
nas-efc=true, fitur caching terdistribusi diaktifkan untuk meningkatkan kecepatan baca.nfs-efc-cache.
container-number
Parameter ini diperlukan jika Anda mengaktifkan caching terdistribusi.
Parameter ini menentukan jumlah kontainer yang DaemonSet buat untuk fitur caching. Jika fitur caching mencapai batas performa, Anda dapat meningkatkan nilai parameter ini.
nfs-efc-cache.
volume-type
Parameter ini diperlukan jika Anda mengaktifkan caching terdistribusi.
Media yang digunakan oleh volume emptyDir pod yang dibuat oleh DaemonSet. Nilai valid:
diskmemory
nfs-efc-cache.
volume-size
Parameter ini diperlukan jika Anda mengaktifkan caching terdistribusi. Ukuran volume yang ingin Anda cache. Unit: GiB.
node-selector
Pod yang dibuat oleh DaemonSet untuk fitur caching terdistribusi dijadwalkan berdasarkan label. Jika Anda tidak menentukan parameter ini, DaemonSet dijadwalkan ke setiap node di kluster.
PentingSetelah menetapkan medium ke disk atau memory, sumber daya disk data atau memori node akan digunakan. Pastikan hal ini tidak memengaruhi beban kerja Anda secara negatif.
Dalam contoh ini, DaemonSet untuk fitur caching terdistribusi membuat tiga kontainer yang masing-masing dipasang dengan volume tmpfs berukuran 5 GiB. Kontainer hanya dapat dijadwalkan ke node yang memiliki label
cache=true.
Setelah ConfigMap dikonfigurasi, sistem secara otomatis menerapkan DaemonSet dan Layanan berdasarkan ConfigMap.
Jalankan perintah berikut untuk me-restart CSI-Plugin dan instal dependensi:
kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system delete podJalankan perintah berikut untuk mengaktifkan fitur caching terdistribusi klien CNFS:
Buat sistem file NAS yang dikelola oleh CNFS. StatefulSet memasang volume NAS yang dipercepat oleh CNFS sebagai volume yang diatur secara dinamis. Gambar busybox digunakan dalam contoh ini. Setelah pod diluncurkan, sistem menjalankan perintah
dduntuk menulis file berukuran 1 GB ke jalur/data. File tersebut digunakan untuk memeriksa apakah fitur caching terdistribusi berfungsi.Jalankan perintah berikut untuk memeriksa apakah volume NAS dengan caching terdistribusi diaktifkan telah dimount:
kubectl exec cnfs-nas-sts-0 -- mount | grep /dataOutput yang diharapkan:
xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)Target mount ditampilkan dalam output. Ini menunjukkan bahwa volume NAS dengan caching terdistribusi diaktifkan telah dimount.
Jalankan perintah berikut untuk memeriksa apakah DaemonSet untuk fitur caching terdistribusi telah diluncurkan:
kubectl get ds/cnfs-cache-ds -n kube-system -owideOutput yang diharapkan:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR cnfs-cache-ds 3 3 3 3 3 <none> 19d alinas-dadi-container registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420 app=cnfs-cache-dsDalam contoh ini, kluster berisi tiga node. Tiga pod yang dibuat oleh DaemonSet siap. Ini menunjukkan bahwa DaemonSet untuk fitur caching terdistribusi telah diluncurkan.
Jalankan perintah berikut untuk memeriksa apakah Layanan caching terdistribusi dapat menemukan pod backend:
kubectl get ep cnfs-cache-ds-service -n kube-system -owideOutput yang diharapkan:
NAME ENDPOINTS AGE cnfs-cache-ds-service 10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500 19dOutput menunjukkan bahwa Layanan telah menemukan pod backend. Endpoint pod adalah 10.19.1.130, 10.19.1.40, dan 10.19.1.66. Portnya adalah 6500.
Langkah 2: Verifikasi fitur caching
Jalankan perintah berikut untuk menyalin tmpfile di direktori
/datake direktori/dan periksa jumlah waktu yang dikonsumsi. Ukuran file adalah 1 GB.kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /Output yang diharapkan:
real 0m 5.66s user 0m 0.00s sys 0m 0.75sOutput menunjukkan bahwa jumlah waktu yang diperlukan untuk menyalin file adalah sekitar lima detik ketika fitur caching terdistribusi dinonaktifkan.
Jalankan perintah berikut beberapa kali untuk memeriksa jumlah waktu yang diperlukan untuk menyalin file:
kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /Output yang diharapkan:
real 0m 0.79s user 0m 0.00s sys 0m 0.58sOutput menunjukkan bahwa jumlah waktu yang diperlukan untuk menyalin file berkurang enam hingga tujuh kali jika file diakses lebih dari satu kali.