使用nfs网络路径作为kubernetes持久卷

时间:2018-06-28 14:16:36

标签: docker kubernetes centos7 nfs persistent-storage

我已经设置了具有三个节点的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网络路径。

我找不到任何解决方案。如果您解决了类似的问题,请让我知道您如何解决。关于这个问题的任何文件资料也将是好的。预先感谢!

1 个答案:

答案 0 :(得分:0)

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

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