挂载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配置项补充示例:
pfs:
parentDir:"/kubernetes"
cluster:"pfs"
如果安装时填写上述配置,则动态创建的PV在pfs中的路径为/kubernetes/pfs/pvc-xxxx-xxxx-xxxx-xxxx;静态PV在pfs中的路径必须位于/kubernetes路径下。
完成配置项填写后,点击确定即可安装。
检查插件状态
通过kubectl命令行工具,检查插件Pod状态都为Running,StorageClass 已正确创建。
$ kubectl get pod -n kube-system | grep pfs
$ kubectl get sc pfs-sc
如果遇到插件Pod无法正常运行的情况,请提交产品类型为CCE的工单人工处理,提交工单时类型选择集群存储问题,并请提供如下信息
- CCE集群所在地域;
- CCE集群ID(cce-开头);
- PFS文件系统ID(pfs-开头);
- 具体的问题描述,如PFS插件Pod状态异常/storageClass未创建。
配置示例
动态挂载
- 创建PVC,注意storageClassName需要指定为上述安装插件时填写的storageClass名称。
# 按需指定PVC存储空间
$ cat >pfs-pvc.yaml <<EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: csi-pvc-pfs
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName: pfs-sc
resources:
requests:
storage: 50Gi # 用户指定PVC存储空间
EOF
$ kubectl create -f pfs-pvc.yaml
- 检查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
- 在 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
静态挂载
- 创建静态PV和PVC。
通过 pv.spec.csi.volumeAttributes.path 指定需要挂载的路径,该路径为相对于安装插件时填写的parentDir路径的相对路径。
注意storageClassName需要指定为上述安装插件时填写的storageClass不同的名称,防止被动态创建流程接管。不要求该storageClass在集群中存在,只要PV和PVC的storageClassName一致即可,否则PV和PVC无法互相绑定。
例如,按照下述示例yaml创建,则该PV在pfs中的路径为 /kubernetes/exist/some/dir。如果对应的路径不存在,在挂载PV时会自动创建该路径。
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-pv-pfs
spec:
accessModes:
- ReadWriteMany
storageClassName: pfs-static-sc
capacity:
storage: 100Gi
csi:
driver: csi-clusterfileplugin
volumeHandle: data-id
volumeAttributes:
# the path is the related path to parentDir
path: exist/some/dir
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: static-pvc-pfs
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName: pfs-static-sc
resources:
requests:
storage: 100Gi
- 检查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
- 在 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