K8S集群中部署NFS之一:配置NFS服务
在K8S中对于无状态的应用我们可以比较容易的扩展应用程序、滚动升级和重新启动崩溃的应用程序,但是对于一些无状态的应用,分为需要维护服务的拓扑结构和需要持久化数据两种情况,对于前者,我们可以使用headless service来实现,对于后者我们需要在集群中使用持久存储来持久化数据。而持久化存储,NFS(Network File System)是一个使用比较常用的分布式存储技术,在本系列中,我将详细演进如何在K8S集群中部署NFS。为了使得大家比较容易理解,将文章分成4个部分。
第一部分:配置 NFS 服务器
第二部分:将 NFS 服务器文件夹挂载到每个节点的本地文件夹
第三部分:将Persistent Volume配置直接连接到 NFS 服务器
第四部分:创建Storage Class声明来自动创建Persistent Volume
写在前面
这一系列文章主要译自下面的文章,但由于k8s版本的原因导致一些功能不正常,我在部署过程中也遇到了一些问题,并得以解决。此外作者主要是在树莓派上完成部署,是ARM架构,因此一些脚本不能在在PC上正常工作,我也在文中加以修改,并给出了详细的解决办法。
https://levelup.gitconnected.com/how-to-use-nfs-in-kubernetes-cluster-configuring-the-nfs-server-1bf4116641d4
本文的源代码都是来自作者的github主页
https://github.com/fabiofernandesx/k8s-volumes
NFS Server配置
首先要做的是配置NFS服务器。由于我没有使用树莓派来测试外挂存储,因此我就只外挂了三个目录,如果需要外挂存储,可以参考原文。分别如下:
- /ssd/host-mapped — 它将是本地磁盘中的一个文件夹,并在集群中使用,以演示如何使用每个节点上的“映射”文件夹创建Persistent Volume。
- /ssd/direct — 它也将是一个文件夹,用于演示如何创建直接访问 NFS 服务器的 PV,而无需先将文件夹映射到节点。
- /ssd/dynamic — NFS 服务器本地磁盘中的另一个文件夹。它将通过集群内的Storage Class使用动态 PV 创建。
安装NFS Server
使用以下命令安装NFS Server
sudo apt-get install nfs-kernel-server -y
导出endpoints
编辑/etc/exports 文件导出我们需要共享的endpoints,然后刷新内存
/ssd/host-mapped *(rw,no_root_squash,insecure,async,no_subtree_check,anonuid=1001,anongid=1001)
/ssd/direct *(rw,no_root_squash,insecure,async,no_subtree_check,anonuid=1002,anongid=1002)
/ssd/dynamic *(rw,no_root_squash,insecure,async,no_subtree_check,anonuid=1003,anongid=1003)
重启NFS Server
$ sudo exportfs -ra
现在我们在集群节点上可以安装NFS并且在每个工作节点上挂载文件夹。
安装NFS common
在每个节点上安装nfs common
$ sudo apt-get install nfs-common -y
在节点上创建文件夹
sudo mkdir -p /ssd/host-mapped
编辑导出文件来自动挂载
sudo nano /etc/exports
192.168.2.30:/ssd/host-mapped /ssd/host-mapped nfs rw 0 0
重启工作节点服务器,并检测挂载是否成功
$ df -h /ssd/host-mapped
image
在每个节点上重复上述步骤,实现每个工作节点挂载NFS服务器的文件夹。