持久卷和存储类型
本教程对 PV、PVC 以及存储类型 (Storage Class) 的基本概念进行说明,并演示集群管理员如何管理 KubeSphere 中的存储类型和持久化存储卷。
介绍
PersistentVolume (PV) 是集群中的一块存储,可以由管理员事先供应,或者使用存储类型来动态供应。PV 是像存储卷 (Volume) 一样的存储卷插件,但是它的生命周期独立于任何使用该 PV 的 Pod。PV 可以静态供应或动态供应。
PersistentVolumeClaim (PVC) 是用户对存储的请求。它与 Pod 类似,Pod 会消耗节点资源,而 PVC 消耗 PV 资源。
KubeSphere 支持基于存储类型的动态卷供应,以创建 PV。
StorageClass 是管理员描述其提供的存储类型的一种方式。不同的类型可能会映射到不同的服务质量等级或备份策略,或由集群管理员制定的任意策略。每个 StorageClass 都有一个 Provisioner,用于决定使用哪个存储卷插件来供应 PV。该字段必须指定。有关使用哪一个值,请参阅 Kubernetes 官方文档或与您的存储管理员确认。
下表总结了各种 Provisioner(存储系统)常用的存储卷插件。
类型 | 描述信息 |
---|---|
In-tree | 内置并作为 Kubernetes 的一部分运行,例如 RBD 和 Glusterfs。有关此类插件的更多信息,请参见 Provisioner。 |
External-provisioner | 独立于 Kubernetes 部署,但运行上类似于树内 (in-tree) 插件,例如 NFS 客户端。有关此类插件的更多信息,请参见 External Storage。 |
CSI | 容器存储接口,一种将存储资源暴露给 CO(例如 Kubernetes)上的工作负载的标准,例如 QingCloud-CSI 和 Ceph-CSI。有关此类插件的更多信息,请参见 Drivers。 |
准备工作
您需要一个拥有集群管理权限的帐户。例如,您可以直接以 admin
身份登录控制台,或者创建一个拥有该权限的新角色并将它分配至一个帐户。
管理存储类型
-
点击左上角的平台管理,然后选择集群管理。
-
如果您启用了多集群功能并导入了 Member 集群,可以选择一个特定集群。如果您未启用该功能,请直接参考下一步。
-
在集群管理页面,您可以在存储管理下的存储类型中创建、更新和删除存储类型。
-
要创建一个存储类型,请点击创建,在弹出窗口中输入基本信息。完成后,点击下一步。
-
在 KubeSphere 中,您可以直接为
QingCloud-CSI
、Glusterfs
和Ceph RBD
创建存储类型。或者,您也可以根据需求为其他存储系统创建自定义存储类型。请选择一个类型,然后点击下一步。
常用设置
有些设置在存储类型之间常用且共享。您可以在控制台上的仪表板属性中找到这些设置,StorageClass 清单文件中也通过字段或注解加以显示。您可以在右上角启用编辑模式,查看 YAML 格式的清单文件。下表是对 KubeSphere 中一些常用字段的属性说明。
属性 | 描述信息 |
---|---|
允许存储卷扩容 | 在清单文件中由 allowVolumeExpansion 指定。若设置为 true ,PV 则被配置为可扩容。有关更多信息,请参见允许卷扩展。 |
回收机制 | 在清单文件中由 reclaimPolicy 指定。可设置为 Delete 或 Retain (默认)。有关更多信息,请参见回收策略。 |
存储系统 | 在清单文件中由 provisioner 指定。它决定使用什么存储卷插件来供应 PV。有关更多信息,请参见 Provisioner。 |
支持的访问模式 | 在清单文件中由 metadata.annotations[storageclass.kubesphere.io/supported-access-modes] 指定。它会向 KubeSphere 表明支持的访问模式。 |
对于其他设置,您需要为不同的存储插件提供不同的信息,它们都显示在清单文件的 parameters
字段下。下面将进行详细说明,您也可以参考 Kubernetes 官方文档的参数部分。
QingCloud CSI
QingCloud CSI 是 Kubernetes 上的 CSI 插件,供青云QingCloud 存储服务使用。KubeSphere 控制台上可以创建 QingCloud CSI 的存储类型。
准备工作
- QingCloud CSI 在青云QingCloud 的公有云和私有云上均可使用。因此,请确保将 KubeSphere 安装至二者之一,以便可以使用云存储服务。
- KubeSphere 集群上已经安装 QingCloud CSI 插件。有关更多信息,请参见安装 QingCloud CSI。
设置
属性 | 描述信息 |
---|---|
type | 在青云QingCloud 平台上,0 代表性能型硬盘,2 代表容量型硬盘,3 代表超高性能型硬盘,5 代表企业级分布式 SAN (NeonSAN) 型硬盘,100 代表基础型硬盘,200 代表企业型硬盘。 |
maxSize | 存储卷容量上限。 |
stepSize | 存储卷容量增量。 |
minSize | 存储卷容量下限。 |
fsType | 存储卷的文件系统类型:ext3、ext4(默认)、xfs。 |
tags | QingCloud Tag 资源的 ID,用逗号隔开。 |
有关存储类型参数的更多信息,请参见 QingCloud CSI 用户指南。
Glusterfs
Glusterfs 是 Kubernetes 上的一种树内存储插件,即您不需要额外安装存储卷插件。
准备工作
已经安装 Glusterfs 存储系统。有关更多信息,请参见 GlusterFS 安装文档。
设置
属性 | 描述信息 |
---|---|
resturl | Gluster REST 服务/Heketi 服务 URL,按需供应 Gluster 存储卷。 |
clusterid | Heketi 在供应存储卷时使用的集群的 ID。 |
restauthenabled | Gluster REST 服务认证 Boolean,对 REST 服务器进行认证。 |
restuser | 在 Glusterfs 受信池中有权限创建存储卷的 Glusterfs REST 服务/Heketi 用户。 |
secretNamespace, secretName | 识别 Secret 实例,包含与 Gluster REST 服务通信时使用的用户密码。 |
gidMin, gidMax | StorageClass GID 范围的最大值和最小值。 |
volumetype | 该可选值可以配置存储卷类型和其参数。 |
有关 StorageClass 参数的更多信息,请参见 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。
设置
属性 | 描述信息 |
---|---|
monitors | Ceph 监控器,用逗号隔开。 |
adminId | 能够在该池中创建镜像的 Ceph 客户端 ID。 |
adminSecretName | adminId 的 Secret 名称。 |
adminSecretNamespace | adminSecretName 的命名空间。 |
pool | Ceph RBD 池。 |
userId | 用于映射 RBD 镜像的 Ceph 客户端 ID。 |
userSecretName | userId 的 Ceph Secret 名称,用于映射 RBD 镜像。 |
userSecretNamespace | userSecretName 的命名空间。 |
fsType | Kubernetes 支持的文件系统类型。 |
imageFormat | Ceph RBD 镜像格式,可设为 1 或 2 。 |
imageFeatures | 该参数为可选,仅在 imageFormat 设为 2 时使用。 |
有关 StorageClass 参数的更多信息,请参见 Kubernetes 文档中的 Ceph RBD。
自定义存储类型
如果 KubeSphere 不直接支持您的存储系统,您可以为存储系统创建自定义存储类型。下面的示例向您演示了如何在 KubeSphere 控制台上为 NFS 创建存储类型。
NFS 介绍
NFS(网络文件系统)广泛用于带有 NFS-Client(External-Provisioner 存储卷插件)的 Kubernetes。您可以点击自定义来创建 NFS-Client 的存储类型。
备注
failed to obtain lock
和 input/output error
等问题,从而导致 Pod CrashLoopBackOff
。此外,部分应用不兼容 NFS,例如 Prometheus 等。准备工作
- 有一个可用的 NFS 服务器。
- 已经安装存储卷插件 NFS-Client。社区开发者提供了 NFS-Client 的 Chart,您可以通过 Helm 用这些 Chart 安装 NFS-Client。
常用设置
属性 | 描述信息 |
---|---|
存储系统 | 在清单文件中由 provisioner 指定。如果您使用 NFS-Client 的 Chart 来安装存储类型,可以设为 cluster.local/nfs-client-nfs-client-provisioner 。 |
允许存储卷扩容 | 在清单文件中由 allowVolumeExpansion 指定。选择 No 。 |
回收机制 | 在清单文件中由 reclaimPolicy 指定。默认值为 Delete。 |
支持的访问模式 | 在清单文件中由 .metadata.annotations.storageclass.kubesphere.io/supported-access-modes 指定。默认 ReadWriteOnce 、ReadOnlyMany 和 ReadWriteMany 全选。 |
参数
键 | 描述信息 | 值 |
---|---|---|
archiveOnDelete | 删除时存档 PVC | true |
管理存储卷
存储类型创建后,您可以使用它来创建存储卷。您可以在 KubeSphere 控制台上的存储管理下面的存储卷中列示、创建、更新和删除存储卷。有关更多详细信息,请参见存储卷管理。
反馈
这篇文章对您有帮助吗?
感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。