存储卷

在项目中创建应用负载时,您可以为应用负载创建 PersistentVolumeClaim (PVC)。PVC 可用于创建存储请求,从而进一步为应用提供持久化存储。更具体地说,PersistentVolume 资源可用于管理持久化存储。

集群管理员需要用存储类型 (Storage Class) 配置 PersistentVolume。也就是说,要在项目中创建 PersistentVolumeClaim,您的集群中必须要有可用的存储类型。如果在安装 KubeSphere 时没有配置自定义存储类型,集群中将默认安装 OpenEBS 以提供本地持久卷。然而,OpenEBS 不支持动态存储卷供应。在生产环境中,建议您提前配置存储类型从而为应用提供持久化存储服务。

本教程介绍如何创建存储卷、挂载存储卷和通过存储卷详情页面使用存储卷功能。

准备工作

  • 您需要创建一个企业空间、一个项目和一个用户(例如 project-regular)。该用户必须已邀请至该项目,并具有 operator 角色。有关更多信息,请参阅创建企业空间、项目、用户和角色

  • 如需使用动态存储卷供应,您需要配置一个支持动态供应的存储类型

创建存储卷

存储卷页面创建的所有存储卷都是 PersistentVolumeClaim 对象。KubeSphere 将 PersistentVolumeClaim 绑定到满足您设定的请求条件(例如容量和访问模式)的 PersistentVolume。在创建应用负载时,您可以选择所需的存储卷并将其挂载到负载。

  1. project-regular 身份登录 KubeSphere Web 控制台并进入项目,在左侧导航栏中点击存储管理下的存储卷。页面上显示所有已挂载至项目工作负载的存储卷。

  2. 存储卷页面,点击创建以创建存储卷。

  3. 在弹出的对话框设置存储卷的名称(例如 demo-volume),然后点击下一步

    备注

    您可以在对话框右上角启用编辑 YAML 来查看存储卷的 YAML 清单文件,并通过直接编辑清单文件来创建存储卷。您也可继续执行后续步骤在控制台上创建存储卷。
  4. 存储设置页面,选择创建存储卷的方式。

    • 通过存储类型创建:您可以在 KubeSphere 安装前安装后配置存储类型。

    • 通过存储卷快照创建:如需通过快照创建存储卷,您必须先创建存储卷快照。

    选择通过存储类型创建。有关通过存储卷快照创建存储卷的更多信息,请参阅存储卷快照

  5. 从下拉列表中选择存储类型。本教程以青云QingCloud 平台提供的 csi-standard 标准存储类型为例。您可以根据需要选择其他存储类型。

  6. 由于一些 PersistentVolume 只支持特定的访问模式,页面上显示的访问模式会因您选择的存储类型而不同。访问模式一共有三种:

    • ReadWriteOnce:存储卷以单节点读写的形式挂载。
    • ReadOnlyMany:存储卷以多节点只读的形式挂载。
    • ReadWriteMany:存储卷以多节点读写的形式挂载。

    选择所需的访问模式。

  7. 存储卷容量区域设置存储卷的大小,然后点击下一步

  8. 高级设置页面,您可以为存储卷添加元数据,例如标签注解。元数据可用作搜索和调度资源的标识符。

  9. 点击创建完成存储卷创建。

  10. 新建的存储卷会显示在项目的存储卷页面。存储卷挂载至工作负载后,挂载列会显示为已挂载

    备注

    新建的存储卷也会显示在集群管理中的存储卷页面。项目用户(例如 project-regular)可在存储卷实例列查看存储卷实例。集群管理员需要查看和跟踪项目中创建的存储卷。另一方面,集群管理员在集群管理中为项目创建的存储卷也会显示在项目的存储卷页面。
  11. 一些存储卷是动态供应的存储卷,它们的状态会在创建后立刻从等待中变为准备就绪。其他仍处于等待中的存储卷会在挂载至工作负载后变为准备就绪。存储卷是否支持动态供应取决于其存储类型。

    例如,如果您使用默认的存储类型 (OpenEBS) 安装 KubeSphere,您只能创建不支持动态供应的本地存储卷。这类存储卷的绑定模式由 YAML 文件中的 VolumeBindingMode: WaitForFirstConsumer 字段指定。

挂载存储卷

创建部署有状态副本集守护进程集等应用负载时,您可以为它们挂载存储卷。

备注

关于如何创建应用负载,请参阅应用负载中的相关指南。

存储卷设置页面,您可以为工作负载挂载不同的存储卷。

  • 添加存储卷模板(仅对有状态副本集可用):存储卷模板用于动态创建 PVC。您需要设置存储卷名称、存储类型、访问模式、存储卷容量和挂载路径(以上参数都由 volumeClaimTemplates 字段指定),以便将对应 StorageClass 的 PVC 挂载至容器组。

  • 挂载存储卷:支持 emptyDir 存储卷和 PVC。

    挂载存储卷页面提供了三类存储卷:

    • 现有存储卷:用 PVC 挂载。

      持久卷可用于保存用户的持久数据。您需要提前创建存储卷(PVC),存储卷创建后会显示在列表中供选择。

    • 临时存储卷:用 emptyDir 存储卷挂载。

      临时存储卷即 emptyDir 存储卷,它在容器组分配到节点时创建,并且只要容器组在节点上运行就会一直存在。emptyDir 存储卷提供了一个空目录,可由容器组中的容器读写。取决于您的部署环境,emptyDir 存储卷可以存放在节点所使用的任何介质上,例如机械硬盘或 SSD。当容器组由于某些原因从节点上移除时,emptyDir 存储卷中的数据也会被永久删除。

    • HostPath 存储卷:用 hostPath 存储卷挂载。

      hostPath 存储卷将主机节点文件系统中的文件或目录挂载至容器组。大多数容器组可能不需要这类存储卷,但它可以为一些应用提供了强大的逃生舱 (Escape Hatch)。有关更多信息,请参阅 Kubernetes 官方文档

  • 挂载配置文件或密钥:支持配置字典保密字典键值对。

    保密字典存储卷用于为容器组提供密码、OAuth 凭证、SSH 密钥等敏感信息。密钥存储卷由 tmpfs(基于 RAM 的文件系统)支持,所以数据不会写入非易失性存储中。

    配置字典存储卷以键值对的形式存放配置数据。ConfigMap 资源可用于向容器组中注入配置数据。存放在 ConfigMap 对象中的数据可以由 configMap 类型的存储卷引用,并由容器组中运行的容器化应用使用。ConfigMap 通常用于以下场景:

    • 设置环境变量。
    • 设置容器中的命令参数。
    • 创建存储卷中的配置文件。

查看存储卷详情

存储卷创建后,您可以查看存储卷的详情、编辑存储卷和使用存储卷功能。在存储卷页面,点击一个存储卷名称可打开存储卷详情页面。

编辑存储卷

在存储卷详情页面,您可以点击编辑信息修改存储卷的基本信息。点击更多操作可编辑 YAML 文件或删除存储卷。

如需删除存储卷,请确保存储卷未挂载至任何工作负载。如需卸载存储卷,请进入工作负载的详情页面,点击更多操作,从下拉菜单中选择编辑设置,在弹出的对话框中选择存储卷,然后点击垃圾桶图标将存储卷卸载。

在您点击删除后,如果存储卷的状态长时间保持为删除中,请使用以下命令手动删除:

kubectl patch pvc <pvc-name> -p '{"metadata":{"finalizers":null}}'

使用存储卷功能

更多操作下拉菜单提供了三个额外功能,这些功能基于 KubeSphere 的底层存储插件 Storage Capability。具体如下:

  • 克隆:创建一个相同的存储卷。
  • 创建快照:创建一个存储卷快照,可用于创建其他存储卷。有关更多信息,请参阅存储卷快照
  • 扩容:增加存储卷的容量。请注意,您无法在控制台上减少存储卷的容量,因为数据可能会因此丢失。

有关 Storage Capability 的更多信息,请参阅设计文档

备注

Storage Capability 可能尚未覆盖一些树内 (in-tree) 或特殊的 CSI 插件。如果某些功能在 KubeSphere 集群中没有正确显示,您可以按照此文档修改设置。

监控存储卷

KubeSphere 从 Kubelet 获取 Filesystem 模式的 PVC 的指标数据(包括容量使用情况和 inode 使用情况),从而对存储卷进行监控。

有关存储卷监控的更多信息,请参阅 Research on Volume Monitoring

通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。