Gunakan volume dinamis untuk menyediakan penyimpanan CPFS for Lingjun sesuai permintaan tanpa perlu mengelola PV secara manual. Beberapa aplikasi dapat membaca dan menulis secara paralel, sehingga cocok untuk beban kerja pelatihan AI dan analitik data besar yang perlu berbagi kode, file konfigurasi, serta hasil komputasi.
Batasan
Pelanggaran terhadap batasan ini dapat menyebabkan kegagalan pemasangan (mount) atau kondisi kluster yang tidak dapat dipulihkan.
-
Wajib berada di hpn-zone yang sama untuk pemasangan VSC: Node pod harus berada di hpn-zone yang sama dengan sistem file CPFS for Lingjun.
-
Inisialisasi node: Node Lingjun harus dikaitkan dengan sistem file CPFS for Lingjun saat inisialisasi. Mengabaikan langkah ini menyebabkan kegagalan mount CSI.
-
Satu sistem file per pod: Jangan memasang beberapa volume dari sistem file CPFS for Lingjun yang sama dalam satu pod (misalnya, beberapa PV dengan
bmcpfsIdyang sama). Protokol native tidak mendukung pemasangan sistem file yang sama berkali-kali dalam satu pod, bahkan ke subdirektori yang berbeda sekalipun. -
Kosongkan pod sebelum mengambil node offline: Kosongkan semua pod dari node Lingjun yang gagal sebelum mengambilnya offline. Mengabaikan langkah ini meninggalkan sumber daya pod yang tidak dapat dipulihkan dan metadata kluster yang tidak konsisten.
Prasyarat
Pastikan Anda telah memiliki:
-
Versi kluster 1.26 atau lebih baru (panduan peningkatan).
-
Node yang menjalankan Alibaba Cloud Linux 3.
-
Add-on penyimpanan berikut pada versi minimumnya. Instal atau tingkatkan melalui halaman Add-ons.
Komponen Versi minimum Add-on CSI (csi-plugin dan csi-provisioner) v1.33.1 add-on cnfs-nas-daemon 0.1.2 add-on bmcpfs-csi (bmcpfs-csi-controller pada lapisan kontrol yang dikelola ACK dan bmcpfs-csi-node yang diterapkan sebagai DaemonSet pada node kluster) 1.35.1
Konfigurasikan sumber daya cnfs-nas-daemon
cnfs-nas-daemon mengelola proses Elastic File Client (EFC) dan secara langsung memengaruhi kinerja penyimpanan. Konfigurasikan sumber dayanya melalui halaman Add-ons:
-
CPU: 0,5 core per 1 Gb/s bandwidth, ditambah 1 core untuk manajemen metadata. Contoh: NIC 100 Gb/s →
100 × 0,5 + 1 = 51core. -
Memori: 15% dari total memori node. CPFS for Lingjun menggunakan FUSE, sehingga caching data dan metadata file sama-sama mengonsumsi memori.
Sesuaikan batas sumber daya berdasarkan beban kerja aktual.
cnfs-nas-daemon menggunakan strategi pembaruan OnDelete. Setelah mengubah pengaturan di halaman Add-ons, hapus secara manual pod cnfs-nas-daemon di setiap node agar perubahan diterapkan. Lakukan hal ini selama jam sepi.
-
Node tanpa dukungan hot upgrade: Menyebabkan interupsi perangkat keras. Pod aplikasi gagal dan harus dihapus secara manual, lalu mulai ulang dan pulih secara otomatis.
-
Node dengan dukungan hot upgrade: Pod pulih secara otomatis. Hot upgrade memerlukan: kernel 5.10.134-18+, bmcpfs-csi-controller dan bmcpfs-csi-plugin 1.35.1+, serta cnfs-nas-daemon versi 0.1.9-compatible.1+.
Langkah 1: Buat sistem file CPFS
-
Buat sistem file CPFS for Lingjun dan catat ID sistem filenya.
-
(Opsional) Untuk memasang pada node non-Lingjun, buat titik pemasangan VPC di VPC yang sama dengan node kluster Anda. Catat nama domain titik pemasangan tersebut (format:
cpfs-*-vpc-*.<Region>.cpfs.aliyuncs.com).Jika semua pod berjalan di node Lingjun, pemasangan VSC (Virtual Storage Controller) berlaku secara default. Lewati langkah ini.
Tinjau batasan CPFS for Lingjun sebelum melanjutkan.
Langkah 2: Buat StorageClass
StorageClass menentukan parameter provisioning seperti ID sistem file dan kebijakan reclaim.
-
Buat
sc.yaml:Parameter Wajib Deskripsi bmcpfsIdYa ID sistem file CPFS for Lingjun. Format: bmcpfs-xxxxxxxxxataucpfs-xxxxxxxxx.pathTidak Subdirektori dalam sistem file. Volume dipasang di {path}/{volumeName}/. Nilai default:/{volumeName}/.allowVolumeExpansionTidak Parameter cadangan. Versi saat ini tidak mendukung ekspansi dinamis. reclaimPolicyTidak Delete(default): menghapus fileset backend saat PVC dihapus.Retain: menyimpan fileset; perlu pembersihan manual. GunakanRetaindi lingkungan produksi.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-bmcpfs-test provisioner: bmcpfsplugin.csi.alibabacloud.com parameters: # Wajib: ID sistem file CPFS for Lingjun (format: bmcpfs-xxxxxxxxx atau cpfs-xxxxxxxxx) bmcpfsId: bmcpfs-29000z8xz3lf5nj***** # Opsional: subdirektori dalam sistem file; volume dibuat di bawah {path}/{volumeName}/ # path: "/shared" # Parameter cadangan — versi saat ini tidak mendukung ekspansi dinamis allowVolumeExpansion: true # Delete (default): secara otomatis menghapus fileset saat PVC dihapus # Retain (disarankan untuk produksi): menyimpan fileset; Anda harus membersihkan secara manual reclaimPolicy: Delete -
Terapkan StorageClass:
kubectl apply -f sc.yamlOutput yang diharapkan:
storageclass.storage.k8s.io/alicloud-bmcpfs-test created
Langkah 3: Buat PVC
PVC mereferensikan StorageClass untuk meminta penyimpanan yang disediakan secara dinamis.
-
Buat
pvc.yaml:Parameter Deskripsi accessModesReadWriteManysaja. Memungkinkan akses multi-pod secara konkuren.storageKapasitas penyimpanan yang diminta. Mendukung satuan seperti Gi dan Ti. volumeModeHanya Filesystemyang didukung.storageClassNameNama StorageClass. Memicu pembuatan volume dinamis. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bmcpfs-vsc namespace: default spec: accessModes: - ReadWriteMany # Mendukung pembacaan dan penulisan konkuren di beberapa pod resources: requests: storage: 10Ti # Mendukung penyimpanan berkapasitas besar (tingkat Ti) volumeMode: Filesystem # Hanya Filesystem yang didukung storageClassName: alicloud-bmcpfs-test # Harus sesuai dengan StorageClass yang dibuat di Langkah 2 -
Terapkan PVC:
kubectl apply -f pvc.yaml -
Verifikasi bahwa PVC telah terikat (bound):
kubectl get pvc bmcpfs-vsc -n defaultOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE bmcpfs-vsc Bound pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 10Ti RWX alicloud-bmcpfs-test 30sSaat
STATUSbernilaiBound, PV dibuat secara otomatis. Konfirmasi provisioning:kubectl describe pvc bmcpfs-vsc -n defaultPeriksa
Eventsuntuk pesanProvisioning succeeded.
Langkah 4: Terapkan workload dan pasang PVC
Penyebaran (Deployment) berikut menjalankan tiga replika yang berbagi satu volume CPFS for Lingjun.
-
Buat
deploy.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: cpfs-shared-example spec: replicas: 3 # Tiga replika memverifikasi bahwa penyimpanan bersama berfungsi di beberapa pod selector: matchLabels: app: cpfs-shared-app template: metadata: labels: app: cpfs-shared-app spec: tolerations: - key: node-role.alibabacloud.com/lingjun operator: Exists effect: NoSchedule # Opsional: untuk mematok semua pod ke node tertentu, hapus komentar dan atur nama node # nodeName: cn-hangzhou.10.XX.XX.226 containers: - name: app-container image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: pvc-cpfs mountPath: /data # Volume bersama dipasang di /data di dalam kontainer lifecycle: postStart: exec: command: - /bin/sh - -c - > echo "Data written by $(hostname)" > /data/$(hostname).txt && echo "Deployment is running, check shared data in /data." && sleep 3600 volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: bmcpfs-vsc # Merujuk ke PVC yang dibuat di Langkah 3 -
Terapkan Penyebaran:
kubectl apply -f deploy.yamlOutput yang diharapkan:
deployment.apps/cpfs-shared-example created
Bersihkan sumber daya
Hapus sumber daya dalam urutan berikut untuk menghindari biaya tak terduga dan menjaga keamanan data.
-
Hapus workload — Hentikan semua aplikasi yang menggunakan PVC. Hal ini akan melepas (unmount) volume.
kubectl delete deployment <your-deployment-name> -
Hapus PVC — Hasilnya bergantung pada
reclaimPolicyStorageClass:-
Retain(disarankan): Fileset dan data CPFS for Lingjun tetap utuh. Lanjutkan ke Langkah 3 untuk menghapus PV. -
Delete: Menghapus permanen PV yang terikat dan fileset backend. Tidak dapat dikembalikan.
kubectl delete pvc <your-pvc-name> -
-
Hapus PV (hanya jika
reclaimPolicybernilaiRetain) — Setelah penghapusan PVC, PV masuk ke statusReleased. Hapus PV untuk menghapus sumber daya Kubernetes. Data backend tidak terpengaruh.kubectl delete pv <your-pv-name> -
(Opsional) Hapus StorageClass — Hapus jika tidak lagi diperlukan. Volume yang sudah ada tidak terpengaruh.
kubectl delete sc <your-sc-name> -
Hapus sistem file CPFS for Lingjun — Menghapus permanen semua data, termasuk data yang dipertahankan oleh kebijakan
Retain. Pastikan tidak ada dependensi tersisa, lalu hapus sistem file.
Pemecahan Masalah
PVC tetap dalam status Pending
PVC yang terjebak dalam status Pending berarti provisioning gagal. Event PVC biasanya mengidentifikasi penyebabnya.
kubectl describe pvc <your-pvc-name> -n <your-namespace>
Periksa Events untuk peringatan. Penyebab umum:
-
StorageClass not found:storageClassNamesalah atau StorageClass tidak ada. -
provisioning failedataufailed to create fileset: Masalah penyimpanan backend. Lanjutkan ke bawah.
Jika event menunjukkan masalah konfigurasi, periksa StorageClass dan verifikasi pendaftaran driver CSI:
# Periksa konfigurasi StorageClass
kubectl get storageclass <your-sc-name> -o yaml
# Verifikasi driver CSI telah terdaftar
kubectl get csidriver bmcpfsplugin.csi.alibabacloud.com
Pastikan bahwa:
-
provisionersesuai denganbmcpfsplugin.csi.alibabacloud.com. -
bmcpfsIdbenar dan sistem file tersebut ada. -
Jika perintah
get csidrivertidak menghasilkan output, driver belum terinstal. Instal bmcpfs-csi-controller, bmcpfs-csi-node, dan cnfs-nas-daemon dari halaman Add-ons.
Pod tetap dalam status ContainerCreating atau MountVolume.Setup failed
Pod telah mencapai node tetapi pemasangan volumenya gagal. Ikuti langkah-langkah berikut untuk mengidentifikasi penyebabnya.
-
Periksa event pod:
kubectl describe pod <pod-name> -n <your-namespace>Periksa
Eventsuntuk pesanWarningsepertiFailedMountatauMountVolume.Setup failed. -
Pastikan PVC telah terikat (bound).
kubectl get pvc <your-pvc-name>STATUSharus bernilaiBound. Jika bernilaiPending, lihat PVC tetap dalam status Pending. -
Jika sudah terikat, periksa log plugin CSI di sisi node:
kubectl get pods -n kube-system -l app.kubernetes.io/name=bmcpfs-csi-driver \ --field-selector spec.nodeName=<nodeName> \ -o name | xargs kubectl logs -n kube-system -c csi-pluginLog ini menampilkan error konektivitas jaringan, izin titik pemasangan, dan error I/O.