如何在阿里雲ACK集羣中使用CPFS存儲卷服務

介紹:

CPFS(Cloud Paralleled File System)是一種並行文件系統。CPFS 的數據存儲在集羣中的多個數據節點,並可由多個客戶端同時訪問,從而能夠爲大型高性能計算機集羣提供高IOPS、高吞吐、低時延的數據存儲服務。

CPFS詳細產品介紹參考:
https://help.aliyun.com/product/111536.html

CPFS是共享存儲服務類型,適合於容器服務場景對資源共享、高性能的要求,在大數據、AI、基因計算等高性能場景中使用容器服務 + CPFS是一個推薦的解決方案。

本文介紹如何在容器服務中安裝Flexvolume插件,並通過CPFS數據卷的方式爲應用(Pod)提供CPFS服務。

CSI中如何使用CPFS服務請參考:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/cpfs.md

插件部署:

1. 限制:

CPFS數據卷掛載需要客戶端安裝cpfs-client驅動,驅動與操作系統內核是強依賴。目前支持Centos操作系統的以下內核版本:

3.10.0-957.5.1
3.10.0-957.21.3

通過在節點上執行: uname -a 查看內核版本。

目前Flexvolume只支持安裝CPFS Client驅動,不支持cpfs-client驅動升級;

升級Flexvolume版本,只會升級Flexvolume驅動,而不會升級cpfs-client版本;

在已經部署了cpfs-client、lustre驅動的節點上安裝cpfs flexvolume不會再安裝新版本的CPFS-Client;

Client升級需要手動進行,參考cpfs使用文檔;

2. 部署模板:

在集羣中執行kubectl命令部署下面模板:

# kubectl create -f flexvolume-cpfs.yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: flexvolume-cpfs
  namespace: kube-system
  labels:
    k8s-volume: flexvolume-cpfs
spec:
  selector:
    matchLabels:
      name: acs-flexvolume-cpfs
  template:
    metadata:
      labels:
        name: acs-flexvolume-cpfs
    spec:
      hostPID: true
      hostNetwork: true
      tolerations:
      - operator: "Exists"
      priorityClassName: system-node-critical
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - name: acs-flexvolume
        image: registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.14.8.40-9f2072a-aliyun
        imagePullPolicy: Always
        securityContext:
          privileged: true
        env:
        - name: ACS_CPFS
          value: "true"
        - name: FIX_ISSUES
          value: "false"
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - ps -ef |grep /acs/flexvolume | grep monitoring | grep -v grep
          failureThreshold: 8
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 15
        volumeMounts:
        - name: usrdir
          mountPath: /host/usr/
        - name: etcdir
          mountPath: /host/etc/
        - name: logdir
          mountPath: /var/log/alicloud/
        - mountPath: /var/lib/kubelet
          mountPropagation: Bidirectional
          name: kubeletdir
      volumes:
      - name: usrdir
        hostPath:
          path: /usr/
      - name: etcdir
        hostPath:
          path: /etc/
      - name: logdir
        hostPath:
          path: /var/log/alicloud/
      - hostPath:
          path: /var/lib/kubelet
          type: Directory
        name: kubeletdir
  updateStrategy:
    type: RollingUpdate

3. 檢查部署情況:

在集羣中查看存儲插件的部署情況,示例如下:

# kubectl get pod -nkube-system | grep flex
flexvolume-97psk                                  1/1     Running   0          27m
flexvolume-cpfs-dgxfq                             1/1     Running   0          98s
flexvolume-cpfs-qpbcb                             1/1     Running   0          98s
flexvolume-cpfs-vlrf9                             1/1     Running   0          98s
flexvolume-cpfs-wklls                             1/1     Running   0          98s
flexvolume-cpfs-xtl9b                             1/1     Running   0          98s
flexvolume-j8zjr                                  1/1     Running   0          27m
flexvolume-pcg4l                                  1/1     Running   0          27m
flexvolume-tjxxn                                  1/1     Running   0          27m
flexvolume-x7ljw                                  1/1     Running   0          27m

以flexvolume-cpfs 開頭的pod表示部署的cpfs存儲卷插件;

不含cpfs字樣的flexvolume pod表示:集羣默認部署的nas、雲盤、oss存儲卷插件,兩個插件可以同時部署;

在集羣的節點上查看cpfs-client是否安裝完成:

# rpm -qa | grep cpfs
kmod-cpfs-client-2.10.8-202.el7.x86_64
cpfs-client-2.10.8-202.el7.x86_64

查看 mount.lustre 是否已經安裝:

# which mount.lustre
/usr/sbin/mount.lustre

使用CPFS數據卷:

在ACK中使用CPFS數據卷,需要您先到CPFS控制檯創建一個CPFS卷和掛載點,參考:https://help.aliyun.com/document_detail/111860.html

創建CPFS掛載點時,選擇的vpc網絡需要和ACK集羣在同一個vpc內。

下面示例假設獲取掛載點爲:

掛載點:cpfs-*-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs--ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp

文件系統ID爲:0237ef41

1. PV模板:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-cpfs
  labels:
    alicloud-pvname: pv-cpfs
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  flexVolume:
    driver: "alicloud/cpfs"
    options:
      server: "cpfs-****-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs-***-ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp"
      fileSystem: "0237ef41"
      subPath: "/k8s"
      options: "ro"

其中:

server:配置爲CPFS的掛載點;

fileSystem:配置爲CPFS文件系統ID;

subPath:配置爲期望掛載的CPFS子目錄,相對於文件系統根目錄;

options:可選,掛載配置選項;

2. PVC、應用模板:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-cpfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-cpfs
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nas-cpfs
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
          - name: pvc-cpfs
            mountPath: "/data"
      volumes:
        - name: pvc-cpfs
          persistentVolumeClaim:
            claimName: pvc-cpfs

3. 創建應用:

創建上面模板後檢查pod掛載情況:

# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
nas-cpfs-79964997f5-kzrtp   1/1     Running   0          45s

進入Pod查看掛載目錄;
# kubectl exec -ti nas-cpfs-79964997f5-kzrtp sh
# mount | grep k8s
192.168.1.12@tcp:192.168.1.10@tcp:/0237ef41/k8s on /data type lustre (ro,lazystatfs)
進入pod所在節點,查看掛載目錄;
# mount | grep cpfs
192.168.1.12@tcp:192.168.1.10@tcp:/0237ef41/k8s on /var/lib/kubelet/pods/c4684de2-26ce-11ea-abbd-00163e12e203/volumes/alicloud~cpfs/pv-cpfs type lustre (ro,lazystatfs)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章