使用并行文件存储PFS
更新时间:2025-01-09
容器引擎CCE支持通过创建PV/PVC,并为工作负载挂载数据卷方式使用百度智能云并行文件存储PFS。本文将介绍如何在集群中动态和静态挂载并行文件存储。
使用限制
- 集群Kubernetes版本需大于或等于1.16。
- PFS实例需要和集群在同一VPC内。
- 当前PFS暂不支持arm架构的集群以及Ubuntu 18.04/16.04、baidulinux 3.0、RockyLinux 8.6操作系统的节点,如业务场景需要请提工单。
前提条件
- 集群已安装并行文件存储组件,更多信息请见CCE CSI PFS Plugin 说明。
操作步骤
动态挂载并行文件存储
1. 创建存储类StorageClass
集群管理员可使用StorageClass为集群定义不同的存储类型。您可通过StorageClass配合PVC动态创建需要的存储资源。
本文介绍通过Kubectl方式创建并行文件存储PFS类型的StorageClass,自定义并行文件存储使用所需的模板。
您需要先创建PFS实例,操作步骤请参考创建并行文件系统。
Plain Text
1kind: StorageClass
2apiVersion: storage.k8s.io/v1
3metadata:
4 name: pfs-sc
5provisioner: csi-clusterfileplugin
6allowVolumeExpansion: true
7parameters:
8 clusterIP: #必填,PFS实例连接地址
9 clusterPort: #必填,当前端口固定为"8888"
10 parentDir: #必填,自定义路径即可
2. 创建持久卷声明PVC
注意storageClassName需要指定为上述部署storageClass时填写的storageClass名称。
Plain Text
1kind: PersistentVolumeClaim
2apiVersion: v1
3metadata:
4 name: csi-pvc-pfs
5 namespace: default
6spec:
7 accessModes:
8 - ReadWriteMany
9 storageClassName: pfs-sc
10 resources:
11 requests:
12 storage: 50Gi # 指定PVC存储空间大小
3. 检查PVC状态为Bound
Plain Text
1$ kubectl get pvc csi-pvc-pfs
2NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
3csi-pvc-pfs Bound pvc-1ab36e4d1d2711e9 50Gi RWX pfs-sc 4s
4. 在Pod中挂载PVC
Pod和PVC需要在同一个namespace下。
Plain Text
1apiVersion: v1
2kind: Pod
3metadata:
4 name: test-pvc-pod
5 namespace: default
6 labels:
7 app: test-pvc-pod
8spec:
9 containers:
10 - name: test-pvc-pod
11 image: nginx
12 volumeMounts:
13 - name: pfs-pvc
14 mountPath: "/pfs-volume"
15 volumes:
16 - name: pfs-pvc
17 persistentVolumeClaim:
18 claimName: csi-pvc-pfs
静态挂载并行文件存储
1. 创建持久卷PV
通过pv.spec.csi.volumeAttributes.path
指定需要挂载的路径,该路径为填写的parentDir路径的相对路径。
本文以PV在PFS中的路径为/exist/some/dir
为例。如果对应的路径不存在,在挂载PV时会自动创建该路径。
Plain Text
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: static-pv-pfs
5spec:
6 accessModes:
7 - ReadWriteMany
8 storageClassName:
9 capacity:
10 storage: 100Gi
11 csi:
12 driver: csi-clusterfileplugin
13 volumeHandle: data-id
14 volumeAttributes:
15 parentDir: / #必填,自定义路径
16 path: /exist/some/dir #必填,指定需要挂载的路径,为PFS实例相对parentDir的目录
17 clusterIP: "" #必填,PFS实例连接地址
18 clusterPort: "8888" #必填,当前端口固定为8888
说明
- storageClassName在静态PV为空,无需填写。
- volumeHandle必须保证唯一性,可以使用当前时间(如2024-09-27-11-30-00-00)或者生成uuid来确保。
- clusterPort当前固定为"8888"
2. 创建持久卷声明PVC
Plain Text
1kind: PersistentVolumeClaim
2apiVersion: v1
3metadata:
4 name: static-pvc-pfs
5 namespace: default
6spec:
7 accessModes:
8 - ReadWriteMany
9 storageClassName:
10 resources:
11 requests:
12 storage: 100Gi
2. 检查PVC状态为Bound,并且与对应的PV绑定
Plain Text
1$ kubectl get pvc
2NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
3static-pvc-pfs Bound static-pv-pfs 100Gi RWX pfs-static-sc 10s
3. 在Pod中挂载PVC
Pod和PVC需要在同一个namespace下。
Plain Text
1apiVersion: v1
2kind: Pod
3metadata:
4 name: test-pvc-pod
5 namespace: default
6 labels:
7 app: test-pvc-pod
8spec:
9 containers:
10 - name: test-pvc-pod
11 image: nginx
12 volumeMounts:
13 - name: pfs-pvc
14 mountPath: "/pfs-volume"
15 volumes:
16 - name: pfs-pvc
17 persistentVolumeClaim:
18 claimName: static-pvc-pfs
连接多个PFS实例
支持多个pfs只需要再部署一个storageclass,clusterIP,parentDir填入另一个pfs实例的信息即可。
1. 新增一个存储类StorageClass
Plain Text
1kind: StorageClass
2apiVersion: storage.k8s.io/v1
3metadata:
4 name: pfs-sc-2
5provisioner: csi-clusterfileplugin
6allowVolumeExpansion: true
7parameters:
8 clusterIP: #必填,PFS实例连接地址
9 clusterPort: #必填,当前端口固定为"8888"
10 parentDir: #必填,自定义路径即可
2.1 动态挂载在PVC指定storageclass为新创建的storageClassName
Plain Text
1kind: PersistentVolumeClaim
2apiVersion: v1
3metadata:
4 name: csi-pvc-pfs-2
5 namespace: default
6spec:
7 accessModes:
8 - ReadWriteMany
9 storageClassName: pfs-sc-2
10 resources:
11 requests:
12 storage: 50Gi # 用户指定PVC存储空间
2.2 静态挂载在PV参数中填入另一个PFS实例相关信息即可
Plain Text
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: static-pv-pfs
5spec:
6 accessModes:
7 - ReadWriteMany
8 storageClassName:
9 capacity:
10 storage: 100Gi
11 csi:
12 driver: csi-clusterfileplugin
13 volumeHandle: data-id
14 volumeAttributes:
15 parentDir: / #必填,自定义路径
16 path: /exist/some/dir #必填,指定需要挂载的路径,为PFS实例相对parentDir的目录
17 clusterIP: "" #必填,PFS实例连接地址
18 clusterPort: "8888" #必填,当前端口固定为8888
PFS配置项示例
示例1
Plain Text
1 parentDir:"/kubernetes"
如果部署storageClass或者静态pv时填写上述配置,则动态创建的PV在pfs中的路径为/kubernetes/pvc-xxxx-xxxx-xxxx-xxxx
;静态PV在pfs中的path路径必须位于/kubernetes
路径下。
示例2
Plain Text
1 parentDir:"/"
如果安装时填写上述配置,则动态创建的PV在pfs中的路径为/pvc-xxxx-xxxx-xxxx-xxxx
;静态PV在pfs中的path路径必须位于/
路径下。