利用集群节点磁盘的Kubernetes存储提供程序

时间:2019-11-29 11:57:24

标签: kubernetes storage openebs rook-storage

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

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

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

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

我到目前为止的评估/使用的是

所以问题是,在使用群集节点磁盘时,我还可以为Kubernetes持久存储提供哪些其他选择。

3 个答案:

答案 0 :(得分:1)

可以考虑以下选项

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

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

  3. Rook也是您已经尝试过的不错的选择之一,但是它还没有投入生产。

在第三个选项中,第一个选项适合您的要求。希望听到社区的其他选择。

答案 1 :(得分:0)

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

即,这些是:cephfsglusterfsnfs

通常,所有这些内容都会保留卷的内容,并且仅在卸下Pod时才卸下该卷。这意味着可以在卷中预填充数据,并且可以在Pod之间“传递”数据。这些FS可以同时由多个编写器挂载。

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

使用persistentVolumeClaim卷将PersistentVolume安装到Pod中。 PersistentVolume是用户“声明”持久存储(例如GCE PersistentDisk或iSCSI卷)的一种方式,而无需了解特定云环境的详细信息 以下类型的卷支持ReadWriteMany: -AzureFile -CephFS -Glusterfs -兆字节 -NFS -PortworxVolume

但这不是无法控制基础基础结构的选择。

local volume选项表示已安装的本地存储设备,例如磁盘,分区或目录。本地卷只能用作静态创建的PersistentVolume。缺点是,如果节点不正常,则本地卷也将变得不可访问,并且使用该节点的Pod将无法运行。

因此,目前没有解决方案能够满足所有的要求。

答案 2 :(得分:0)

您可以使用OpenEBS Local PV,它可以使用默认存储类openebs-device来占用应用程序的整个磁盘,并且可以使用默认存储类openebs-hostpath来使用已装载的磁盘来共享多个应用程序。 OpenEBS文档的User Guide部分下提供了更多信息。这不需要open-iscsi。如果使用直接设备,则使用OpenEBS节点磁盘管理器,将自动检测并使用磁盘。 为了满足RWM用例,您可以使用Local PV来使用此供应卷,而使用NFS供应器将其作为多个应用程序的卷使用。在Stateful Application下的OpenEBS文档中提到了相同的实现。

相关问题