- NFS动态存储卷
- 前置要求
- 预备知识
- 创建 NFS 服务器
- 安装nfs-utils
- 配置nfs-server
- 启动NFS服务
- 检查NFS服务提供是否正常
- 安装 nfs-client-provisioner
- 添加choerodon chart仓库
- 验证安装
NFS动态存储卷
前置要求
- 系统要求:CentOS
预备知识
如果你不知道NFS是做什么的,那么请参考下面链接(包括但不限于)进行学习:
- NFS
创建 NFS 服务器
NFS 允许系统将其目录和文件共享给网络上的其他系统。通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。
安装nfs-utils
- 在集群每一个节点安装
nfs-utils
sudo yum install -y nfs-utils
配置nfs-server
- 创建共享目录
mkdir -p /u01/prod
- 编辑
/etc/exports文件添加需要共享目录,每个目录的设置独占一行,编写格式如下:
NFS共享目录路径 客户机IP段(参数1,参数2,...,参数n)
- 例如:
/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 服务器:
sudo systemctl enable nfs-serversudo systemctl start nfs-server
检查NFS服务提供是否正常
- 到客户机上执行showmount命令进行检查
$ showmount -e <NFS服务器IP地址>Exports list on <NFS服务器IP地址>:/u01
安装 nfs-client-provisioner
添加choerodon chart仓库
helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/helm repo update
- 在集群每一个节点安装
nfs-utils
sudo yum install -y nfs-utils
- 在任意一个master节点执行下面helm命令,安装
nfs-client-provisioner
helm install c7n/nfs-client-provisioner \--set rbac.create=true \--set persistence.enabled=true \--set storageClass.name=nfs-provisioner \--set persistence.nfsServer=127.0.0.1 \
--set persistence.nfsPath=/u01/prod \
--version 0.1.0 \--name nfs-client-provisioner \--namespace kube-system
提供NFS服务的主机IP地址或域名
NFS服务共享的目录
验证安装
- 新建
write-pod.yaml文件,粘贴以下内容:
kind: PodapiVersion: v1metadata:name: write-podspec:containers:- name: write-podimage: busyboxcommand:- "/bin/sh"args:- "-c"- "touch /mnt/SUCCESS && exit 0 || exit 1"volumeMounts:- name: nfs-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: myclaim---kind: PersistentVolumeClaimapiVersion: v1metadata:name: myclaimspec:accessModes:- ReadWriteOncestorageClassName: nfs-provisionerresources:requests:storage: 1Mi
- 部署测试用例
kubectl apply -f write-pod.yaml
- 验证是否正常
$ kubectl get poNAME READY STATUS RESTARTS AGEwrite-pod 0/1 Completed 0 8s
pod状态为Completed则为正常,若长时间为ContainerCreating状态则为不正常,请确认安装操作步骤是否正确。
- 清除测试用例
kubectl delete -f write-pod.yaml
