存储卷

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

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

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

准备工作

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

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

创建存储卷

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

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

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

    create-volume

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

    basic-volume-info

    备注

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

    volume-creation-method

    • 通过存储类型:您可以在 KubeSphere 安装前安装后配置存储类型。
    • 通过存储卷快照创建:如需通过快照创建存储卷,您必须先创建存储卷快照。
  5. 选择通过存储类型。有关通过存储卷快照创建存储卷的更多信息,请参阅存储卷快照

  6. 从下拉列表中选择存储类型。

    select-storage-class

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

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

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

    选择所需的访问模式。

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

    volume-finished

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

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

    volume-finish-creation

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

    volume-status

    备注

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

    local-pending

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

    volumebindingmode

挂载存储卷

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

备注

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

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

volume-page

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

  • 添加存储卷:支持 emptyDir 存储卷和 PVC。

    添加存储卷页面提供了三类存储卷:

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

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

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

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

    • HostPath:用 hostPath 存储卷挂载。

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

  • 挂载配置文件或密钥:支持 ConfigMap密钥 (Secret) 键值对。

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

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

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

查看存储卷详情

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

编辑存储卷

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

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

delete-volume

使用存储卷功能

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

  • 存储卷克隆:创建一个相同的存储卷。
  • 创建快照:创建一个存储卷快照,可用于创建其他存储卷。有关更多信息,请参阅存储卷快照
  • 存储卷扩容:增加存储卷的容量。

volume-detail-page

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

备注

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

监控存储卷

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

volume-monitoring

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