CPFS是一種並行檔案系統,具有高吞吐和高IOPS,能夠滿足HPC高效能運算情境的需求,如AI訓練、自動駕駛、基因計算、影視渲染等業務。本文介紹如何建立CPFS通用版靜態儲存卷,並在工作負載中掛載。
前提條件
csi-plugin和csi-provisioner組件版本不低於v1.22.11-abbb810e-aliyun。如需升級,請參見升級CSI組件。
使用限制
僅支援部分地區,請參見CPFS通用版開服地區。
僅支援通過NFS協議掛載,不支援通過POSIX協議掛載。
僅支援掛載到x86架構的節點上。
不支援跨VPC掛載,僅支援掛載到同一VPC的叢集中。
不支援掛載到作業系統為ContainerOS的節點上。
配置儲存群組件
請根據csi-plugin組件的版本,選擇配置方式。
csi-plugin版本為1.33及以上
安裝cnfs-nas-daemon組件,並配置csi-plugin開啟
AlinasMountProxy=trueFeatureGate,使得CSI後續調用cnfs-nas-daemon進行掛載。具體操作,請參見管理cnfs-nas-daemon組件。csi-plugin版本小於1.33
配置ConfigMap,開啟掛載CPFS通用版時使用的NFS協議。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cpfs-nas-enable: "true" # 使用CPFS通用版掛載時,使用NFS協議。 EOF重啟csi-plugin,安裝相關依賴。
此操作不影響業務正常運行。
kubectl -n kube-system rollout restart daemonset csi-plugin預期輸出:
daemonset.apps/csi-plugin restarted
步驟一:建立CPFS檔案系統和協議服務
CPFS僅支援靜態掛載。您需要先建立CPFS檔案系統以及對應的協議服務,並擷取掛載地址以便後續掛載使用。
請在叢集所屬地區建立CPFS檔案系統。
如果使用已有CPFS檔案系統,請在NAS控制台的檔案系統列表頁面單擊目標CPFS檔案系統,在基本資料頁面確認CPFS版本號碼為2.3.0及以上。如果不滿足,請建立新的CPFS檔案系統。
請使用叢集對應的VPC和交換器建立協議服務,並產生掛載點。
如果使用已有協議服務,請確認協議服務所使用的VPC是否與叢集一致(CPFS不支援跨VPC掛載)。如果不滿足,請重新建立協議服務。
擷取協議服務的掛載地址。
在協議服務頁面,單擊匯出目錄,然後在掛載地址列複製並儲存掛載地址。掛載地址包含掛載點網域名稱以及掛載目錄,如果指定匯出的是
/目錄,則掛載地址顯示為cpfs-****.<Region ID>.cpfs.aliyuncs.com:/share。
步驟二:建立PV和PVC
基於已有的CPFS檔案系統,建立對應的PV和PVC。
將以下內容儲存為cpfs-pv-pvc.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-pv labels: alicloud-pvname: cpfs-pv spec: accessModes: - ReadWriteMany capacity: storage: 20Gi csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: cpfs-nfs # 使用NFS協議進行掛載。 path: "/share" # 掛載地址中的目錄。 volumeAs: subpath # 子目錄。 server: "cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com" # 掛載地址中的網域名稱 volumeHandle: cpfs-pv # 必須與PV Name保持一致。 mountOptions: - rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport - vers=3 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: cpfs-pvPV參數
參數
說明
labels設定Label,以便PVC使用
selector進行匹配綁定。accessModesPV的訪問模式。
capacity.storage聲明儲存卷容量。
csi.driver驅動類型,設定為
nasplugin.csi.alibabacloud.com。csi.volumeAttributesCPFS儲存卷的屬性。
mountProtocol:設定為cpfs-nfs,表示使用NFS協議掛載CPFS。path:設定為CPFS通用版協議服務匯出目錄對應路徑,例如/share。支援設定為子目錄,例如/share/dir。volumeAs:設定為subpath,表示建立子目錄類型的PV。server:設定為CPFS通用版協議服務匯出目錄的掛載地址的網域名稱。
csi.volumeHandle必須與PV Name保持一致。
PVC參數
參數
說明
accessModesPVC請求PV的訪問模式。
selector使用PV上的Label進行匹配綁定。
resources.requests.storage分配給Pod的儲存容量。不大於PV容量即可。
建立PV和PVC。
kubectl apply -f cpfs-pv-pvc.yaml
確認PVC已綁定PV。
kubectl get pvc cpfs-pvc返回樣本如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-pvc Bound cpfs-pv 20Gi RWO <unset> 18m
步驟三:建立應用並掛載CPFS
建立StatefulSet並掛載CPFS通用版靜態卷。
將以下內容儲存為cpfs-test.yaml。
apiVersion: apps/v1 kind: StatefulSet metadata: name: cpfs-sts spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 1 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: cpfs-pvc mountPath: /data volumes: - name: cpfs-pvc persistentVolumeClaim: claimName: cpfs-pvc建立StatefulSet。
kubectl apply -f cpfs-test.yaml
確認CPFS通用版靜態卷是否掛載成功。
kubectl exec cpfs-sts-0 -- mount | grep /data預期輸出如下,說明CPFS通用版靜態卷掛載成功。
cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com:/share 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.0.1.255,mountvers=3,mountport=30000,mountproto=tcp,local_lock=all,addr=127.0.1.255)