5.3 NFS卷

NFS 卷,可以把它想象成云硬盘,随时可以挂载到服务器的任意目录,而且多个服务器可以同时使用这个卷。

image-20211109212928180

在前面,我们学习了 emptyDir、hostPath 等卷,这些卷都有各自的应用场景,创建也很方便。但是这些卷都不能为多节点中的 Pod 提供存储空间,当 Pod 的副本在不同节点中运行时,无法通过这些卷为所有的 Pod 提供一致的文件内容;后续如果程序修改了卷中的文件,也无法同步操作到所有 Pod 中。

NFS 是一种网络文件系统,英文 Network File System(NFS),能使使用者访问网络上别处的文件就像在使用自己的计算机一样,NFS 可以独立于集群中的节点,其存储空间可以在集群之外,然后通过网络为多个节点共享文件。不同的节点可以通过远程存取、操作文件,同时文件的状态为所有节点共享,保证每个节点上访问到的文件内容、状态都是一致的、实时的。

NFS 是基于 UDP/IP 协议的应用,其实现是采用远程过程调用 RPC 机制,NFS 提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。

以某云的云硬盘为例,了解一下它。

t

搭建 NFS 服务

nfs 服务

我们首先在一台服务器上,部署 NFS 服务,由于这个服务器对所有节点提供了文件系统,所以这台服务器的硬盘需要能够自动备份、宕机保护等,保证数据安全。

笔者建议是 master 节点创建 nfs 服务,worker 节点使用 nfs 服务。

在 Ubuntu 中安装 nfs 库,启动 nfs 服务。

sudo apt-get update && sudo apt-get install -y nfs-kernel-server

在服务器上创建要共享的目录。

mkdir /nfs-share
chmod 777  /nfs-share
# 随便填充一些文件
echo env >  /nfs-share/env.txt

检查 nfs 服务是否已经正常安装:

rpcinfo -p localhost

导出配置:

echo "/nfs-share *(rw,no_root_squash,sync)" >> /etc/exports

使配置生效:

exportfs -r

检查是否已经生效:

exportfs

启动 rpcbind、nfs 服务:

systemctl restart rpcbind 
systemctl enable rpcbind
systemctl restart nfs 
systemctl enable nfs

接下来可以在本服务器上测试:

showmount -e $(hostname -i)
# 或者 showmount -e 127.0.0.1
Export list for 10.170.0.2:
/nfs-share *

nfs 客户端

在另一台服务器上安装 nfs 客户端。

apt install nfs-common

挂载 nfs 服务器的目录到本地中:

mount {部署了nfs服务器的ip}:/nfs-share /mnt

查看挂载的目录:

ls -lah /mnt
total 12K
drwxrwxrwx  2 root root 4.0K May  1 02:36 .
drwxr-xr-x 24 root root 4.0K May  1 02:35 ..
-rw-r--r--  1 root root    4 May  1 02:36 env.txt

说明我们的配置没有问题,现在是挂载到主机的目录。接下来我们将 NFS 卷挂载到 Pod 中。

挂载到 Pod

模板如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest
      volumeMounts:
        - name: mynfs
          mountPath: /mnt/mynfs
  volumes:
    - name: mynfs
      nfs:
        server: 10.170.0.2
        path: /nfs-share
kubectl apply -f nginx.yaml

查看容器中的 /mnt/mynfs 目录:

kubectl exec nginx -- ls /mnt/mynfs
Copyright © 痴者工良 2023 all right reserved,powered by Gitbook文档最后更新时间: 2024-03-31 15:39:07

results matching ""

    No results matching ""