StorageClass
是 Kubernetes 中定义存储类别的 API 对象。它包含以下关键部分:
供应器(Provisioner):指定哪个供应器负责动态创建 PV。对于 k8s-hostpath-provisioner,这个值是 torchbox.com/hostpath。
参数(Parameters):供应器所需的配置参数,例如 pvDir,它指定了在主机上用于存储卷的根路径。
回收策略(Reclaim Policy):定义 PV 在释放后是删除还是保留。
卷绑定模式(Volume Binding Mode):控制 PVC 绑定到 PV 的时机。
k8s-hostpath-provisioner
k8s-hostpath-provisioner 是一个为 Kubernetes 设计的动态存储供应器,它允许集群使用本地或网络文件系统的存储资源。这个项目特别适用于以下情况:
当 Kubernetes 原生不支持某些存储系统时,例如 ceph-fuse。
当需要避免将持久卷(PV)的凭证暴露给用户时。
当想要集中管理网络存储配置时,例如在 /etc/fstab 中设置,使得存储配置的变更更加灵活。
torchbox.com/hostpath
torchbox.com/hostpath 是 k8s-hostpath-provisioner 项目中定义的供应器的唯一标识符。在 Kubernetes 的 StorageClass 中使用这个标识符来告诉系统使用 k8s-hostpath-provisioner 来处理存储请求。这个名称是供应器的“品牌”,用于区分不同的存储供应器。
使用流程
部署网络存储:首先,在每个 Kubernetes 节点上挂载网络存储。这可以通过 systemd 挂载单元或 /etc/fstab 完成,并且必须在所有主机上使用相同的挂载路径。
创建 StorageClass:定义一个 StorageClass 对象,指定 provisioner 为 torchbox.com/hostpath,并设置所需的参数,如 pvDir。
启动 k8s-hostpath-provisioner:可以作为集群外部的独立程序运行,或作为 Kubernetes 集群中的一个部署运行。它将监听 PVC 的创建请求,并为它们动态创建 PV。
创建 PVC:用户或应用程序创建一个 PVC,请求特定的存储资源。如果 PVC 中指定了 StorageClass,则使用该类定义的供应器和参数来供应存储。
动态供应 PV:k8s-hostpath-provisioner 检测到 PVC 请求后,根据 StorageClass 中定义的规则,在网络存储上创建相应的 PV,并绑定到 PVC。
使用存储:应用程序通过 PVC 挂载 PV,从而使用请求的存储资源。
配置的关联
在 k8s-hostpath-provisioner
的上下文中,StorageClass
中配置的 pvDir
和 k8s-hostpath-provisioner
挂载的卷之间的关系和作用:
-
StorageClass 中的 pvDir 参数:
pvDir
是StorageClass
定义中的一个参数,它指定了在网络存储上用于创建 PV 的根目录路径。- 这个路径必须位于所有 Kubernetes 节点上都已挂载的网络文件系统上。
- 当
k8s-hostpath-provisioner
接收到 PVC 请求时,它会在pvDir
指定的路径下为该 PVC 创建一个子目录,用于存储 PVC 的数据。
-
k8s-hostpath-provisioner 挂载的卷:
- 在
k8s-hostpath-provisioner
的部署配置中,需要挂载网络存储卷,这通常在deployment.yaml
中定义。 - 这个挂载卷的路径应该指向网络存储上的某个位置,通常是
pvDir
指定的相同路径或其父目录。 - 这样配置的目的是让
k8s-hostpath-provisioner
能够访问网络存储,并在该存储上创建和管理 PV。
- 在
-
二者的关系:
pvDir
作为StorageClass
的一部分,定义了存储卷的“逻辑”位置,即在网络存储上应该创建 PV 数据的位置。k8s-hostpath-provisioner
挂载的卷则提供了对这些存储位置的“物理”访问,使得供应器能够操作这些存储资源。- 当
k8s-hostpath-provisioner
根据 PVC 请求创建 PV 时,它会在挂载的卷(即网络存储)的pvDir
路径下创建具体的存储卷。
-
工作流程示例:
- 假设网络存储已经挂载在所有节点的
/ceph/pvs
路径上。 - 在
StorageClass
中配置pvDir: /ceph/pvs
。 k8s-hostpath-provisioner
的部署配置中也挂载了/ceph/pvs
路径。- 当 PVC 请求到来时,
k8s-hostpath-provisioner
在/ceph/pvs
下为 PVC 创建一个子目录,例如/ceph/pvs/pvc-1234
。 - PVC 绑定到这个新创建的 PV,应用程序就可以通过 PVC 使用这个存储卷了。
- 假设网络存储已经挂载在所有节点的
通过这种方式,StorageClass
中的 pvDir
参数和 k8s-hostpath-provisioner
挂载的卷协同工作,确保了存储卷的正确创建和管理。这种设计允许集中管理网络存储配置,同时保持了 Kubernetes 存储供应的灵活性和动态性。