CPFS AI Edition mendukung beberapa Pod memasang sistem file yang sama secara bersamaan dalam mode ReadWriteMany, sehingga memungkinkan akses bersama ke data pelatihan dan model. Topik ini menjelaskan cara memasang sistem file CPFS AI Edition sebagai volume penyimpanan statis di dalam kontainer menggunakan plugin ACK CSI.
Prasyarat
Kluster managed ACK Lingjun telah dibuat, menjalankan Kubernetes 1.26 atau versi lebih baru, dengan Alibaba Cloud Linux 3 sebagai sistem operasi node.
Sistem file CPFS AI Edition telah dibuat. Catat ID sistem file tersebut. Untuk informasi selengkapnya, lihat Create a CPFS AI Edition file system.
Komponen penyimpanan berikut telah dipasang di kluster ACK. Anda dapat memeriksa versinya di halaman Manajemen Komponen kluster atau Manage CSI components:
Component
Required version
csi-plugin / csi-provisioner
≥ v1.33.1
cnfs-nas-daemon
≥ 0.1.2
bmcpfs-csi-controller / bmcpfs-csi-node
Dikelola oleh ACK. Tidak perlu instalasi manual.
Jika sebuah Pod dijadwalkan ke node non-Lingjun atau node Lingjun di zona afinitas komputasi-penyimpanan yang berbeda, Anda harus terlebih dahulu membuat titik pemasangan VPC dan mencatat nama domain titik pemasangan tersebut (dalam format
cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com). VPC tempat titik pemasangan VPC berada harus sama dengan VPC kluster ACK. Untuk informasi selengkapnya, lihat Manage VPC mount points.
Pertimbangan
Saat memasang sistem file CPFS menggunakan VSC, node tempat Pod berjalan harus berada di zona afinitas komputasi-penyimpanan yang sama dengan instans sistem file CPFS AI Edition.
Jika menggunakan pemasangan berbasis kontainer CSI untuk CPFS, Anda harus memilih opsi untuk mendukung akses penyimpanan file berkinerja tinggi saat membuat kelompok node Lingjun.
Sebelum node Lingjun dinonaktifkan karena gangguan, Anda harus terlebih dahulu mengosongkan Pod dari node tersebut. Jika tidak, metadata kluster menjadi tidak konsisten, sehingga sumber daya Pod tetap tersisa dan tidak dapat diklaim ulang dengan benar.
Tidak didukung memasang subdirektori berbeda dari instans CPFS yang sama melalui beberapa PV dalam satu Pod. Karena keterbatasan driver dasar, konfigurasi ini menyebabkan Pod gagal memulai.
Disarankan hanya membuat satu PV/PVC untuk instans CPFS, lalu menggunakan bidang
subPathdalam konfigurasivolumeMountsPod untuk memasang subdirektori yang diperlukan secara terpisah.subPathdiimplementasikan berdasarkan mekanismebind mountringan dan tidak menimbulkan overhead kinerja tambahan.
Saluran akses dan penjadwalan
Dalam kluster ACK Lingjun, saluran jaringan yang digunakan Pod untuk mengakses CPFS AI Edition ditentukan oleh lokasi penjadwalan Pod. Plugin CSI secara otomatis memilih saluran optimal:
Lokasi penjadwalan Pod | Saluran akses | Skenario khas |
Node GPU Lingjun di zona afinitas komputasi-penyimpanan yang sama | VSC + RDMA (kinerja optimal) | Tugas pelatihan GPU |
Node Lingjun di zona afinitas komputasi-penyimpanan yang berbeda | Otomatis beralih ke titik pemasangan VPC (TCP) | Tugas pelatihan atau inferensi lintas zona |
Node non-Lingjun (kelompok node CPU) | Titik pemasangan VPC (TCP) | Pod CPU: pra-pemrosesan data, layanan inferensi, manajemen penjadwalan, dll. |
Untuk mengaktifkan pengalihan saluran otomatis, Anda harus mengonfigurasi mountpointAutoSwitch: "true" dan vpcMountTarget (nama domain titik pemasangan VPC) dalam volumeAttributes PV. Untuk detail konfigurasi, lihat Langkah 1: Buat PV dan PVC di bawah.
Untuk menentukan apakah node Lingjun dan sistem file CPFS berada di zona afinitas komputasi-penyimpanan yang sama, lihat Overview of mount access.
Langkah 1: Buat PV dan PVC
-
Simpan templat berikut sebagai
bmcpfs-pv-pvc.yaml, lalu ganti placeholder dengan ID sistem file Anda dan (jika diperlukan) titik pemasangan VPC.Parameter PV
Parameter
Description
Required
accessModesMode akses untuk PV.
Ya
capacity.storageKapasitas penyimpanan yang dideklarasikan. Tidak memengaruhi kapasitas aktual.
Ya
csi.driverJenis driver. Untuk CPFS for Lingjun, gunakan
bmcpfsplugin.csi.alibabacloud.com.Ya
csi.volumeHandleID sistem file CPFS for Lingjun.
Ya
csi.volumeAttributes.vpcMountTargetNama domain titik pemasangan VPC. Diperlukan untuk node non-Lingjun; abaikan jika Pod hanya dijadwalkan ke node Lingjun.
Bersyarat
csi.volumeAttributes.mountpointAutoSwitchMengaktifkan pengalihan otomatis antara titik pemasangan VSC dan VPC. Gunakan bersama
vpcMountTarget.Tidak
mountOptionsOpsi pemasangan.
Tidak
Parameter PVC
Parameter
Description
Required
accessModesMode akses yang diminta oleh PVC. Harus sesuai dengan PV.
Ya
resources.requests.storageKapasitas penyimpanan yang dialokasikan ke Pod. Tidak boleh melebihi kapasitas PV.
Ya
volumeModeMode pemasangan. Atur ke
Filesystem.Ya
volumeNameNama PV yang akan di-bind ke PVC ini.
Ya
apiVersion: v1 kind: PersistentVolume metadata: name: bmcpfs spec: accessModes: - ReadWriteMany capacity: storage: 10Ti claimRef: name: bmcpfs namespace: default csi: driver: bmcpfsplugin.csi.alibabacloud.com volumeAttributes: # Diperlukan jika Pod dijadwalkan ke node non-Lingjun atau pengalihan otomatis lintas zona diaktifkan. # Abaikan jika Pod hanya dijadwalkan ke node Lingjun. vpcMountTarget: cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com # Mengaktifkan pengalihan otomatis antara titik pemasangan VSC dan VPC. # Gunakan bersama vpcMountTarget. mountpointAutoSwitch: "true" # Ganti dengan ID sistem file CPFS for Lingjun Anda. volumeHandle: bmcpfs-***** mountOptions: [] --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bmcpfs namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 10Ti volumeMode: Filesystem volumeName: bmcpfs -
Terapkan konfigurasi.
kubectl apply -f bmcpfs-pv-pvc.yaml -
Konfirmasi bahwa PVC telah di-bind ke PV.
kubectl get pvc bmcpfsOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE bmcpfs Bound bmcpfs 10Ti RWX <unset> 51sSTATUSbernilaiBound, yang mengonfirmasi bahwa PVC telah di-bind ke PV.
Langkah 2: Buat aplikasi dan pasang CPFS
Skenario 1: Memasang seluruh sistem file CPFS
Gunakan pendekatan ini ketika semua kontainer membutuhkan akses penuh ke sistem file CPFS.
-
Simpan templat YAML berikut sebagai
cpfs-test.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: cpfs-test labels: app: cpfs-test spec: replicas: 2 selector: matchLabels: app: cpfs-test template: metadata: labels: app: cpfs-test spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-cpfs mountPath: /data volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: bmcpfs -
Buat Deployment.
kubectl create -f cpfs-test.yaml -
Verifikasi kedua Pod sedang berjalan.
kubectl get pod -l app=cpfs-testOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE cpfs-test-76b77d64b5-2hw96 1/1 Running 0 42s cpfs-test-76b77d64b5-dnwdx 1/1 Running 0 42s -
Verifikasi pemasangan volume CPFS di dalam Pod.
kubectl exec -it <pod-name> -- mount | grep /dataOutput yang diharapkan:
bindroot-f0a5c-******:cpfs-*******-vpc-****.cn-shanghai.cpfs.aliyuncs.com:/ on /data type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)Jenis pemasangan
fuse.aliyun-alinas-efcdi/datamengonfirmasi bahwa volume CPFS telah dipasang.
Skenario 2: Memasang subdirektori untuk isolasi data
Dalam skenario penyimpanan bersama seperti pengaturan multi-penyewa atau multitasking, beberapa kontainer dapat berbagi satu volume CPFS sekaligus mengisolasi data di direktori terpisah. Gunakan volumeMounts.subPath untuk memasang subdirektori berbeda ke kontainer berbeda dari PVC yang sama.
Jika direktorisubPath(misalnya,workspace/alpha) belum ada, direktori tersebut akan dibuat secara otomatis.
-
Simpan templat YAML berikut sebagai
pod.yaml. Pod ini menjalankan dua kontainer, masing-masing memasang subdirektori berbeda dari PVC yang sama (bmcpfs).apiVersion: v1 kind: Pod metadata: name: cpfs-subpath-demo-pod spec: containers: - name: task-alpha-container image: busybox:1.35 command: ["/bin/sh", "-c", "sleep 3600"] volumeMounts: - name: cpfs-storage mountPath: /data/workspace # Jalur pemasangan di dalam kontainer subPath: workspace/alpha # Hanya memasang subdirektori workspace/alpha - name: task-beta-container image: busybox:1.35 command: ["/bin/sh", "-c", "sleep 3600"] volumeMounts: - name: cpfs-storage mountPath: /data/workspace # Jalur pemasangan bisa identik di berbagai kontainer subPath: workspace/beta # Hanya memasang subdirektori workspace/beta volumes: - name: cpfs-storage persistentVolumeClaim: claimName: bmcpfs # Referensi ke PVC yang dibuat sebelumnya -
Deploy Pod.
kubectl apply -f pod.yaml -
Verifikasi pemasangan dan izin tulis untuk
task-alpha-container.-
Koneksikan ke kontainer.
kubectl exec -it cpfs-subpath-demo-pod -c task-alpha-container -- /bin/sh -
Konfirmasi bahwa volume CPFS telah dipasang.
df -hOutput yang diharapkan (direktori bersama dipasang di
/data/workspace):Filesystem Size Used Available Use% Mounted on ... 192.XX.XX.0:/share 10.0T 1.0G 10.0T 0% /data/workspace ...Entri filesystem di
/data/workspacemengonfirmasi bahwa subdirektori CPFS telah dipasang. -
Periksa struktur direktori induk.
ls -l /data/Output yang diharapkan:
total 4 drwxr-xr-x 2 root root 4096 Aug 15 10:00 workspace -
Tulis file uji dan keluar.
echo "hello from alpha" > /data/workspace/alpha.log exit
-
-
Verifikasi pemasangan dan isolasi data untuk
task-beta-container.-
Koneksikan ke kontainer.
kubectl exec -it cpfs-subpath-demo-pod -c task-beta-container -- /bin/sh -
Tulis file uji.
echo "hello from beta" > /data/workspace/beta.log -
Daftar file di titik pemasangan.
ls -l /data/workspace/Output yang diharapkan:
total 4 -rw-r--r-- 1 root root 16 Aug 15 10:05 beta.logbeta.logada, tetapialpha.logtidak ada, yang mengonfirmasi isolasi data antar kontainer.
-
Langkah 3: Verifikasi pemasangan
kubectl exec -it <pod-name> -- mount | grep /data
# Output yang diharapkan berisi fuse.aliyun-alinas-efc, yang menunjukkan protokol EFC + FUSE sedang digunakan