天天看點

阿裡雲Kubernetes CSI實踐—CPFS存儲卷使用

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

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/cpfs/cpfs-provisioner.yaml           

2.2 部署

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檔案系統。

檔案系統:

阿裡雲Kubernetes CSI實踐—CPFS存儲卷使用

檢視檔案系統詳情并擷取

挂載點

資訊:

阿裡雲Kubernetes CSI實踐—CPFS存儲卷使用

3.2 建立StoragClass

編輯

storageclass.yaml

檔案, 詳細參數說明見:

https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/cpfs-dynamic.md
apiVersion: 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           

5. 參考文檔

CPFS CSI Plugin 檔案存儲CPFS

繼續閱讀