持久卷和存储类型

本教程对 PV、PVC 以及存储类型 (Storage Class) 的基本概念进行说明,并演示集群管理员如何管理 KubeSphere 中的存储类型和持久化存储卷。

介绍

PersistentVolume (PV) 是集群中的一块存储,可以由管理员事先供应,或者使用存储类型来动态供应。PV 是像存储卷 (Volume) 一样的存储卷插件,但是它的生命周期独立于任何使用该 PV 的容器组。PV 可以静态供应或动态供应。

PersistentVolumeClaim (PVC) 是用户对存储的请求。它与容器组类似,容器组会消耗节点资源,而 PVC 消耗 PV 资源。

KubeSphere 支持基于存储类型的动态卷供应,以创建 PV。

存储类型是管理员描述其提供的存储类型的一种方式。不同的类型可能会映射到不同的服务质量等级或备份策略,或由集群管理员制定的任意策略。每个存储类型都有一个 Provisioner,用于决定使用哪个存储卷插件来供应 PV。该字段必须指定。有关使用哪一个值,请参阅 Kubernetes 官方文档或与您的存储管理员确认。

下表总结了各种 Provisioner(存储系统)常用的存储卷插件。

类型描述信息
In-tree内置并作为 Kubernetes 的一部分运行,例如 RBDGlusterFS。有关此类插件的更多信息,请参见 Provisioner
External-provisioner独立于 Kubernetes 部署,但运行上类似于树内 (in-tree) 插件,例如 NFS 客户端。有关此类插件的更多信息,请参见 External Storage
CSI容器存储接口,一种将存储资源暴露给 CO(例如 Kubernetes)上的工作负载的标准,例如 QingCloud-CSICeph-CSI。有关此类插件的更多信息,请参见 Drivers

准备工作

您需要一个拥有集群管理权限的帐户。例如,您可以直接以 admin 身份登录控制台,或者创建一个拥有该权限的新角色并将它分配至一个用户。

管理存储类型

  1. 点击左上角的平台管理,然后选择集群管理

  2. 如果您启用了多集群功能并导入了成员集群,可以选择一个特定集群。如果您未启用该功能,请直接参考下一步。

  3. 集群管理页面,您可以在存储下的存储类型中创建、更新和删除存储类型。

  4. 要创建一个存储类型,请点击创建,在弹出窗口中输入基本信息。完成后,点击下一步

  5. 在 KubeSphere 中,您可以直接为 QingCloud-CSIGlusterFSCeph RBD 创建存储类型。或者,您也可以根据需求为其他存储系统创建自定义存储类型。请选择一个类型,然后点击下一步

常用设置

有些设置在存储类型之间常用且共享。您可以在控制台上的仪表板参数中找到这些设置,存储类型清单文件中也通过字段或注解加以显示。您可以在右上角点击编辑 YAML,查看 YAML 格式的配置文件。下表是对 KubeSphere 中一些常用字段的参数说明。

参数描述
存储卷扩容在清单文件中由 allowVolumeExpansion 指定。若设置为 true,PV 则被配置为可扩容。有关更多信息,请参见允许卷扩展
回收机制在清单文件中由 reclaimPolicy 指定。可设置为 DeleteRetain(默认)。有关更多信息,请参见回收策略
存储系统在清单文件中由 provisioner 指定。它决定使用什么存储卷插件来供应 PV。有关更多信息,请参见 Provisioner
访问模式在清单文件中由 metadata.annotations[storageclass.kubesphere.io/supported-access-modes] 指定。它会向 KubeSphere 表明支持的访问模式
存储卷绑定模式在清单文件中由 volumeBindingMode 指定。它决定使用何种绑定模式。延迟绑定即存储卷创建后,当使用此存储卷的容器组被创建时,此存储卷绑定到一个存储卷实例。立即绑定即存储卷创建后,立即绑定到一个存储卷实例。

对于其他设置,您需要为不同的存储插件提供不同的信息,它们都显示在清单文件的 parameters 字段下。下面将进行详细说明,您也可以参考 Kubernetes 官方文档的参数部分。

QingCloud CSI

QingCloud CSI 是 Kubernetes 上的 CSI 插件,供青云QingCloud 存储服务使用。KubeSphere 控制台上可以创建 QingCloud CSI 的存储类型。

准备工作

  • QingCloud CSI 在青云QingCloud 的公有云和私有云上均可使用。因此,请确保将 KubeSphere 安装至二者之一,以便可以使用云存储服务。
  • KubeSphere 集群上已经安装 QingCloud CSI 插件。有关更多信息,请参见安装 QingCloud CSI

设置

参数描述信息
类型在青云云平台中,0 代表性能型硬盘;2 代表容量型硬盘;3 代表超高性能型硬盘;5 代表企业级分布式 SAN(NeonSAN)型硬盘;100 代表基础型硬盘;200 代表 SSD 企业型硬盘。
容量上限存储卷容量上限。
增量值存储卷容量增量。
容量下限存储卷容量下限。
文件系统类型支持 ext3、ext4 和 XFS。默认类型为 ext4。
标签为存储卷添加标签。使用半角逗号(,)分隔多个标签。

有关存储类型参数的更多信息,请参见 QingCloud CSI 用户指南

GlusterFS

GlusterFS 是 Kubernetes 上的一种树内存储插件,即您不需要额外安装存储卷插件。

准备工作

已经安装 GlusterFS 存储系统。有关更多信息,请参见 GlusterFS 安装文档

设置

参数描述
REST URL供应存储卷的 Heketi REST URL,例如,<Heketi 服务集群 IP 地址>:<Heketi 服务端口号>。
集群 IDGluster 集群 ID。
启用 REST 认证Gluster 启用对 REST 服务器的认证。
REST 用户Gluster REST 服务或 Heketi 服务的用户名。
密钥所属项目Heketi 用户密钥的所属项目。
密钥名称Heketi 用户密钥的名称。
GID 最小值存储卷的 GID 最小值。
GID 最大值存储卷的 GID 最大值。
存储卷类型存储卷的类型。该值可为 none,replicate:<副本数>,或 disperse:<数据>:<冗余数>。如果未设置该值,则默认存储卷类型为 replicate:3。

有关存储类型参数的更多信息,请参见 Kubernetes 文档中的 GlusterFS

Ceph RBD

Ceph RBD 也是 Kubernetes 上的一种树内存储插件,即 Kubernetes 中已经安装该存储卷插件,但您必须在创建 Ceph RBD 的存储类型之前安装其存储服务器。

由于 hyperkube 镜像自 1.17 版本开始已被弃用,树内 Ceph RBD 可能无法在不使用 hyperkube 的 Kubernetes 上运行。不过,您可以使用 RBD Provisioner 作为替代,它的格式与树内 Ceph RBD 相同。唯一不同的参数是 provisioner(即 KubeSphere 控制台上的存储系统)。如果您想使用 RBD Provisioner,provisioner 的值必须为 ceph.com/rbd(在存储系统中输入该值,如下图所示)。如果您使用树内 Ceph RBD,该值必须为 kubernetes.io/rbd

准备工作

  • 已经安装 Ceph 服务器。有关更多信息,请参见 Ceph 安装文档
  • 如果您选择使用 RBD Provisioner,请安装插件。社区开发者提供了 RBD Provisioner 的 Chart,您可以通过 Helm 用这些 Chart 安装 RBD Provisioner。

设置

参数描述
monitorsCeph 集群 Monitors 的 IP 地址。
adminIdCeph 集群能够创建卷的用户 ID。
adminSecretNameadminId 的密钥名称。
adminSecretNamespaceadminSecret 所在的项目。
poolCeph RBD 的 Pool 名称。
userIdCeph 集群能够挂载卷的用户 ID。
userSecretNameuserId 的密钥名称。
userSecretNamespaceuserSecret 所在的项目。
文件系统类型存储卷的文件系统类型。
imageFormatCeph 卷的选项。该值可为 12,选择 2 后需要填写 imageFeatures
imageFeaturesCeph 集群的额外功能。仅当设置 imageFormat2 时,才需要填写该值。

有关存储类型参数的更多信息,请参见 Kubernetes 文档中的 Ceph RBD

自定义存储类型

如果 KubeSphere 不直接支持您的存储系统,您可以为存储系统创建自定义存储类型。下面的示例向您演示了如何在 KubeSphere 控制台上为 NFS 创建存储类型。

NFS 介绍

NFS(网络文件系统)广泛用于带有 NFS-Client(External-Provisioner 存储卷插件)的 Kubernetes。您可以点击自定义来创建 NFS-Client 的存储类型。

备注

不建议您在生产环境中使用 NFS 存储(尤其是在 Kubernetes 1.20 或以上版本),这可能会引起 failed to obtain lockinput/output error 等问题,从而导致容器组 CrashLoopBackOff。此外,部分应用不兼容 NFS,例如 Prometheus 等。

准备工作

  • 有一个可用的 NFS 服务器。
  • 已经安装存储卷插件 NFS-Client。社区开发者提供了 NFS-Client 的 Chart,您可以通过 Helm 用这些 Chart 安装 NFS-Client。

常用设置

参数描述信息
存储卷扩容在清单文件中由 allowVolumeExpansion 指定。选择
回收机制在清单文件中由 reclaimPolicy 指定。
存储系统在清单文件中由 provisioner 指定。如果您使用 NFS-Client 的 Chart 来安装存储类型,可以设为 cluster.local/nfs-client-nfs-client-provisioner
访问模式在清单文件中由 .metadata.annotations.storageclass.kubesphere.io/supported-access-modes 指定。默认 ReadWriteOnceReadOnlyManyReadWriteMany 全选。
存储卷绑定模式在清单文件中由 volumeBindingMode 指定。它决定使用何种绑定模式。延迟绑定即存储卷创建后,当使用此存储卷的容器组被创建时,此存储卷绑定到一个存储卷实例。立即绑定即存储卷创建后,立即绑定到一个存储卷实例。

参数

描述信息
archiveOnDelete删除时存档 PVCtrue

存储类型详情页

创建存储类型后,点击此存储类型的名称前往其详情页。在详情页点击编辑 YAML 来编辑此存储类型的清单文件,或点击更多操作并在下拉菜单中选择一项操作:

  • 设为默认存储类型:将此存储类型设为集群的默认存储类型。一个 KubeSphere 集群中仅允许设置一个默认存储类型。
  • 存储卷管理:管理存储卷功能,包括:存储卷克隆存储卷快照存储卷扩容。开启任意功能前,请联系系统管理员确认存储系统是否支持这些功能。
  • 删除:删除此存储类型并返回上一页。

存储卷页签上,查看与此存储类型相关联的存储卷。

管理存储卷

存储类型创建后,您可以使用它来创建存储卷。您可以在 KubeSphere 控制台上的存储管理下面的存储卷中列示、创建、更新和删除存储卷。有关更多详细信息,请参见存储卷管理

管理存储卷实例

KubeSphere 中的存储卷即 Kubernetes 中的持久卷声明,存储卷实例即 Kubernetes 中的持久卷

存储卷实例列表页面

  1. admin 身份登录 KubeSphere Web 控制台。点击左上角的平台管理,选择集群管理,然后在左侧导航栏点击存储下的存储卷
  2. 存储卷页面,点击存储卷实例页签,查看存储卷实例列表页面。该页面提供以下信息:
    • 名称:存储卷实例的名称,在该存储卷实例的清单文件中由 .metadata.name 字段指定。
    • 状态:存储卷实例的当前状态,在该存储卷实例的清单文件中由 .status.phase 字段指定,包括:
      • 可用:存储卷实例可用,尚未绑定至存储卷。
      • 已绑定:存储卷实例已绑定至存储卷。
      • 删除中:正在删除存储卷实例。
      • 失败:存储卷实例不可用。
    • 容量:存储卷实例的容量,在该存储卷实例的清单文件中由 .spec.capacity.storage 字段指定。
    • 访问模式:存储卷实例的访问模式,在该存储卷实例的清单文件中由 .spec.accessModes 字段指定,包括:
      • RWO:存储卷实例可挂载为单个节点读写。
      • ROX:存储卷实例可挂载为多个节点只读。
      • RWX:存储卷实例可挂载为多个节点读写。
    • 回收策略:存储卷实例的回收策略,在该存储卷实例的清单文件中由 .spec.persistentVolumeReclaimPolicy 字段指定,包括:
      • Retain:删除存储卷后,保留该存储卷实例,需要手动回收。
      • Delete:删除该存储卷实例,同时从存储卷插件的基础设施中删除所关联的存储设备。
      • Recycle:清除存储卷实例上的数据,使该存储卷实例可供新的存储卷使用。
    • 创建时间:存储卷实例的创建时间。
  3. 点击存储卷实例右侧的 持久卷和存储类型 - 图1 并在下拉菜单中选择一项操作:
    • 编辑:编辑存储卷实例的 YAML 文件。
    • 查看 YAML:查看存储卷实例的 YAML 文件。
    • 删除:删除存储卷实例。处于已绑定状态的存储卷实例不可删除。

存储卷实例详情页面

  1. 点击存储卷实例的名称,进入其详情页面。
  2. 在详情页面,点击编辑信息以编辑存储卷实例的基本信息。点击更多操作,在下拉菜单中选择一项操作:
    • 查看 YAML:查看存储卷实例的 YAML 文件。
    • 删除:删除存储卷实例并返回列表页面。处于已绑定状态的存储卷实例不可删除。
  3. 点击资源状态页签,查看存储卷实例所绑定的存储卷。
  4. 点击元数据页签,查看存储卷实例的标签和注解。
  5. 点击事件页签,查看存储卷实例的事件。