云原生家庭网络(八):部署 nfs-server 实现家庭 NAS 共享存储

2024-05-20 16:11:18 浏览数 (1)

为什么需要 NFS ?

家里有些设备,比如电视机、投影仪,支持通过 NFS 远程读取文件来看路由器磁盘中的视频文件,前提是路由器安装了 NFS 服务(传说中的 NAS 中的一种协议)。

开源项目

本文部署的 NFS 服务使用这个开源项目构建的容器镜像:https://github.com/ehough/docker-nfs-server

目录结构

代码语言:txt复制
nfs
├── config
│   └── exports
├── daemonset.yaml
└── kustomization.yaml

配置 exports 文件

将要共享的目录写在 exports 文件中,每行一个目录,格式为:目录路径 权限设置

代码语言:txt复制
/data/media *(rw,no_root_squash,sync)
/data/media/movies *(rw,no_root_squash,sync)

配置 daemonset.yaml

代码语言:yaml复制
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nfs
  name: nfs
  namespace: default
spec:
  selector:
    matchLabels:
      app: nfs
  template:
    metadata:
      labels:
        app: nfs
    spec:
      terminationGracePeriodSeconds: 1
      containers:
        - image: docker.io/erichough/nfs-server:2.2.1
          imagePullPolicy: IfNotPresent
          name: nfs
          securityContext:
            privileged: true
          volumeMounts:
            - mountPath: /data/media
              name: media
            - mountPath: /lib/modules
              name: mod
              readOnly: true
            - mountPath: /etc/exports
              name: exports
              subPath: exports
      dnsPolicy: Default
      hostNetwork: true
      restartPolicy: Always
      volumes:
        - name: media
          hostPath:
            path: /data/media
            type: DirectoryOrCreate
        - name: mod
          hostPath:
            path: /lib/modules
        - name: exports
          configMap:
            name: nfs-exports
  updateStrategy:
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
    type: RollingUpdate

配置 kustomization.yaml

代码语言:yaml title="kustomization.yaml"复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - daemonset.yaml

namespace: default

configMapGenerator:
  - name: nfs-exports
    files:
      - config/exports

注意事项

要求节点有 nfsnfsd 两个内核模块:

代码语言:bash复制
lsmod | grep nfs
modprobe {nfs,nfsd}

如没有,ubuntu 可尝试安装:

代码语言:bash复制
sudo apt-get install nfs-kernel-server

需禁用节点自身启动的 nfs-server 和 rpc-statd 服务,避免冲突:

代码语言:bash复制
systemctl disable nfs-server
systemctl stop nfs-server
systemctl stop rpc-statd

0 人点赞