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

标签 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网络路径。

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

最佳答案

您询问了最佳做法,从我发现的结果来看,我认为最好的选择是将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
此方法基于创建一系列抽象,这些抽象将允许节点连接到持久卷,但是用户不需要任何后端详细信息,此外,您的节点可以连接到许多提供程序。

关于docker - 使用nfs网络路径作为kubernetes持久卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085188/

相关文章:

android - 在 Centos 7 上为 Android 交叉编译 protobuf 2.5.0

node.js - 在 Centos 7 上部署 Meteor js 应用

javascript - 尝试在 Docker 上运行简单的 Express 服务器,但无法访问任何路由

go - 是否可以通过 GKE 上的多个微服务共享单个 Redis 服务器?

c - ftruncate() 对大页面失败

kubernetes - 安装 k8 永久卷静默失败

docker - 有关如何使用Helm和Kubernetes进行个人服务设置的建议

docker - 将本地可用的 Docker 镜像导出到本地文件系统

Docker 多个相同端口问题

docker - 用于链接dockerfile的Docker选项