NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

一、安装NFS

安装相关依赖:

  1. yum install -y rpc-bind rpcbind nfs-utils

启动服务:

  1. systemctl start rpcbind
  2. systemctl enable rpcbind
  3. systemctl start nfs-server
  4. systemctl enable nfs-server

创建共享目录:

  1. mkdir -p /nfs/es
  2. cd /nfs/es
  3. mkdir es{0..2}

编辑共享目录配置文件:

  1. $ vim /etc/exports
  2. /nfs/es 192.168.1.0/24(rw)
  3. $ systemctl reload nfs

挂载与卸载测试:

  1. $ showmount -e 192.168.1.128
  2. Export list for 192.168.1.128:
  3. /nfs/es 192.168.1.0/24
  4. $ mkdir -p /mnt/nfs/es
  5. $ mount -t nfs 192.168.1.128:/nfs/es /mnt/nfs/es
  6. $ umount /mnt/nfs/es

用户与权限:

  1. $ useradd -u 555 nfs
  2. $ id nfs
  3. uid=555(nfs) gid=1001(nfs) 组=1001(nfs)
  4. $ chown -R nfs nfs /nfs
  5. $ chmod a+w -R /nfs

二、在Pod中使用NFS

编辑一个使用 NFS 的 Pod 的配置文件

# nfs.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nfs-web
spec:
  containers:
    - name: web
      image: nginx
      imagePullPolicy: Never # 如果已经有镜像,就不需要再拉取镜像
      ports:
        - name: web
          containerPort: 80
          hostPort: 80 # 将容器的80端口映射到宿主机的80端口
      volumeMounts:
        - name: nfs # 指定名称必须与下面一致
          mountPath: "/usr/share/nginx/html" # 容器内的挂载点
  volumes:
    - name: nfs # 指定名称必须与上面一致
      nfs: # nfs存储
        server: 192.168.61.128 # nfs服务器ip或是域名
        path: "/test" # nfs服务器共享的目录

创建 Pod

kubectl create -f nfs.yaml

在节点端可以用 mount 命令查询挂载情况

因为我映射的是代码目录,在 /test 目录中创建 index.html 文件后,这个文件也将在容器中生效,当 Pod 删除时,文件不受影响,实现了数据持久化。

参考资料