对于有状态应用实例需要持久化状态,每个实例有其独特的身份和持久化的数据存储。有状态应用的存储使用跟其他的工作负载存在差异。
使用方法
有状态应用PVC使用方法选择包括:已有存储卷申明(PVC)和存储卷申明模版(VolumeClaimTemplate)。
已有存储卷声明(PVC)方式较少使用,适用于有状态工作负载的多个副本共享同一PVC的场景。但实际需求中,要求每个副本具备独立存储的情况并不常见。
存储卷声明模板(VolumeClaimTemplate)是有状态工作负载特有的配置项。通过在该工作负载中定义模板,K8S会在创建每个副本时自动生成一个与之对应的PVC,命名规则为
{存储声明模板名称}-{有状态工作负载名称}-{序号}。本文将重点阐述此方法。
注意
有状态工作负载删除后,其关联的PVC会保留。若用户确认不再需要,需手动删除这些PVC。(可通过启用K8S特性门控StatefulSetAutoDeletePVC为true,实现有状态工作负载删除后自动清理PVC)。
若不删除PVC,后续在同一命名空间内创建同名有状态工作负载并使用同名存储卷声明模板时,新工作负载将自动复用原有的PVC。
点击“创建存储卷申明模版”.
定义模版的存储申明类型、已有存储类、容量、卷模式、访问模式.
存储申明类型: 天翼云各类型的产品,用户根据需要自行选择对应的产品。
已有存储类: 用户需要提前创建好产品对应的存储类,用于动态分配。
容量: 存储容量大小
卷模式:
文件系统(Filesystem):默认方式,该类型卷会被 Pod 挂载(Mount) 到某个目录。 如果卷的存储来自某块设备而该设备目前为空,Kuberneretes 会在第一次挂载卷之前在设备上创建文件系统。
块设备(Block): 这类卷以块设备的方式交给 Pod 使用,其上没有任何文件系统。 这种模式对于为 Pod 提供一种使用最快可能方式来访问卷而言很有帮助, Pod 和卷之间不存在文件系统层。目前仅云硬盘支持该功能
访问模式:
单机读写(ReadWriteOnce):卷可以被一个节点以读写方式挂载
多机只读(ReadOnlyMany):卷可以被多个节点以只读方式挂载
多机读写(ReadWriteMany):卷可以被多个节点以读写方式挂载
创建了一个有状态负载test,存储卷申明模版如下:
有状态工作负载成功启动。
查看pod的yaml,可以看到test-1的pod,使用了disk-test-1这个PVC。
PVC列表中,两个PVC均被创建出来并且bound。