【问题标题】:using nfs network path as a kubernetes persistence volume使用 nfs 网络路径作为 kubernetes 持久卷
【发布时间】:2018-12-07 16:07:47
【问题描述】:

我已经设置了一个包含三个节点的 kubernetes 集群。所有节点都是Linux centos机器。

我需要持久卷来存储数据,我正在努力实现这一目标。

我正在学习本教程。但它只涵盖一个节点集群。 https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/

由于我的集群由三个节点组成,我无法使用本地路径。以前的教程对我不起作用。

我需要一个网络路径,使用 NFS 对我来说似乎是一个合理的解决方案。 (有什么好的选择我想听。)

使用 NFS 网络挂载包含两个步骤。 首先,在网络路径上创建持久卷。 其次,将此网络路径定义为持久卷并使用它。

第二步非常简单。它在 kubernetes 文档中进行了解释,甚至还有示例 yaml。 文档:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistent-volumes 例如:https://github.com/kubernetes/examples/blob/master/staging/volumes/nfs/nfs-pv.yaml

第一部分似乎也很简单。它在以下文档中进行了解释

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-16-04#step-5-%E2%80%94-creating-the-mount-points-on-the-client

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

/etc/exports
/var/nfs/general    203.0.113.256(rw,sync,no_subtree_check)
/home       203.0.113.256(rw,sync,no_root_squash,no_subtree_check)

但是,当您将路径导出为 NFS 路径时,您应该进行一些配置并赋予客户端一些权限。基本上你需要客户端ip。

对于 kubernetes,我们使用 pod 等抽象,我们不想处理真实机器及其 IP 地址。所以,问题从这里开始。

所以,我不想将节点 ip 提供给 nfs 服务器。 (他们可能首先会改变。)应该有一个更好的解决方案,所有 pod(在任何节点中)应该能够连接到 NFS 网络路径。

即使无限制地允许所有 ip 或允许 ip 范围也可以解决问题。我想知道是否有这样的解决方案。但是,我也想听听什么是最佳做法。其他人如何使用来自 kubernetes 的 NFS 网络路径。

我还没有找到任何解决方案。如果您解决了类似的问题,请告诉我您是如何解决的。关于这个问题的任何文档也将是好的。提前致谢!

【问题讨论】:

  • 我不想将节点的 ip 提供给 nfs 服务器,但是你对拥有203.0.113.256 的人的硬编码很酷?因为我希望这些地址以相同的频率变化。当然,如果您正在运行 cluster-autoscaler,那么新节点可能会神奇地出现,但我会说这不是典型情况
  • @MatthewLDaniel,我没有 Kubernetes 网络经验!我应该将节点 ip 或 pod ip 提供给 nfs 服务器吗?当一个pod到达nfs服务器时,请求源ip是什么,节点ip,pod ip或其他什么。由于nfs服务器在kubernetes集群之外,请求将在真实网络上进行,我假设它应该是节点ip。但是,我不确定,任何信息都会很有帮助。
  • 我不确定这是否是最佳实践,但这里有一个可能的解决方案:stackoverflow.com/questions/45360084/…
  • 是的,它将是节点的 IP,因为它将建立 NFS 挂载的底层机器(我不确定您所说的“源 ip”是什么意思);到 Pod 运行时,这已经发生并且只是卷安装到容器中

标签: docker kubernetes centos7 nfs persistent-storage


【解决方案1】:

您要求提供最佳做法,根据我的发现,我认为最好的选择是将 IP 地址列入白名单。由于您不想这样做,因此也有一些解决方法answers posted on SO 由在 NFS 中与动态 IP 客户端有类似问题的人创建。您可以在发布的答案中找到使用 glusterfs 的部署链接。如果您希望 NFS 具有动态 IP(因为它可以更改),您可以使用 DNS 名称而不是 IP。如果您需要动态配置,请使用 glusterfs。

我将按照您的要求添加一些有关卷的信息。可能会让您对该主题有所了解并帮助解决该问题。
由于 Pod 是短暂的,您需要将卷移到 Pod 之外 - 因此使其独立于 Pod - 因此卷将在 Pod 故障的情况下保持其状态。 Kubernetes 支持多种类型的卷。
您可以使用 NFS(上一个链接中有关 NFS 的更多信息) - 因此在移除 Pod 后,卷会被卸载,但它仍然存在。这在您的情况下也是不希望的,因为用户需要知道文件系统类型和有关它要连接到的卷的其他详细信息。当您查看有关 NFS yaml 文件的文档中的示例时,您会看到它们的种类被定义为 Persistent Volume Claim
此方法基于创建一系列抽象,允许节点连接到持久卷,但用户不需要任何后端详细信息,此外,您的节点可以连接到许多提供者。

【讨论】:

  • 感谢您的回答。我将在周末离线。我会在星期一试一试。
猜你喜欢
  • 1970-01-01
  • 2018-12-19
  • 2017-09-03
  • 2017-03-24
  • 2018-05-13
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多