云容器引擎支持使用天翼云海量文件存储持久卷。cstor-csi插件支持使用海量文件服务动态存储卷和静态存储卷,通过将存储卷挂载到容器指定目录下,以满足数据持久化需求。
前提条件
已创建容器集群
已在插件市场安装存储插件cstor-csi,插件版本>=3.6.0,且插件正常运行。(建议使用>=4.0的CSI版本)
使用限制
参见海量文件使用限制
通过控制台使用海量文件动态存储卷
1、创建存储类(StorageClass)
登录“云容器引擎”管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“存储”——“存储类”,单击左上角“创建”;
在创建对话框,配置存储类StorageClass的相关参数。配置项说明如下:
| 配置项 | 说明 |
|---|---|
| 名称 | StorageClass的名称。 |
| 存储类型 | 当前支持云盘、弹性文件、对象存储、并行文件、海量文件,这里选择海量文件。 具体创建页中展示的存储类型由当前资源池支持情况决定。 |
| 存储驱动 | 采用默认CSI驱动 |
| 模式 | 新建海量文件:每次创建持久卷申明时,均创建一个新的海量文件与之对应。 新建子目录:基于某个已经存在的海量文件,每次创建持久卷申明时,在这个海量文件上创建一个子目录与之对应。 |
| 计费模式 | 可以选择按需计费或者包年包月 |
| 回收策略 | 回收策略,默认为Deleted。
如果对数据安全性要求高,推荐使用Retain方式,以免误删数据。 |
| 绑定策略 | 绑定策略,默认为Immediate。
|
| 支持扩容 | 默认该开关是打开的,一般也建议打开。 如果关闭该开关,则使用该存储类的pvc,无法被扩容。 |
| 挂载选项 | 挂载参数,用户可根据自己的情况实际定制相关参数。 注意 请务必在挂载时使用noresvport参数,该参数可以在网络故障时自动切换端口,保障网络连接,防止文件系统卡住。挂载参数的说明参见 查看这里 |
| 参数 |
|
参数配置完成后,点击“确定”。创建成功后,可以在存储类列表查看。
2、创建持久卷声明(PVC)
进入主菜单“存储”——“持久卷声明”,单击左上角“创建持久卷声明”;
在创建对话框,配置持久卷声明PVC的相关参数。配置项说明如下:
| 配置项 | 说明 |
|---|---|
| 名称 | PVC的名称。 |
| 存储声明类型 | 当前支持云盘、弹性文件、对象存储、并行文件、海量文件,这里选择海量文件。 具体创建页中展示的存储类型由当前资源池支持情况决定。 |
| 是否指定存储类 | 在动态创建的场景下,需要指定存储类,并且选择上一步创建的存储类。 |
| 是否指定存储卷 | 在动态创建的场景下,无需指定存储卷。 |
| 容量 | 可以根据需求自定义容量,最小为100GB。 |
| 访问模式 |
|
参数配置完成后,点击“确定”。创建成功后,可以在持久卷声明列表查看。
进入持久卷声明列表页,等待PVC状态为“已绑定” 。此时,进入主菜单“存储”——“持久卷“,可以看到对应的PV创建 。
如果PVC一直未绑定,可以查看进入对应PVC详情页查看事件,或者查看cstor-csi日志进行定位。
3、创建工作负载
登录“云容器引擎”管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“工作负载”——“有状态”,单击左上角“创建SatefulSet”;
在创建对话框,数据存储栏中,选择添加存储卷,卷类型选择“已有存储卷申明(PVC)”,操作栏选择“选择已有存储申明”;根据自己需要设置挂载路径、子路径和权限,
参数说明:
挂载路径:存储挂载到容器后,容器内部显示的路径地址。不建议使用类似于/usr或者/tmp类似的已有的容器目录路径,可能会造成目录相互遮蔽。
子路径:需要挂载的存储源地址的子目录
权限:读写/只读
示例:将PVC“oceanfs”对应存储的subpath指向的子目录(subpath为空表示使用根目录),挂载到容器里的/test路径上。
所有的信息都配置完成后,单击“提交”,创建成功后,您就可以正常使用数据卷。
通过kubectl命令行使用海量文件动态存储卷
注意
- 以下配置仅支持CSI版本4.0及其以上,您可以先在插件市场对CSI插件升级,再按照以下配置编写yaml。
- 以下参数为建议配置,您可在存储产品的支持范围内,根据自身实际情况进行调整。
- 部分参数由于不常用,示例中以#开头,未放开该参数,如有需求,请您根据实际需求使用。
- 部分#开头的中文内容为内容解释,并非参数。
1、创建存储类(StorageClass)
使用kubectl连接集群,创建示例yaml文件sc-example.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: cstor-csi-oceanfs-massive-sc-sharepath
provisioner: oceanfs.csi.cstor.com
parameters:
type: massive
mode: sharePath
# 协议类型,当前仅支持nfs
protocol: nfs
# 是否创建使用VPCE网络的文件系统,不写该字段默认为false,表示不创建
# isVpce: "false"
# 包年包月的类型,当为year表示以年为单位,为month表示以月为单位,只能填写year或者month
# 如果没有这个字段,则默认为按需计费
# cycleType: year
# 包年包月的周期数,例如当cycleType为year,那么cycleCount为2则表示2年,只能填写正整数
# 当配置了cycleType,那么cycleCount才会生效
# cycleCount: "2"
# 选择拓扑区域,如果是天翼云iaas的存储产品,就是对应选择可用区,value填写存储openapi里的可用区的azName
# 当storageClass配置了volumeBindingMode: WaitForFirstConsume或者配置了allowedTopologies时,
# 那么PVC使用设置了该字段的storageClass,会创建报错
# topology.kubernetes.io/zone: cn-huadong1-jsnj1A-public-ctcloud
# 填写标签,根据自己需求填写,以逗号分隔,例如以下示例就是两对标签,
# 其中第一个标签key为ccse,value为plugin,另外一个标签key为cstor-csi-provison,value为yes
# 注意,此标签为存储侧的标签,并非容器侧的标签,最终只会在存储控制台展示。
# tags: "ccse:plugin,cstor-csi-provison:yes"
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
# mountOptions 支持nfs的相关配置
- vers=3
- proto=tcp
- async
- nolock
- noatime
- noresvport
- nodiratime
- wsize=1048576
- rsize=1048576
- timeo=300执行以下命令,创建StorageClass
kubectl apply -f sc-example.yaml查看创建的StorageClass:
登录“云容器引擎”管理控制台,在集群列表页点击进入指定集群。进入主菜单“存储”——“存储类”,在存储类列表查看。
2、创建持久卷声明(PVC)
使用kubectl连接集群,创建示例yaml文件pvc-example.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cstor-pvc-oceanfs-sharepath
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: cstor-csi-oceanfs-sc-sharepath执行以下命令,创建PVC
kubectl apply -f pvc-example.yaml查看创建的PVC:
登录“云容器引擎”管理控制台,在集群列表页点击进入指定集群。进入主菜单“存储”——“持久卷声明”,在列表查看。
3、创建工作负载
使用kubectl连接集群,创建示例yaml文件sts-example.yaml:
apiVersion: "apps/v1"
kind: "StatefulSet"
metadata:
name: "oceanfs-test"
namespace: "default"
spec:
podManagementPolicy: "OrderedReady"
replicas: 1
revisionHistoryLimit: 10
template:
spec:
containers:
- image: "nginx:1.25-alpine"
imagePullPolicy: "IfNotPresent"
name: "container1"
resources:
limits:
cpu: "100m"
memory: "256Mi"
requests:
cpu: "100m"
memory: "256Mi"
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts:
- mountPath: "/ccetmp"
name: "volume1"
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
schedulerName: "default-scheduler"
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: "volume1"
persistentVolumeClaim:
claimName: "cstor-pvc-oceanfs-sharepath"
updateStrategy:
rollingUpdate:
partition: 0
type: "RollingUpdate"执行以下命令,创建StatefulSet
kubectl apply -f sts-example.yaml查看创建的有状态负载:
登录“云容器引擎”管理控制台,在集群列表页点击进入指定集群。进入主菜单“工作负载”——“有状态”,在列表查看。
验证数据持久化
登录“云容器引擎”管理控制台。
在集群列表页点击进入指定集群。
进入主菜单“工作负载”——“有状态”,进入负载详情。
在Pod列表页,选择“远程登录”,进入到容器内执行以下命令:
1、向/ccsetmp 目录下写一个文件,执行
echo "Hello World" > /ccetmp/test.log2、查看/ccetmp目录下文件,执行ls /ccetmp,预期结果如下:
test.log退出“远程登录”,对上一步中的Pod执行“销毁重建”,等待Pod重新运行正常;
对新建Pod,继续执行“远程登录”,进入到容器内查看数据。执行cat /ccetmp/test.log,预期结果如下:
Hello World以上步骤说明,pod删除重建后,重新挂载存储卷,数据仍然存在,说明海量文件服务中的数据可持久化保存。