使用并行文件存储PFS
更新时间:2024-10-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实例,操作步骤请参考创建并行文件系统。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: pfs-sc
provisioner: csi-clusterfileplugin
allowVolumeExpansion: true
parameters:
clusterIP: #必填,PFS实例连接地址
clusterPort: #必填,当前端口固定为"8888"
parentDir: #必填,自定义路径即可
2. 创建持久卷声明PVC
注意storageClassName需要指定为上述部署storageClass时填写的storageClass名称。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: csi-pvc-pfs
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName: pfs-sc
resources:
requests:
storage: 50Gi # 指定PVC存储空间大小
3. 检查PVC状态为Bound
$ kubectl get pvc csi-pvc-pfs
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
csi-pvc-pfs Bound pvc-1ab36e4d1d2711e9 50Gi RWX pfs-sc 4s
4. 在Pod中挂载PVC
Pod和PVC需要在同一个namespace下。
apiVersion: v1
kind: Pod
metadata:
name: test-pvc-pod
namespace: default
labels:
app: test-pvc-pod
spec:
containers:
- name: test-pvc-pod
image: nginx
volumeMounts:
- name: pfs-pvc
mountPath: "/pfs-volume"
volumes:
- name: pfs-pvc
persistentVolumeClaim:
claimName: csi-pvc-pfs
静态挂载并行文件存储
1. 创建持久卷PV
通过pv.spec.csi.volumeAttributes.path
指定需要挂载的路径,该路径为填写的parentDir路径的相对路径。
本文以PV在PFS中的路径为/exist/some/dir
为例。如果对应的路径不存在,在挂载PV时会自动创建该路径。
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-pv-pfs
spec:
accessModes:
- ReadWriteMany
storageClassName:
capacity:
storage: 100Gi
csi:
driver: csi-clusterfileplugin
volumeHandle: data-id
volumeAttributes:
parentDir: / #必填,自定义路径
path: /exist/some/dir #必填,指定需要挂载的路径,为FPS实例相对parentDir的目录
clusterIP: "" #必填,PFS实例连接地址
clusterPort: "8888" #必填,当前端口固定为8888
说明
- storageClassName在静态PV为空,无需填写。
- volumeHandle必须保证唯一性,可以使用当前时间(如2024-09-27-11-30-00-00)或者生成uuid来确保。
- clusterPort当前固定为"8888"
2. 创建持久卷声明PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: static-pvc-pfs
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName:
resources:
requests:
storage: 100Gi
2. 检查PVC状态为Bound,并且与对应的PV绑定
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
static-pvc-pfs Bound static-pv-pfs 100Gi RWX pfs-static-sc 10s
3. 在Pod中挂载PVC
Pod和PVC需要在同一个namespace下。
apiVersion: v1
kind: Pod
metadata:
name: test-pvc-pod
namespace: default
labels:
app: test-pvc-pod
spec:
containers:
- name: test-pvc-pod
image: nginx
volumeMounts:
- name: pfs-pvc
mountPath: "/pfs-volume"
volumes:
- name: pfs-pvc
persistentVolumeClaim:
claimName: static-pvc-pfs
连接多个PFS实例
支持多个pfs只需要再部署一个storageclass,clusterIP,parentDir填入另一个pfs实例的信息即可。
1. 新增一个存储类StorageClass
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: pfs-sc-2
provisioner: csi-clusterfileplugin
allowVolumeExpansion: true
parameters:
clusterIP: #必填,PFS实例连接地址
clusterPort: #必填,当前端口固定为"8888"
parentDir: #必填,自定义路径即可
2.1 动态挂载在PVC指定storageclass为新创建的storageClassName
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: csi-pvc-pfs-2
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName: pfs-sc-2
resources:
requests:
storage: 50Gi # 用户指定PVC存储空间
2.2 静态挂载在PV参数中填入另一个PFS实例相关信息即可
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-pv-pfs
spec:
accessModes:
- ReadWriteMany
storageClassName:
capacity:
storage: 100Gi
csi:
driver: csi-clusterfileplugin
volumeHandle: data-id
volumeAttributes:
parentDir: / #必填,自定义路径
path: /exist/some/dir #必填,指定需要挂载的路径,为FPS实例相对parentDir的目录
clusterIP: "" #必填,PFS实例连接地址
clusterPort: "8888" #必填,当前端口固定为8888
PFS配置项示例
示例1
parentDir:"/kubernetes"
如果部署storageClass或者静态pv时填写上述配置,则动态创建的PV在pfs中的路径为/kubernetes/pvc-xxxx-xxxx-xxxx-xxxx
;静态PV在pfs中的path路径必须位于/kubernetes
路径下。
示例2
parentDir:"/"
如果安装时填写上述配置,则动态创建的PV在pfs中的路径为/pvc-xxxx-xxxx-xxxx-xxxx
;静态PV在pfs中的path路径必须位于/
路径下。