Elastic File Client (EFC) meningkatkan kinerja Penyimpanan File NAS (Network Attached Storage) dengan caching terdistribusi untuk mempercepat akses. EFC mendukung akses data paralel berskala besar dan konkurensi tinggi, menjadikannya ideal untuk aplikasi berbasis kontainer yang intensif data seperti analitik big data, pelatihan AI, dan beban kerja inferensi. Dibandingkan dengan protokol tradisional Network File System (NFS), EFC memberikan peningkatan signifikan dalam kinerja I/O dan latensi lebih rendah. Topik ini menjelaskan cara memasang sistem file NAS menggunakan klien EFC melalui Container Network File System (CNFS).
Ikhtisar EFC
EFC adalah klien POSIX-compliant berbasis ruang pengguna dari Alibaba Cloud yang dibangun di atas Filesystem in Userspace (FUSE). EFC menggantikan klien NFS mode kernel tradisional serta menawarkan peningkatan kinerja, keandalan, dan efisiensi operasional. Kemampuan utamanya meliputi:
Akses multi-koneksi
Caching metadata dan data
Caching baca-saja terdistribusi
Pemantauan terintegrasi melalui Managed Service for Prometheus
Dibandingkan dengan klien NFS mode kernel dan klien FUSE open-source lainnya, klien EFC menawarkan keunggulan berikut:
Konsistensi data kuat
Diimplementasikan untuk file dan direktori melalui mekanisme kunci terdistribusi yang sangat konsisten. Memastikan:
File yang ditulis segera terlihat oleh klien lain
Sinkronisasi instan file baru di semua klien
Manajemen data multi-node disederhanakan
Caching baca-tulis pada node tunggal
Mengoptimalkan logika caching FUSE dengan menggunakan sejumlah kecil memori node komputasi untuk menyimpan cache data, memberikan:
Throughput ditingkatkan untuk file kecil
Lebih dari 50% peningkatan kinerja I/O dibandingkan klien NFS tradisional
Caching baca-saja terdistribusi
Membangun pool cache terdistribusi yang dapat diskalakan otomatis dan bebas O&M menggunakan memori di beberapa node.
Pra-ambil file kecil
Mengidentifikasi dan mempramuat direktori dan file panas secara otomatis untuk mengurangi overhead penarikan data.
Peningkatan panas dan failover
Pembaruan klien tanpa restart aplikasi
Failover otomatis selama kegagalan klien, tanpa gangguan layanan
Prasyarat
Sebelum menggunakan EFC, pastikan hal-hal berikut:
Add-on cnfs-nas-daemon terpasang di kluster Anda. Flag
AlinasMountProxy=truetelah ditambahkan di FeatureGate dari csi-plugin. Untuk detailnya, lihat Kelola cnfs-nas-daemon.OS node adalah Alibaba Cloud Linux 3 atau ContainerOS, dengan versi kernel 5.10.134-17.2 atau lebih baru.
PentingNode yang tidak memenuhi persyaratan ini akan secara otomatis jatuh kembali ke protokol NFS untuk pemasangan.
(Opsional) Terapkan cache terdistribusi CNFS-EFC
Untuk mengaktifkan kemampuan cache terdistribusi EFC, terapkan plugin cache terdistribusi CNFS-EFC.
Buat ConfigMap untuk csi-plugin untuk menerapkan plugin cache terdistribusi CNFS-EFC.
Setelah ConfigMap diterapkan, sistem secara otomatis menyediakan DaemonSet yang di-cache dan Layanan terkait berdasarkan ConfigMap.
Simpan template YAML berikut sebagai
csi-configmap.yaml.DaemonSet membuat pod pada node dengan label
cache=true. Setiap pod berisi tiga kontainer dan memasang volume tmpfs 15 GiB (berbasis memori). Modifikasi konfigurasi parameter sesuai kebutuhan.apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: nas-efc-cache: | enable=true container-number=3 volume-type=memory volume-size=15Gi node-selector: | cache=trueParameter
Deskripsi
nfs-efc-cacheenableAtur parameter ini ke
trueuntuk mengaktifkan caching terdistribusi.container-numberJumlah kontainer per pod DaemonSet yang di-cache. Tingkatkan parameter ini ketika terjadi hambatan kinerja cache.
volume-typeMedia penyimpanan yang digunakan oleh volume EmptyDir yang dipasang ke pod cache.
diskmemory
PentingPastikan penggunaan sumber daya pada node tidak memengaruhi beban kerja produksi.
volume-sizeUkuran volume yang dialokasikan per pod cache (unit: GiB).
node-selectorLabel yang digunakan untuk menjadwalkan DaemonSet cache. Jika tidak diatur, DaemonSet berjalan di semua node.
Jalankan perintah berikut untuk menerapkan ConfigMap:
kubectl apply -f csi-configmap.yaml
Verifikasi status DaemonSet cache terdistribusi:
kubectl get ds/cnfs-cache-ds -n kube-system -o wideOutput yang diharapkan:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR cnfs-cache-ds 2 2 2 2 2 cache=true 13m alinas-dadi-container,alinas-dadi-container1,alinas-dadi-container2 registry-cn-hangzhou.ack.aliyuncs.com/acs/nas-cache:20220420,registry-cn-hangzhou.ack.aliyuncs.com/acs/nas-cache:20220420,registry-cn-hangzhou.ack.aliyuncs.com/acs/nas-cache:20220420 app=cnfs-cache-dsDalam output sampel ini, kluster memiliki dua node dengan label
cache=true, dan dua pod di DaemonSet berada dalam kondisi siap, menunjukkan bahwa DaemonSet cache terdistribusi telah dimulai.Verifikasi penemuan layanan untuk Layanan cache terdistribusi:
kubectl get ep cnfs-cache-ds-service -n kube-system -o wideOutput yang diharapkan:
NAME ENDPOINTS AGE cnfs-cache-ds-service 192.168.3.217:6500,192.168.5.247:6500,192.168.3.217:6502 + 3 more... 2d3hOutput sampel menunjukkan bahwa Layanan telah menemukan titik akhir pod cache backend.
Konfigurasikan CNFS untuk memasang NAS menggunakan klien EFC
Buat CNFS dan tentukan penggunaan klien EFC.
Simpan template YAML berikut sebagai
cnfs-efc.yaml.Contoh ini menunjukkan pengaktifan klien EFC saat mengonfigurasi sistem file NAS yang ada melalui CNFS. Untuk sistem file NAS baru yang dibuat melalui CNFS, tambahkan
useClient: EFCClientdi bagianparametersdari sumber dayaContainerNetworkFileSystemuntuk mengaktifkan klien EFC. Untuk detailnya, lihat Gunakan CNFS untuk mengelola sistem file NAS (disarankan).apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-efc-test spec: description: "cnfs" type: nas reclaimPolicy: Retain parameters: server: 17f7e4****-h****.cn-beijing.nas.aliyuncs.com useClient: EFCClientParameter
Deskripsi
descriptionDeskripsi sistem file.
typeTipe volume yang akan dibuat.
reclaimPolicyKebijakan pengambilalihan. Hanya kebijakan
Retainyang didukung. Menghapus CNFS tidak akan menghapus sistem file NAS.parametersserverAlamat titik pemasangan. Titik pemasangan harus memenuhi persyaratan berikut:
VPC dari titik pemasangan harus sama dengan VPC yang digunakan oleh pod. Jika tidak, pemasangan akan gagal.
Kami merekomendasikan menggunakan vSwitch yang sama untuk titik pemasangan dan pod untuk performa optimal.
Status titik pemasangan harus Ready.
Jika titik pemasangan yang ada tidak memenuhi persyaratan ini, buat yang baru.
useClientAtur parameter ini ke
EFCClientuntuk mengaktifkan klien EFC.Jalankan perintah berikut untuk membuat CNFS:
kubectl create -f cnfs-efc.yaml
Gunakan CNFS untuk membuat volume:
kubectl create -f cnfs-pv-pvc.yamlSimpan template YAML berikut sebagai
cnfs-pv-pvc.yaml.Jika cache terdistribusi CNFS-EFC diterapkan di kluster, konfigurasikan EFC untuk mengaktifkan kemampuan caching dan pra-ambil melalui
mountOptions. Jika tidak diterapkan, hapus konfigurasimountOptionsdari contoh.apiVersion: v1 kind: PersistentVolume metadata: name: efc-pv spec: accessModes: - ReadWriteMany capacity: storage: 50Gi claimRef: name: efc-pvc namespace: default csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: containerNetworkFileSystem: cnfs-efc-test path: / volumeHandle: efc-pv mountOptions: - g_tier_EnableClusterCache=true # Konfigurasi caching terdistribusi saat memasang volume. - g_tier_EnableClusterCachePrefetch=true # Aktifkan pra-ambil saat memasang volume. volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: efc-pvc namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: "" volumeMode: Filesystem volumeName: efc-pv
Buat beban kerja dan pasang NAS
Buat Deployment dan pasang sistem file NAS ke dalamnya:
kubectl create -f cnfs-deployment.yamlSimpan template YAML berikut sebagai
cnfs-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: efc-test namespace: default spec: replicas: 1 selector: matchLabels: app: efc-test template: metadata: labels: app: efc-test spec: containers: - command: - sh - -c - | sleep infinity image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest name: test volumeMounts: - mountPath: /mnt name: pvc volumes: - name: pvc persistentVolumeClaim: claimName: efc-pvcPeriksa status pod di Deployment:
kubectl get pod -l app=efc-testOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE efc-test-f545b86d6-spr7p 1/1 Running 0 29mSetelah pod mencapai status Running, verifikasi titik pemasangan EFC di pod:
kubectl exec <pod-name> -- mount -t fuse.aliyun-alinas-efcOutput yang diharapkan:
bindroot-3889a-8TzEY5mc:3d2804****-w****.cn-shanghai.nas.aliyuncs.com:/ on /mnt type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)