NFS动态存储卷
前置要求
- 系统要求:CentOS
预备知识
如果你不知道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-server
sudo 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: Pod
apiVersion: v1
metadata:
name: write-pod
spec:
containers:
- name: write-pod
image: busybox
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && exit 0 || exit 1"
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: myclaim
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs-provisioner
resources:
requests:
storage: 1Mi
- 部署测试用例
kubectl apply -f write-pod.yaml
- 验证是否正常
$ kubectl get po
NAME READY STATUS RESTARTS AGE
write-pod 0/1 Completed 0 8s
pod状态为Completed
则为正常,若长时间为ContainerCreating
状态则为不正常,请确认安装操作步骤是否正确。
- 清除测试用例
kubectl delete -f write-pod.yaml