ACK memungkinkan Anda memasang sistem file CPFS tujuan umum sebagai volume dinamis menggunakan CNFS. Setelah StorageClass dikonfigurasi, setiap workload secara otomatis mendapatkan volume persisten (PV) independen yang terisolasi datanya, sehingga tidak perlu lagi melakukan manajemen penyimpanan secara manual.
Alur kerja
Saat menggunakan volume dinamis, sistem secara otomatis menyediakan volume persisten (PV) berdasarkan StorageClass yang ditentukan setelah aplikasi membuat klaim volume persisten (PVC). Metode ini menghilangkan kebutuhan provisioning awal dan mendukung ekspansi volume otomatis.
Gambar berikut menunjukkan alur kerja pemasangan volume dinamis CPFS di dalam kluster.
|
Prasyarat
Pastikan komponen Anda memenuhi persyaratan versi.
Untuk meningkatkan kluster Anda, lihat Upgrade an ACK cluster.
1.26 dan yang lebih baru
Pastikan versi komponen CSI adalah v1.32.2-757e24b-aliyun atau yang lebih baru.
Untuk meningkatkan komponen CSI, lihat Manage CSI components.
Komponen cnfs-nas-daemon telah diinstal, dan Anda telah menambahkan
AlinasMountProxy=trueke FeatureGate komponen csi-plugin untuk mengaktifkan cnfs-nas-daemon. Untuk informasi selengkapnya, lihat Manage the cnfs-nas-daemon component.
Lebih awal dari 1.26
Pastikan versi komponen CSI adalah v1.24.11-5221f79-aliyun atau yang lebih baru.
Untuk meningkatkan komponen CSI, lihat Manage CSI components.
Instal dependensi klien dan restart komponen csi-plugin.
Anda telah membuat sistem file CPFS tujuan umum dan layanan protokol yang sesuai di VPC yang sama dengan kluster, serta telah memperoleh alamat titik pemasangan. Untuk informasi selengkapnya, lihat Create a protocol service and obtain a mount target address.
Untuk kinerja optimal, tempatkan titik pemasangan layanan protokol CPFS dan kluster di vSwitch yang sama.
Batasan
Edisi tujuan umum CPFS hanya tersedia di wilayah tertentu. Untuk informasi selengkapnya, lihat Available regions for the CPFS general-purpose edition.
Sistem file CPFS hanya dapat dipasang ke kluster dalam VPC yang sama.
Untuk informasi selengkapnya tentang batasan CPFS, lihat Limits.
Langkah 1: Buat objek CNFS
Buat objek CNFS untuk mendaftarkan sistem file CPFS yang sudah ada ke kluster Anda.
Buat file bernama
cnfs.yamldengan menggunakan templat berikut.apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-nfs-cpfs spec: # Specify the backend storage type as CPFS. type: cpfs # Deleting this CNFS object does not delete the backend CPFS file system. reclaimPolicy: Retain parameters: # The domain name of the mount target for the CPFS protocol service. protocolServer: cpfs-xxxx.xxxx.cpfs.aliyuncs.com # Use the NFS client to mount the volume. useClient: NFSClientParameter:
Parameter
Deskripsi
spec.typeJenis penyimpanan backend. Atur nilai ini ke
cpfs.spec.reclaimPolicyKebijakan reclaim. Hanya
Retainyang didukung. Pengaturan ini mencegah sistem file CPFS backend dihapus saat objek CNFS dihapus.spec.parameters.protocolServerspec.parameters.useClientAtur ke
NFSClientuntuk menggunakan klien NFS saat pemasangan.Buat objek CNFS.
kubectl apply -f cnfs.yamlPeriksa status objek CNFS dan pastikan statusnya
Available.kubectl get cnfs cnfs-nfs-cpfs -o jsonpath='{.status.status}'
Langkah 2: Buat StorageClass
Buat StorageClass sebagai templat untuk provisioning dinamis dan referensikan objek CNFS yang telah Anda buat.
Buat file bernama
sc.yamldengan menggunakan templat berikut.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: cnfs-nfs-cpfs-sc # Mount options. mountOptions: - nolock,tcp,noresvport - vers=3 parameters: # Create a subdirectory-based PV. volumeAs: subpath # Reference the CNFS object created earlier. containerNetworkFileSystem: "cnfs-nfs-cpfs" # The export path of the General-purpose CPFS protocol service. path: "/share" # Data handling policy when a PVC is deleted. `true` archives data instead of deleting it. archiveOnDelete: "true" provisioner: nasplugin.csi.alibabacloud.com # PV reclaim policy. Only Retain is supported in this example. reclaimPolicy: Retain # Allow volume expansion. allowVolumeExpansion: trueParameter:
Parameter
Deskripsi
mountOptionsOpsi pemasangan. Anda dapat menggunakan nilai default yang ditunjukkan pada contoh.
parameters.volumeAssubpath: Mode subpath. Setiap PV sesuai dengan subdirektori independen pada sistem file CPFS, memberikan isolasi data.sharepath: Mode sharepath. Semua PV yang dibuat dari StorageClass ini berbagi direktori yang sama pada sistem file CPFS.
parameters.containerNetworkFileSystemObjek CNFS yang direferensikan.
parameters.pathJalur ekspor layanan protokol CPFS tujuan umum, seperti
/share. Anda juga dapat menentukan subdirektori, seperti/share/dir.Saat ini, hanya direktori biasa yang didukung. Filesets tidak didukung.
parameters.archiveOnDeleteParameter ini hanya berlaku jika
volumeAsdiatur kesubpathdanreclaimPolicydiatur keDelete.CPFS tujuan umum adalah layanan penyimpanan bersama. Parameter ini memberikan konfirmasi kedua sebelum penghapusan.
Mengontrol cara penanganan data subdirektori saat PVC dihapus.
true(default): Subdirektori diarsipkan dan diganti namanya menjadiarchived-{pvName}.{timestamp}alih-alih dihapus. Anda dapat memulihkan data secara manual.false: Menghapus permanen subdirektori dan semua file di dalamnya. Data ini tidak dapat dipulihkan.Operasi ini hanya menghapus subdirektori CPFS dan file-file di dalamnya, bukan sistem file CPFS itu sendiri. Untuk menghapus sistem file CPFS, lihat Delete a file system.
reclaimPolicyJika csi-provisioner adalah managed component, versinya harus v1.34.1 atau yang lebih baru. Tidak ada batasan versi untuk komponen unmanaged.
Parameter ini hanya berlaku jika
volumeAsdiatur kesubpath.Kebijakan reclaim untuk PV. Ini mengontrol cara penanganan resource setelah PVC dihapus.
Delete: Secara otomatis melepaskan PV saat PVC dihapus. ParameterarchiveOnDeletekemudian menentukan apakah data subdirektori backend juga dihapus.Retain: Saat PVC dihapus, PV dipertahankan dan data backend tidak terpengaruh. Anda harus membersihkan resource secara manual. Opsi ini cocok untuk skenario dengan persyaratan keamanan data tinggi.
allowVolumeExpansionJika parameter ini diaktifkan, volume CPFS dapat diperluas secara otomatis.
Buat StorageClass.
kubectl apply -f sc.yamlPeriksa apakah StorageClass berhasil dibuat.
kubectl get sc cnfs-nfs-cpfs-scOutput yang diharapkan:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE cnfs-nfs-cpfs-sc nasplugin.csi.alibabacloud.com Retain Immediate true 9s
Langkah 3: Buat aplikasi
Buat workload dan tentukan StorageClass yang telah Anda buat di bagian volumeClaimTemplates-nya.
Buat file bernama
sts.yamldengan menggunakan templat berikut.apiVersion: apps/v1 kind: StatefulSet metadata: name: cnfs-nfs-cpfs-sts spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: pvc # Mount the storage volume to the /data directory in the container. mountPath: /data # Define a PVC template. The StatefulSet controller dynamically creates a PVC for each pod. volumeClaimTemplates: - metadata: name: pvc spec: accessModes: [ "ReadWriteOnce" ] # Reference the StorageClass created earlier. storageClassName: "cnfs-nfs-cpfs-sc" resources: requests: storage: 50GiBuat aplikasi.
kubectl apply -f sts.yamlPeriksa apakah pod berada dalam status Running.
kubectl get pod | grep cnfs-nfs-cpfs-stsOutput yang diharapkan:
cnfs-nfs-cpfs-sts-0 1/1 Running 0 11s cnfs-nfs-cpfs-sts-1 1/1 Running 0 9sKonfirmasi bahwa pod telah memasang volume penyimpanan CPFS.
kubectl exec cnfs-nfs-cpfs-sts-0 -- mount | grep nfsOutput berikut menunjukkan bahwa CNFS berhasil memasang sistem file CPFS dengan menggunakan klien NFS.
cpfs-********-********.cn-shanghai.cpfs.aliyuncs.com:/share/nas-804e8cb1-2355-4026-87fc-ee061e14f5f9 on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,port=30000,timeo=600,retrans=2,sec=sys,mountaddr=127.XX.XX.255,mountvers=3,mountport=30000,mountproto=tcp,local_lock=all,addr=127.XX.XX.255)
Langkah 4: Verifikasi hasil
Setelah aplikasi dibuat, sistem secara otomatis menyediakan dan memasang volume.
Verifikasi provisioning otomatis
Periksa status PVC untuk memastikan dua PVC telah dibuat secara otomatis dan diikat ke PV yang dihasilkan secara dinamis.
kubectl get pvc -l app=nginxOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
pvc-cnfs-nfs-cpfs-sts-0 Bound nas-8d2530eb-fcf9-4ad5-b5f8-bae02a1***** 50Gi RWO cnfs-nfs-cpfs-sc <unset> 63s
pvc-cnfs-nfs-cpfs-sts-1 Bound nas-e84cadaf-ce35-4745-8cbb-2a80026***** 50Gi RWO cnfs-nfs-cpfs-sc <unset> 61sVerifikasi status pod dan titik pemasangan
Periksa titik pemasangan di dalam kontainer untuk memastikan subdirektori CPFS yang terisolasi berhasil dipasang.
kubectl exec cnfs-nfs-cpfs-sts-0 -- mount | grep /dataJalur pemasangan pada output yang diharapkan mencakup nama PV yang dihasilkan otomatis (misalnya, nas-804e8cb1-xxxx), yang menunjukkan bahwa subdirektori terisolasi telah dipasang.
cpfs-....aliyuncs.com:/share/nas-804e8cb1-2355-4026-87fc-ee061e1****** on /data type nfs (rw,...)Verifikasi isolasi volume
Verifikasi bahwa volume dinamis yang dibuat untuk pod berbeda saling terisolasi satu sama lain.
Buat file sementara di
cnfs-nfs-cpfs-sts-0.kubectl exec cnfs-nfs-cpfs-sts-0 -- touch /data/test.txtPeriksa direktori /data di
cnfs-nfs-cpfs-sts-1untuk memastikan file uji tidak ada.kubectl exec cnfs-nfs-cpfs-sts-1 -- ls /dataOutput yang diharapkan tidak berisi file tersebut. Hal ini mengonfirmasi bahwa volume penyimpanan yang dibuat secara dinamis saling terisolasi dan datanya tidak dibagikan.
Praktik terbaik produksi
Proteksi data: Atur
reclaimPolicykeRetaindanarchiveOnDeleteketruedi StorageClass untuk mencegah kehilangan data akibat penghapusan PVC yang tidak disengaja.
Membersihkan sumber daya
Untuk menghindari biaya tak terduga dan memastikan keamanan data, ikuti prosedur berikut untuk melepaskan resource yang tidak lagi Anda perlukan.
Hapus workload
Aksi: Hapus semua aplikasi yang menggunakan PVC terkait, seperti StatefulSet. Tindakan ini akan menghentikan pod yang sedang berjalan dan melepas volume penyimpanan.
Contoh perintah:
kubectl delete statefulset <your-statefulset-name>
Hapus PVC
Aksi: Hapus PVC yang terkait dengan aplikasi. Penanganan data backend ditentukan oleh kombinasi
volumeAs,reclaimPolicy, danarchiveOnDelete.volumeAs: subpathSetiap PVC sesuai dengan subdirektori independen. Perilaku penghapusan adalah sebagai berikut:
reclaimPolicy: Retain: PV dipertahankan, dan data di subdirektori CPFS tetap tidak berubah. Anda harus melakukan pembersihan manual.reclaimPolicy: Delete+archiveOnDelete: "true": PV dilepaskan secara otomatis. Subdirektori diarsipkan dan diganti namanya menjadiarchived-{pvName}.{timestamp}, dan tidak ada data yang hilang.reclaimPolicy: Delete+archiveOnDelete: "false": Secara otomatis melepaskan PV dan menghapus permanen subdirektori beserta file-file di dalamnya. Data ini tidak dapat dipulihkan. Lakukan dengan hati-hati.
volumeAs: sharepathBeberapa PVC berbagi direktori yang sama. Menghapus PVC tidak memengaruhi direktori backend atau datanya. Parameter
reclaimPolicydanarchiveOnDeletetidak berpengaruh.
Terlepas dari konfigurasi apa pun, sistem file CPFS itu sendiri tidak dihapus. Untuk menghapus sistem file CPFS, lihat Delete a file system.
Contoh perintah:
kubectl delete pvc <your-pvc-name>
Hapus resource penyimpanan Kubernetes
Tindakan ini hanya menghapus definisi resource di dalam kluster. Tidak menghapus sistem file CPFS backend.
Hapus PV
Aksi: Jika
reclaimPolicydiatur keRetain, status PV berubah menjadiReleasedsetelah PVC dihapus. Anda kemudian dapat menghapus PV secara manual jika yakin data tidak lagi diperlukan.Contoh perintah:
kubectl delete pv <your-pv-name>
Hapus StorageClass
Aksi: Jika Anda tidak lagi memerlukan jenis penyimpanan ini, Anda dapat menghapus StorageClass yang sesuai.
Contoh perintah:
kubectl delete sc <your-storageclass-name>
Hapus objek CNFS
Aksi: Jika Anda tidak lagi perlu menggunakan sistem file CPFS dengan kluster, Anda dapat menghapus objek CNFS. Menghapus objek CNFS tidak menghapus sistem file CPFS backend.
Contoh perintah:
kubectl delete cnfs <your-cnfs-name>