• NFS动态存储卷
    • 前置要求
    • 预备知识
    • 创建 NFS 服务器
      • 安装nfs-utils
      • 配置nfs-server
      • 启动NFS服务
      • 检查NFS服务提供是否正常
    • 安装 nfs-client-provisioner
      • 添加choerodon chart仓库
    • 验证安装

    NFS动态存储卷

    前置要求

    • 系统要求:CentOS

    预备知识

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

    • 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文件中匿名用户的UIDanongid=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 install 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.0 \
    2. --name nfs-client-provisioner \
    3. --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