环境
主机名 ip 角色
k8s-nfs 172.16.17.9 nfs存储服务器
k8s-master 172.16.17.10 nfs客户端
k8s-work1 172.16.17.11 nfs客户端
k8s-work2 172.16.17.12 nfs客户端
部署nfs服务(nfs存储服务器)
# 安装nfs服务
yum install -y nfs-utils
# 创建目录授权
mkdir -p /data/nfs
chmod 666 /data/nfs
chown nobody /data/nfs
# 导出文件系统
cat > /etc/exports << EOF
/data/nfs *(rw,sync,insecure,no_subtree_check,no_root_squash)
EOF
# 启动服务
systemctl start nfs-server
systemctl enable nfs-server
# 查看验证
exportfs -rv
exporting *:/data/nfs
/data/nfs *(rw,sync,insecure,no_subtree_check,no_root_squash)说明:
/data/nfs: nfs server 目录
: 表示所有的服务器都可以挂载该nfs,当然也可以指定ip地址/ip地址段
rw: 读写权限
sync:同步写入,即数据写入服务器后再返回响应,保证数据的可靠性和一致性
insecure: 表示不进行端口校验,允许客户端使用非保留端口进行连接
no_subtree_check: 禁止子树检查
no_root_squash: 表示禁用 root 用户映射机制,即来自客户端的 root 用户被映射为匿名用户而没有特权
客户端测试(nfs客户端)
# 安装软件包
yum install -y nfs-utils
# 测试挂载
showmount -e 172.16.17.9
mount -t nfs 172.16.17.9:/data/nfs /mnt
External NFS部署(ks8 master)
项目地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
[root@k8s-master ~]# helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
[root@k8s-master ~]# kubectl create ns nfs
namespace/nfs created
[root@k8s-master ~]# helm install nfs nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -n nfs --set nfs.server=192.168.10.100 --set nfs.path=/data/nfs
[root@k8s-master ~]# helm list -n nfs
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nfs-subdir-external-provisioner default 1 2024-07-15 14:14:00.802073981 +0800 CST deployed nfs-subdir-external-provisioner-4.0.17 4.0.2
[root@k8s-master ~]# kubectl get pod -n nfs
NAME READY STATUS RESTARTS AGE
nfs-subdir-external-provisioner-7x57c6dc4f-czaqp 1/1 Running 0 6s