自定义云存储StorageClass
默认存储类
存储插件cstor-csi安装完成后,会默认根据当前资源池已上线云存储产品情况创建默认存储类,用户可以使用默认存储类创建持久卷声明。
默认创建的存储类名称、对应驱动及应用场景等参见cstor-csi插件中“插件使用”介绍。
自定义存储类
当默认存储类不满足业务需求,比如用户是从自建Kubernetes或其他Kubernetes服务迁移到到天翼云云容器引擎时,期望使用与云业务同名StorageClass或者用户期望自定义存储类的参数时,用户可以选择自定义云存储类型StorageClass。
通过自定义存储类,用户可以实现定制StorageClass名称、云存储类型、绑定策略、挂载选项等。具体各云存储产品描述如下:
- 云硬盘:通过控制台或通过kubectl命令行自定义存储类参见使用云盘动态存储卷;
- 弹性文件:通过控制台或通过kubectl命令行自定义存储类参见使用SFS动态存储卷;
- 对象存储:通过控制台或通过kubectl命令行自定义存储类参见使用ZOS动态存储卷。
自定义通用StorageClass
云容器引擎除支持通过cstor-csi插件使用云存储产品之外,也支持用户定制安装CSI,并自定义创建存储类。
使用限制
根据业务场景需要自行安装CSI,并确定存储驱动名称。具体CSI插件安装有两种方式:
1、CSI插件为Helm Chart形态:通过模版市场上传CSI插件Chart包,并通过模版实例来发布CSI插件;
2、CSI插件为独立工作负载形态:通过云容器引擎服务“工作负载”自行创建DaemonSet、Deployment或者Statefulset;
自定义存储类
通过控制台创建流程如下:
- 登录“云容器引擎”管理控制台;
- 在集群列表页点击进入指定集群;
- 进入主菜单“存储”——“存储类”,单击左上角“创建”;
- 在创建对话框,配置存储类StorageClass的相关参数。配置项说明如下:
配置项 | 说明 |
---|---|
名称 | StorageClass的名称。 |
存储类型 | 这里选择“通用” |
存储驱动 | 对应StorageClass yaml中provisioner,配置为自行安装CSI对应的存储驱动名称 |
回收策略 | 回收策略,默认为Deleted。 1、Retained(保留):用户可以手动回收资源。当PVC对象被删除时,PV卷仍然存在,对应的数据卷被视为"已释放(released)"。 2、Deleted(删除):对于支持Delete回收策略的卷插件,删除动作会将PV对象从Kubernetes中移除,同时也会从外部基础设施中移除所关联的存储资产。 如果对数据安全性要求高,推荐使用Retain方式,以免误删数据。 |
绑定策略 | 绑定策略,默认为Immediate。 1、Immediate模式:表示一旦创建了PVC,也就完成了卷绑定和动态供应。对于由于拓扑限制而非集群所有节点可达的存储后端,PV会在不知道Pod调度要求的情况下绑定或者制备。 2、WaitForFirstConsumer模式:该模式将延迟PV的绑定和制备,直到使用该PVC的Pod被创建。PV会根据Pod调度约束指定的拓扑来选择或供应。 |
支持扩展 | 由自行安装CSI支持情况决定 |
参数 | 根据自行安装CSI支持情况及业务需求配置 |
挂载选项 | 挂载参数,用户可根据自己的情况实际定制相关参数。 |
- 参数配置完成后,点击“确定”。创建成功后,可以在存储类列表查看。
通用存储类YAML示例如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: {StorageClassName}
provisioner: {YOUR-CSI-PROVISIONER}
parameters:
{PARAM-KEY}: {PARAM-VALUE}
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
自定义通用PVC
当自定义存储类创建完成后,可以通过自定义PVC的方式,选择存储类,动态制备PV。
- 登录“云容器引擎”管理控制台;
- 在集群列表页点击进入指定集群;
- 进入主菜单“存储”——“持久卷声明”,单击左上角“创建持久卷声明”;
- 在创建对话框,配置持久卷声明PVC的相关参数。配置项说明如下:
配置项 | 说明 |
---|---|
名称 | PVC的名称 |
存储声明类型 | 这里选择“通用” |
分配模式 | 这里选择“使用存储类” |
StorageClass名称 | 选择上一步创建的自定义StorageClass |
容量 | 可以根据需求自定义容量 |
卷模式 | 支持两种卷模式: 1、文件系统(Filesystem):默认方式,该类型卷会被Pod挂载(Mount)到某个目录。如果卷的存储来自某块设备而该设备目前为空, Kuberneretes会在第一次挂载卷之前在设备上创建文件系统。 2、块设备(Block):这类卷以块设备的方式交给Pod使用,其上没有任何文件系统。这种模式对于为Pod提供一种使用最快可能方式来访问卷而言很有帮助,Pod和卷之间不存在文件系统层。 |
访问模式 | 支持选择以下访问模式: 1、ReadWriteOnce:卷可以被一个节点以读写方式挂载 2、ReadOnlyMany:卷可以被多个节点以只读方式挂载 3、ReadWriteMany:卷可以被多个节点以读写方式挂载 |
- 参数配置完成后,点击“确定”。创建成功后,可以在持久卷声明列表查看。
- 进入持久卷声明列表页,等待PVC状态为“已绑定” 。此时,进入主菜单“存储”——“持久卷“,可以看到对应的PV创建。
- 如果PVC一直未绑定,可以查看进入对应PVC详情页查看事件,或者查看CSI日志进行定位。
通用持久卷声明YAML示例如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {PVC-NAME}
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: {YOUR-STORAGECLASS-NAME}
自定义通用PV
当需要手动静态制备PV时,可以通过自定义通用PV的方式。使用时,通过创建PVC时使用分配模式为“已有PV”进行绑定。
- 登录“云容器引擎”管理控制台;
- 在集群列表页点击进入指定集群;
- 进入主菜单“存储”——“持久卷”,单击左上角“创建持久卷”;
- 在创建对话框,配置持久卷PV的相关参数。配置项说明如下:
配置项 | 说明 |
---|---|
名称 | PV的名称 |
持久卷 | 这里选择“通用” |
容量 | 可以根据需求自定义容量 |
访问模式 | 1、ReadWriteOnce:卷可以被一个节点以读写方式挂载 2、ReadOnlyMany:卷可以被多个节点以只读方式挂载 3、ReadWriteMany:卷可以被多个节点以读写方式挂载 |
回收策略 | PV对象的回收策略表示当PVC释放时如何处理该数据卷。 回收策略包括: 1、Retained(保留):用户可以手动回收资源。当PVC对象被删除时,PV卷仍然存在,对应的数据卷被视为"已释放(released)"。 2、Deleted(删除):对于支持Delete回收策略的卷插件,删除动作会将PV对象从Kubernetes中移除,同时也会从外部基础设施中移除所关联的存储资产。 |
标签 | 用于对PV对象进行标记和分类的元数据属性,可以赋予PV以自定义的属性或标识。 |
高级选项 | 支持选择持久卷类型。PV持久卷是用插件的形式来实现的,目前控制台开放两种类型: 1、NFS:能将 NFS (网络文件系统)挂载到Pod中。需要指定NFS Server地址、NFS目录。 2、Local:local卷代表的是某个被挂载的本地存储设备,例如磁盘、分区或者目录。local卷只能用作静态创建的持久卷,不支持动态配置。 local类型需要指定LocalPV所在节点及目录。 |
- 参数配置完成后,点击“确定”。创建成功后,可以在持久卷列表查看,此时PV状态为“可用”。
- 进入主菜单“存储”——“持久卷声明”,单击左上角“创建持久卷声明”,分配模式选择“已有持久卷”,持久卷名称选择上述自定义PV名称;
- 参数配置完成后,点击“确定”。创建成功后,可以在持久卷声明列表查看。
- 进入持久卷声明列表页,等待PVC状态为“已绑定” 。
通用持久卷YAML示例如下,以NFS类型为例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: {PV-NAME}
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retained
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: {NFS-SERVER-ADDRESS}