1. 前言
CPFS(Cloud Paralleled File System)是一種并行檔案系統。CPFS 的資料存儲在叢集中的多個資料節點,并可由多個用戶端同時通路,進而能夠為大型高性能計算機叢集提供高 IOPS、高吞吐、低延遲時間的資料存儲服務。
阿裡雲Kubernetes CSI支援
靜态存儲卷挂載
和
動态存儲卷挂載
2種方式挂載CPFS存儲卷, 在
靜态存儲卷挂載
的方式中,通常需要手動編輯和建立一個pv/pvc進行挂載,當需要的pv/pvc數量很大的時候,手動建立就顯得非常繁瑣了,這時
動态存儲卷挂載
的功能可以滿足您的需求。本文示範如何在ACK叢集中使用
alibaba-cloud-csi-driver挂載CPFS存儲卷。
2. 部署csi-cpfs元件
如果您需要挂載cpfs存儲卷,首先需要按照以下步驟在ACK叢集中部署
cpfs-provisioner
cpfs-plugin
:
2.1 部署 cpfs-provisioner
:
cpfs-provisioner
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/cpfs/cpfs-provisioner.yaml
2.2 部署 cpfs-plugin
cpfs-plugin
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/cpfs/cpfs-plugin.yaml
2.3 檢查運作狀态
$ kubectl -nkube-system get po |grep cpfs
csi-cpfs-provisioner-0 1/1 Running
csi-cpfsplugin-g2czx 2/2 Running
csi-cpfsplugin-l6zp8 2/2 Running
csi-cpfsplugin-nwt2j 2/2 Running
csi-cpfsplugin-skjds 2/2 Running
csi-cpfsplugin-sp9mb 2/2 Running
csi-cpfsplugin-tmjm5 2/2 Running
3. 使用CPFS動态存儲卷
目前阿裡雲Kubernetes CSI支援
subpath
類型的CPFS動态存儲卷挂載方式。
當你的多個Kubernetes應用或者Pod需要挂載相同的CPFS存儲卷共享資料時,或不同的Pod挂載相同CPFS檔案系統的不同子目錄時, 可以使用
subpath
類型的CPFS動态存儲卷方式。csi會自動在CPFS檔案系統的根目錄下建立以該應用PV name為名的子目錄,并挂載到應用的pod中。
3.1 建立CPFS檔案系統
使用者首先使用
NAS控制台建立好CPFS檔案系統。
檔案系統:

檢視檔案系統詳情并擷取
挂載點
資訊:
3.2 建立StoragClass
編輯
storageclass.yaml
檔案, 詳細參數說明見:
https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/cpfs-dynamic.mdapiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-cpfs
parameters:
volumeAs: subpath
server: "xxxxxx@tcp:xxxxxx@tcp:/xxxxxx"
archiveOnDelete: "false"
provisioner: cpfsplugin.csi.alibabacloud.com
reclaimPolicy: Delete
替換
sever
參數的值為挂載點路徑資訊并運作以下指令建立StorageClass
alicloud-cpfs
$ kubectl create -f storageclass.yaml
storageclass.storage.k8s.io/alicloud-cpfs created
3.3 建立PV/PVC和Pod挂載cpfs存儲卷
示例應用編排檔案
deploy.yaml
如下所示:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cpfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: alicloud-cpfs
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-cpfs
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: cpfs-pvc
mountPath: "/data"
volumes:
- name: cpfs-pvc
persistentVolumeClaim:
claimName: cpfs-pvc
建立pvc和deployment:
$ kubectl create -f deploy.yaml
$ kubectl get po
NAME READY STATUS RESTARTS AGE
deployment-cpfs-7f6977f9f6-s8wdx 1/1 Running 0 25s
至此,我們成功在cpfs檔案系統中建立子目錄并挂載到應用
deployment-cpfs
。
如果你需要為不同的Pod挂載同一個CPFS檔案系統的不同子目錄, 則隻需分别建立
cpfs-pvc-01
cpfs-pvc-02
以及其對應應用編排。
4. 使用CPFS靜态存儲卷
與
CPFS動态存儲卷
不同的是,
CPFS靜态存儲卷
需要手動編排PV資源,并且可自定義
subpath
路徑,編排檔案示例如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: cpfs-csi-pv
labels:
alicloud-pvname: cpfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: cpfsplugin.csi.alibabacloud.com
volumeHandle: cpfs-csi-pv
volumeAttributes:
server: "xxxxxx@tcp:xxxxxx@tcp"
fileSystem: "xxxxxx"
subPath: "/k8s"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cpfs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: cpfs-pv
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-cpfs
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: cpfs-pvc
mountPath: "/data"
volumes:
- name: cpfs-pvc
persistentVolumeClaim:
claimName: cpfs-pvc