如何在ACK集群中使用CPFS存儲卷服務
更新時間:
您可以在阿里云容器服務Kubernetes版(ACK)中使用文件存儲CPFS(Cloud Paralleled File System)。本文介紹如何在ACK中安裝Flexvolume插件,并通過CPFS數(shù)據(jù)卷的方式為應用(Pod)提供CPFS服務。
前提條件
- 您已創(chuàng)建一個專有版Kubernetes集群,請參見創(chuàng)建Kubernetes托管版集群。
- 開放公網(wǎng)SSH訪問,請參見SSH訪問Kubernetes集群。
重要 ACK CPFS存儲卷服務目前只支持CPFS 1.0版,不支持2.0版本。
背景信息
CPFS是一種并行文件系統(tǒng)。CPFS的數(shù)據(jù)存儲在集群中的多個數(shù)據(jù)節(jié)點,并可由多個客戶端同時訪問,從而能夠為大型高性能計算機集群提供高IOPS、高吞吐、低時延的數(shù)據(jù)存儲服務。CPFS是共享存儲服務類型,適合于容器服務場景對資源共享、高性能的要求,在大數(shù)據(jù)、AI、基因計算等高性能場景中使用容器服務和CPFS是一個推薦的解決方案。有關CPFS詳情,請參見什么是文件存儲CPFS。
步驟一、部署插件
ACK中使用CPFS依賴以下兩個驅動類組件:
- CPFS容器驅動:即為Flexvolume-cpfs插件,對Centos各個版本都兼容,部署Flexvolume-cpfs即可完成安裝。
- CPFS客戶端驅動:為CPFS掛載時的客戶端(類似于nfs-client),驅動與操作系統(tǒng)內核是強依賴。容器場景中安裝CPFS客戶端驅動有以下方式:
- 手動安裝驅動。請參見掛載文件系統(tǒng)。
- Flexvolume-cpfs部署時自動安裝驅動,但只支持部分內核版本。 您可以通過在節(jié)點上執(zhí)行命令
uname -a
查看內核版本。目前容器場景下您可以在以下內核版本中安裝CPFS客戶端驅動。3.10.0-957.5.1 3.10.0-957.21.3 3.10.0-1062.9.1
說明- 目前Flexvolume只支持安裝CPFS Client驅動,不支持cpfs-client驅動升級,即發(fā)現(xiàn)節(jié)點安裝了CPFS客戶端,不再繼續(xù)安裝驅動。
- 升級Flexvolume版本,只會升級Flexvolume驅動(容器驅動),而不會升級cpfs-client版本。
- 在已經(jīng)部署了cpfs-client、lustre驅動的節(jié)點上安裝cpfs flexvolume不會再安裝新版本的cpfs-client。
- cpfs-client驅動升級需要手動進行。具體操作,請參見掛載文件系統(tǒng)。
- 在集群節(jié)點中部署YAML模板。
- 在客戶端計算機中獲取集群KubeConfig并通過kubectl工具連接集群。
- 創(chuàng)建名為flexvolume-cpfs.yaml的文件,將以下內容拷貝至文件中。
apiVersion: apps/v1 kind: DaemonSet metadata: name: flexvolume-cpfs namespace: kube-system labels: k8s-volume: flexvolume-cpfs spec: selector: matchLabels: name: flexvolume-cpfs template: metadata: labels: name: 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: flexvolume-cpfs image: registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.14.8.96-0d85fd1-aliyun imagePullPolicy: Always securityContext: privileged: true env: - name: ACS_CPFS value: "true" - name: FIX_ISSUES value: "false" livenessProbe: exec: command: - sh - -c - ls /acs/flexvolume failureThreshold: 8 initialDelaySeconds: 15 periodSeconds: 60 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: rollingUpdate: maxUnavailable: 10% type: RollingUpdate
- 執(zhí)行以下命令部署上述YAML文件至集群節(jié)點中。
kubectl create -f flexvolume-cpfs.yaml
- 檢查部署情況。
- 執(zhí)行以下命令查看存儲插件的部署情況。
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存儲卷插件。兩個插件可以同時部署。 - 執(zhí)行以下命令查看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
- 執(zhí)行以下命令查看mount.lustre是否安裝完成。
which mount.lustre
預期輸出:
/usr/sbin/mount.lustre
- 執(zhí)行以下命令查看存儲插件的部署情況。
步驟二、使用CPFS數(shù)據(jù)卷
在ACK中使用CPFS數(shù)據(jù)卷,需要您先到CPFS控制臺創(chuàng)建一個CPFS卷和掛載點。參見創(chuàng)建文件系統(tǒng)。
重要 創(chuàng)建CPFS掛載點時,選擇的VPC網(wǎng)絡需要和ACK集群在同一個VPC內。
在以下示例中,獲取的掛載點為 《cpfs-*-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs--ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp》;文件系統(tǒng)ID為 《0237ef41》。
- 創(chuàng)建PV。
- 創(chuàng)建名為pv-cpfs.yaml的文件,拷貝以下內容至文件中。
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"
參數(shù) 描述 server 配置為CPFS的掛載點。 fileSystem 配置為CPFS文件系統(tǒng)ID。 subPath 配置為期望掛載的CPFS子目錄,相對于文件系統(tǒng)根目錄。 options 可選,掛載配置選項。 - 執(zhí)行以下命令創(chuàng)建PV。
kubectl create -f pv-cpfs.yaml
- 創(chuàng)建名為pv-cpfs.yaml的文件,拷貝以下內容至文件中。
- 創(chuàng)建PVC。
- 創(chuàng)建pvc-cpfs文件,并拷貝以下內容至文件中。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-cpfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-cpfs
- 執(zhí)行命令
kubectl create -f pvc-cpfs
創(chuàng)建PVC。
- 創(chuàng)建pvc-cpfs文件,并拷貝以下內容至文件中。
- 創(chuàng)建應用。
- 創(chuàng)建nas-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
- 執(zhí)行命令
kubectl create -f nas-cpfs
創(chuàng)建應用。
- 創(chuàng)建nas-cpfs文件,并拷貝以下內容至文件中。
執(zhí)行結果
執(zhí)行以下命令檢查Pod掛載情況。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE
nas-cpfs-79964997f5-kzrtp 1/1 Running 0 45s
執(zhí)行以下命令進入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)
執(zhí)行以下命令進入Pod所在節(jié)點,查看掛載目錄。
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)
文檔內容是否對您有幫助?