NFS动态存储卷

前置要求

  • 系统要求:CentOS

预备知识

如果你不知道NFS是做什么的,那么请参考下面链接(包括但不限于)进行学习:

创建 NFS 服务器

NFS 允许系统将其目录和文件共享给网络上的其他系统。通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。

安装nfs-utils

  • 在集群每一个节点安装nfs-utils

    1. sudo yum install -y nfs-utils

配置nfs-server

  • 创建共享目录

    1. mkdir -p /u01/prod
  • 编辑/etc/exports文件添加需要共享目录,每个目录的设置独占一行,编写格式如下:

    1. NFS共享目录路径 客户机IP段(参数1,参数2,...,参数n)
  • 例如:

    1. /u01 192.168.1.1/16(rw,sync,insecure,no_subtree_check,no_root_squash)
    参数说明
    ro只读访问
    rw读写访问
    sync所有数据在请求时写入共享
    asyncnfs在写入数据前可以响应请求
    securenfs通过1024以下的安全TCP/IP端口发送
    insecurenfs通过1024以上的端口发送
    wdelay如果多个用户要写入nfs目录,则归组写入(默认)
    no_wdelay如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置
    hide在nfs共享目录中不共享其子目录
    no_hide共享nfs目录的子目录
    subtree_check如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
    no_subtree_check不检查父目录权限
    all_squash共享文件的UID和GID映射匿名用户anonymous,适合公用目录
    no_all_squash保留共享文件的UID和GID(默认)
    root_squashroot用户的所有请求映射成如anonymous用户一样的权限(默认)
    no_root_squashroot用户具有根目录的完全管理访问权限
    anonuid=xxx指定nfs服务器/etc/passwd文件中匿名用户的UID
    anongid=xxx指定nfs服务器/etc/passwd文件中匿名用户的GID
    • 注1:尽量指定IP段最小化授权可以访问NFS 挂载的资源的客户端
    • 注2:经测试参数insecure必须要加,否则客户端挂载出错mount.nfs: access denied by server while mounting

启动NFS服务

  • 配置完成后,您可以在终端提示符后运行以下命令来启动 NFS 服务器:

    1. sudo systemctl enable nfs-server
    2. sudo systemctl start nfs-server

检查NFS服务提供是否正常

  • 到客户机上执行showmount命令进行检查

    1. $ showmount -e <NFS服务器IP地址>
    2. Exports list on <NFS服务器IP地址>:
    3. /u01

安装 nfs-client-provisioner

添加choerodon chart仓库

  1. helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/
  2. helm repo update
  • 在集群每一个节点安装nfs-utils

    1. sudo yum install -y nfs-utils
  • 在任意一个master节点执行下面helm命令,安装nfs-client-provisioner

    1. helm upgrade --install nfs-client-provisioner c7n/nfs-client-provisioner \
      --set rbac.create=true \
      --set persistence.enabled=true \
      --set storageClass.name=nfs-provisioner \
    2. --set persistence.nfsServer=127.0.0.1 \
    1. --set persistence.nfsPath=/u01/prod \
    1. --version 0.1.1 \
    2. --namespace kube-system

    提供NFS服务的主机IP地址或域名

    NFS服务共享的目录

验证安装

  • 新建write-pod.yaml文件,粘贴以下内容:

    1. kind: Pod
    2. apiVersion: v1
    3. metadata:
    4. name: write-pod
    5. spec:
    6. containers:
    7. - name: write-pod
    8. image: busybox
    9. command:
    10. - "/bin/sh"
    11. args:
    12. - "-c"
    13. - "touch /mnt/SUCCESS && exit 0 || exit 1"
    14. volumeMounts:
    15. - name: nfs-pvc
    16. mountPath: "/mnt"
    17. restartPolicy: "Never"
    18. volumes:
    19. - name: nfs-pvc
    20. persistentVolumeClaim:
    21. claimName: myclaim
    22. ---
    23. kind: PersistentVolumeClaim
    24. apiVersion: v1
    25. metadata:
    26. name: myclaim
    27. spec:
    28. accessModes:
    29. - ReadWriteOnce
    30. storageClassName: nfs-provisioner
    31. resources:
    32. requests:
    33. storage: 1Mi
  • 部署测试用例

    1. kubectl apply -f write-pod.yaml
  • 验证是否正常

    1. $ kubectl get po
    2. NAME READY STATUS RESTARTS AGE
    3. write-pod 0/1 Completed 0 8s

    pod状态为Completed则为正常,若长时间为ContainerCreating状态则为不正常,请确认安装操作步骤是否正确。

  • 清除测试用例

    1. kubectl delete -f write-pod.yaml