【问题标题】:Kubernetes storage provider that leverages cluster node disk(s)利用集群节点磁盘的 Kubernetes 存储提供程序
【发布时间】:2019-11-29 11:57:24
【问题描述】:

我正在 Kubernetes 之上构建一个平台,除其他要求外,它应该:

  • 与操作系统无关。任何具有健全内核和 cgroup 挂载的 Linux。
  • 利用集群节点磁盘提供持久存储。
  • 提供 ReadWriteMany 卷或实现共享存储的方法。
  • 不应将 POD 绑定到特定节点(如本地持久卷)
  • 迁移 POD 时会自动重新附加卷(例如,由于节点耗尽或节点丢失情况)
  • 在存储级别提供数据复制
  • 不假定每个节点都有专用的原始块设备。

我通过对 k8s 组件和容器引擎使用静态二进制文件来解决第一点。再加上最小的主机工具,也是静态二进制文件。

我仍在寻找持久存储的解决方案。

到目前为止我评估/使用的内容:

所以问题是在使用集群节点磁盘时,对于 Kubernetes 持久存储,我还有什么其他选择。

【问题讨论】:

  • 您希望在本地还是在云端 (CGP/AWS) 中运行它?
  • 本地。假定没有专用存储系统。只是本地磁盘。
  • 你检查过 glusterfs 吗? topc 上的官方文档说 WriteMany 由 gcePersistentDisk (这里根本不是这种情况)、glusterfs、nfs 支持。我正在检查 glusterfs 是否符合您的要求
  • 检查了 k8s 上的 glusterfs。它需要特定于操作系统的工具和附加在每个节点上的专用原始块设备。 github.com/gluster/gluster-kubernetes/blob/master/docs/…
  • “每个节点上连接的专用原始块设备”,我的印象是你可以在同一个 raid 上为 OS 安装 sda,为 glusterfs 安装 sdb。 “O/S 特定工具”他们说可以通过 NFS v3 docs.gluster.org/en/latest/Administrator%20Guide/… 访问它。另外,我在之前的评论中打错了字,提到了 gcePersistentDisk 而不是 CephFS

标签: kubernetes storage openebs rook-storage


【解决方案1】:

可以考虑以下选项

  1. wards 上的 kubernetes 1.14.0 版支持本地持久卷。您可以使用节点标签来使用本地 pv。您可能必须在 HA(主从)模式下运行有状态的工作负载,以便在节点故障时数据可用

  2. 您可以在其中一个集群节点上安装 nfs 服务器,并将其用作工作负载的存储。 nfs 存储支持 ReadWriteMany。如果您在裸机上设置集群,这可能会很好用

  3. Rook 也是您已经尝试过的好选择之一,但它还没有准备好生产。

在这三个中,第一个选项适合您的要求。想听听社区的任何其他选择。

【讨论】:

  • 感谢您的回答。所以本地光伏可能是一种选择。我忘了提到另一个(很高兴有)要求。我更喜欢在存储级别而不是应用程序级别进行数据复制。我会更新问题。但是,是的,如果没有其他更好的选择,包括复制,本地 pvs 可能是一个解决方案。
  • glusterfs 支持存储级别的复制。但它又是 k8s 集群的外部
【解决方案2】:

据官方documentation 称,截至目前(v1.16),K8S 在几种不同类型的卷上支持 WriteMany。

即这些是:cephfsglusterfsnfs

通常,所有这些都保留了卷的内容,并且仅在删除 Pod 时卸载卷。这意味着卷可以预先填充数据,并且可以在 Pod 之间“传递”数据。这些 FS 可以同时被多个 writer 挂载。

在这些 FS 中,glusterfs 可以部署在每个 kubernetes 集群节点上(至少需要 3 个)。可以在不同的ways 中访问数据,其中之一是 NFS。

persistentVolumeClaim 卷用于将PersistentVolume 挂载到 Pod 中。 PersistentVolume 是用户在不了解特定云环境详细信息的情况下“声明”持久存储(例如 GCE PersistentDisk 或 iSCSI 卷)的一种方式 以下类型的卷支持 ReadWriteMany: - Azure文件 - CephFS - Glusterfs - 夸字节 - NFS - PortworxVolume

但这不是一个无法控制底层基础架构的选项。

local volume 选项表示已挂载的本地存储设备,例如磁盘、分区或目录。本地卷只能用作静态创建的 PersistentVolume。缺点是如果一个节点变得不健康,那么本地卷也将变得不可访问,并且使用它的 Pod 将无法运行。

因此,目前没有适合所有开箱即用要求的解决方案。

【讨论】:

  • kubernetes 上的存储很难的老话仍然成立。只要您不使用公共云供应商提供的托管解决方案。
  • 你考虑过 OpenEBS 和 open-iscsi 吗? (他们说 Open-iSCSI Initiator 需要运行内核版本为 2.6.16 的 Linux 操作系统的主机。这符合我的要求,只是我不知道它是否适合生产部署)
  • 我没有考虑过 OpenEbs,因为官方 Kubernetes 文档中没有提到它,而且据我所知 OpenEBS(我可能在这里错了)没有勾选“没有专用存储系统假设。只是本地磁盘。盒子。但是,如果您要从头开始构建 k8s 集群,glusterfs 看起来很有趣。
  • 我的理解是配置了 Jiva 的 OpenEBS 确实支持本地磁盘(通过容器镜像磁盘),但我对它的经验为零。
  • Nick,OpenEBS 不需要 intree 自定义配置器。 Kubernetes 文档只提到了使用 in-tree 编写的存储。您应该检查通过 CSI 驱动程序支持的那些。 kubernetes-csi.github.io/docs/drivers.html
【解决方案3】:

您可以使用 OpenEBS 本地 PV,它可以使用默认存储类 openebs-device 为应用程序消耗整个磁盘,您可以使用默认存储类 openebs-hostpath 使用已安装的磁盘共享多个应用程序。更多信息在 OpenEBS 文档中的User Guide 部分提供。这不需要 open-iscsi。如果您使用的是直接设备,那么使用 OpenEBS 节点磁盘管理器,将自动检测和消耗磁盘。 为了满足 RWM 用例,您可以使用本地 PV 将此预置卷用作使用 NFS 预配器的多个应用程序的底层卷。在Stateful Application 部分下的 OpenEBS 文档中提到了相同的实现。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2019-11-27
    • 2021-02-12
    • 2016-01-15
    • 1970-01-01
    • 2021-12-14
    • 2019-08-21
    • 2020-04-26
    • 2019-06-06
    相关资源
    最近更新 更多