使用并行文件存储PFS
所有文档
menu

容器引擎 CCE

使用并行文件存储PFS

产品详情自助选购

容器引擎CCE支持通过创建PV/PVC,并为工作负载挂载数据卷方式使用百度智能云并行文件存储PFS。本文将介绍如何在集群中动态和静态挂载并行文件存储。

使用限制

  • 集群Kubernetes版本需大于或等于1.16。
  • PFS实例需要和集群在同一VPC内。
  • 当前PFS暂不支持arm架构的集群以及Ubuntu 18.04/16.04、baidulinux 3.0、RockyLinux 8.6操作系统的节点,如业务场景需要请提工单

前提条件

操作步骤

动态挂载并行文件存储

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  #必填,指定需要挂载的路径,为PFS实例相对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  #必填,指定需要挂载的路径,为PFS实例相对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路径必须位于/路径下。

上一篇
使用对象存储BOS
下一篇
使用并行文件存储PFS L2