搜索本产品文档关键词
挂载PFS并行文件存储
所有文档
menu

容器实例 BCI

挂载PFS并行文件存储

PFS 概述

并行文件存储服务PFS (Parallel Filesystem Service),是百度智能云提供的完全托管、简单可扩展的并行文件存储系统,针对高性能计算场景提供亚毫秒级的访问能力和高IOPS的数据读写请求能力。同时,百度智能云PFS提供简单、易操作的接口,免去部署、维护费用的同时,最大化提升您的业务效率。更多信息参见PFS说明

注意:
挂载PFS并行文件存储功能正在内测中,如需使用可提交工单申请。

提前准备

创建PFS实例

  1. 创建PFS,操作步骤请参考创建并行文件系统

    注意:
    PFS实例须与容器集群处于同一VPC内。

  2. 从页面上获取PFS连接地址,以备后续部署存储插件时使用。
    PFS1.png

部署存储插件

  1. 依次选择:容器引擎 CCE -> Helm 模版 -> 百度智能云模版,通过模版名称 cce-csi-pfs-plugin 搜索模版。
    PFS2.png
  2. 点击安装并填写相应的参数。
    PFS3.png
  • 实例名称:插件实例名称,例:pfs-csi;
  • 部署集群:选择需要部署 PFS CSI 插件的容器集群;
  • 命名空间:管理实例的 helm 元数据的命名空间,例:kube-system;
  • pfs.configEndpoint: 填写从PFS页面上获取的PFS连接地址;
  • pfs.storageClass: 创建的StorageClass属性

    • name: storageClass名称
    • default: 是否作为集群默认StorageClass
    • reclaimPolicy: PV回收策略,支持Delete或Retain。
  • pfs.cluster: 动态创建的PV在parentDir下的子路径。例如对于多个不同的CCE集群挂载同一个PFS实例的场景,可以在不同CCE集群中安装时指定为不同的值,这样各集群动态创建的PV就在不同的目录下。
  • pfs.parentDir: 代表CSI有权限读写的子路径,需要使用静态PV挂载的路径必须在这个路径之内,动态创建的PV则会在这个路径下的cluster子目录内自动创建新的路径。可以填 /(根目录)或者其它目录,默认为 /kubernetes。挂载前需确认该路径已创建,并且已经对CCE集群机器授权。

    Q1:如何创建parentDir?
    A1:在PFS所在VPC内找一台可登录的BCC/BBC机器进行目录创建操作,仅第一次在该PFS实例中使用到该目录时操作即可。创建操作可以通过在主机上挂载PFS实例后,手动在挂载点内创建目录的方式实现。
    Q2:parentDir如何对CCE集群授权?
    A2:对CCE集群授权请提交工单人工处理,提交工单时请按需提供如下信息:

    • 工单标题:CCE使用PFS,parentDir对CCE集群授权
    • PFS实例所在地域:如 “北京”
    • PFS实例ID:如 “pfs-xxx”
    • parentDir:如 “/kubernetes”
  • pfs.provisioner: 动态创建时使用的Provisioner名称。
  • nodes:如果部署集群的节点的时候,指定了 kubelet 的数据目录,需要填写具体使用的数据目录到该列表,否则保持默认即可;
    pfs配置项补充示例:
Plain Text
1pfs:
2  parentDir:"/kubernetes"
3  cluster:"pfs"

如果安装时填写上述配置,则动态创建的PV在pfs中的路径为/kubernetes/pfs/pvc-xxxx-xxxx-xxxx-xxxx;静态PV在pfs中的路径必须位于/kubernetes路径下。
完成配置项填写后,点击确定即可安装。

检查插件状态

通过kubectl命令行工具,检查插件Pod状态都为Running,StorageClass 已正确创建。

Plain Text
1$ kubectl get pod -n kube-system | grep pfs
2$ kubectl get sc pfs-sc

如果遇到插件Pod无法正常运行的情况,请提交产品类型为CCE的工单人工处理,提交工单时类型选择集群存储问题,并请提供如下信息

  • CCE集群所在地域;
  • CCE集群ID(cce-开头);
  • PFS文件系统ID(pfs-开头);
  • 具体的问题描述,如PFS插件Pod状态异常/storageClass未创建。

配置示例

动态挂载

  1. 创建PVC,注意storageClassName需要指定为上述安装插件时填写的storageClass名称。
Plain Text
1# 按需指定PVC存储空间
2$ cat >pfs-pvc.yaml <<EOF
3kind: PersistentVolumeClaim
4apiVersion: v1
5metadata:
6  name: csi-pvc-pfs
7  namespace: default
8spec:
9  accessModes:
10    - ReadWriteMany
11  storageClassName: pfs-sc
12  resources:
13    requests:
14      storage: 50Gi # 用户指定PVC存储空间
15EOF
16$ kubectl create -f pfs-pvc.yaml
  1. 检查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
  1. 在 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和PVC。
    通过 pv.spec.csi.volumeAttributes.path 指定需要挂载的路径,该路径为相对于安装插件时填写的parentDir路径的相对路径。
    注意storageClassName需要指定为上述安装插件时填写的storageClass不同的名称,防止被动态创建流程接管。不要求该storageClass在集群中存在,只要PV和PVC的storageClassName一致即可,否则PV和PVC无法互相绑定。
    例如,按照下述示例yaml创建,则该PV在pfs中的路径为 /kubernetes/exist/some/dir。如果对应的路径不存在,在挂载PV时会自动创建该路径。
Plain Text
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4  name: static-pv-pfs
5spec:
6  accessModes:
7  - ReadWriteMany
8  storageClassName: pfs-static-sc
9  capacity:
10    storage: 100Gi
11  csi:
12    driver: csi-clusterfileplugin
13    volumeHandle: data-id
14    volumeAttributes:
15      # the path is the related path to parentDir
16      path: exist/some/dir
17
18---
19kind: PersistentVolumeClaim
20apiVersion: v1
21metadata:
22  name: static-pvc-pfs
23  namespace: default
24spec:
25  accessModes:
26    - ReadWriteMany
27  storageClassName: pfs-static-sc
28  resources:
29    requests:
30      storage: 100Gi
  1. 检查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
  1. 在 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
上一篇
挂载ConfigMap数据卷
下一篇
容器配置