容器化 nfs 服务器安装

这篇文章记录如何安装和使用容器化的nfs,目前只是临时使用验证某个服务,只记录安装使用过程,不做过多描述。

什么是 nfs

它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。

NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。一般用来存储共享视频,图片等静态数据。

安装

  1. 加载内核模块 nfs

    modprobe nfs
    modprobe nfsd
    
  2. 安装nfs-utils

    apt-get install nfs-common
    # 或者
    yum install nfs-utils
    
  3. 安装docker

    curl -sSL https://get.docker.com/ | sh
    usermod -aG docker $USER
    systemctl enable docker
    systemctl start docker
    
  4. 准备nfs配置文件

    例如:配置文件位于 ./exports.txt

    /nfs        *(rw,fsid=0,sync,no_root_squash)
    
  5. 运行服务器

    参考ehough/docker-nfs-server - github

    version: '3.2'
       
    services:
      nfs:
        image: erichough/nfs-server:latest
        container_name: nfs
        network_mode: bridge
        restart: always
        volumes:
          - /home/kelu/Workspace:/nfs
          - ./exports.txt:/etc/exports
        ports:
          - 2049:2049
          - 2049:2049/udp
          - 32765:32765
          - 32765:32765/udp
          - 32767:32767
          - 32767:32767/udp
        cap_add:
          -  SYS_ADMIN
        privileged: true
    

    将主机/home/kelu/Workspace 文件夹作为共享根目录。

  6. 客户端连接

    服务器ip为 172.10.1.100 ,将共享目录挂载到客户端的 /kelu 目录下

    mount -o nfsvers=4 172.10.1.100:/ /kelu
    mount # 查看挂载
    umount -v /kelu   # 解除挂载
    umount -f -l /app/Downloads # 服务端挂了的情况下接触挂载
    

错误参考

无法启动,显示“rpc.statd already running”

==================================================================
      STARTING SERVICES ...
==================================================================
----> starting rpcbind
----> starting exportfs
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/nfs".
  Assuming default behaviour ('no_subtree_check').
  NOTE: this default has changed since nfs-utils version 1.0.x

----> starting rpc.mountd on port 32767
----> starting rpc.statd on port 32765 (outgoing from port 32766)
Statd service already running!
---->
----> ERROR: /sbin/rpc.statd failed
---->

先stop掉这个服务即可:

systemctl stop rpc-statd.service

参考资料


kubernetes kubectl 命令行 kubernetes helm chart