挂载PFS并行文件存储
PFS 概述
并行文件存储服务PFS (Parallel Filesystem Service),是百度智能云提供的完全托管、简单可扩展的并行文件存储系统,针对高性能计算场景提供亚毫秒级的访问能力和高IOPS的数据读写请求能力。同时,百度智能云PFS提供简单、易操作的接口,免去部署、维护费用的同时,最大化提升您的业务效率。更多信息参见PFS说明。
注意:
挂载PFS并行文件存储功能正在内测中,如需使用可提交工单申请。
提前准备
创建PFS实例
- 
创建PFS,操作步骤请参考创建并行文件系统。
注意:
PFS实例须与容器集群处于同一VPC内。 - 从页面上获取PFS连接地址,以备后续部署存储插件时使用。
   
部署存储插件
- 依次选择:容器引擎 CCE -> Helm 模版 -> 百度智能云模版,通过模版名称 cce-csi-pfs-plugin 搜索模版。
   - 点击安装并填写相应的参数。
   
- 实例名称:插件实例名称,例: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配置项补充示例: 
1pfs:
2  parentDir:"/kubernetes"
3  cluster:"pfs"
            如果安装时填写上述配置,则动态创建的PV在pfs中的路径为/kubernetes/pfs/pvc-xxxx-xxxx-xxxx-xxxx;静态PV在pfs中的路径必须位于/kubernetes路径下。
完成配置项填写后,点击确定即可安装。  
检查插件状态
通过kubectl命令行工具,检查插件Pod状态都为Running,StorageClass 已正确创建。
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未创建。
 
配置示例
动态挂载
- 创建PVC,注意storageClassName需要指定为上述安装插件时填写的storageClass名称。
 
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
            - 检查PVC状态为Bound。
 
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
            - 在 Pod 中挂载PVC,要求 Pod 和 PVC 在同一个 namespace 下。
 
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
            静态挂载
- 
创建静态PV和PVC。
通过 pv.spec.csi.volumeAttributes.path 指定需要挂载的路径,该路径为相对于安装插件时填写的parentDir路径的相对路径。- 注意storageClassName需要指定为上述安装插件时填写的storageClass不同的名称,防止被动态创建流程接管。不要求该storageClass在集群中存在,只要PV和PVC的storageClassName一致即可,否则PV和PVC无法互相绑定。
 - 例如:按照下述示例yaml创建,则该PV在pfs中的路径为 /kubernetes/exist/some/dir。如果对应的路径不存在,在挂载PV时会自动创建该路径。
 
 
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
            - 检查PVC状态为Bound,并且与对应的PV绑定。
 
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
            - 在 Pod 中挂载PVC,要求 Pod 和 PVC 在同一个 namespace 下。
 
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
            