一、本地部署 NFS 服务端(以 Ubuntu 为例)
1.1 安装 NFS 服务端
sudo apt update
sudo apt install nfs-kernel-server
1.2 创建共享目录并配置权限
sudo mkdir -p /srv/nfs/k8s-pv # 共享目录
sudo chown nobody:nogroup /srv/nfs/k8s-pv # 设置权限(允许匿名访问)
sudo chmod 777 /srv/nfs/k8s-pv
1.3 配置NFS导出目录
#编辑 /etc/exports:
sudo vim /etc/exports
#添加以下内容(允许所有客户端访问):
/srv/nfs/k8s-pv *(rw,sync,no_subtree_check,no_root_squash)
#参数说明:
#rw:读写权限
#sync:同步写入磁盘
#no_root_squash:允许 root 用户访问
#no_subtree_check:禁用子树检查(提高性能)
1.4 应用配置并启动服务
sudo exportfs -ra # 重新加载配置
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server
1.5 验证 NFS 共享
showmount -e localhost # 应显示共享目录
二、在所有Kubernetes节点安装NFS客户端
2.1 根据节点系统类型执行
# Ubuntu/Debian 节点
sudo apt-get update
sudo apt-get install nfs-common -y
# CentOS/RHEL 节点
sudo yum install nfs-utils -y
2.2 验证NFS服务器可访问性
#在节点执行测试(替换您的NFS服务器IP和路径
mkdir -p /mnt/nfs-test
mount -t nfs 192.168.3.160:/srv/nfs/k8s-pv /mnt/nfs-test
umount /mnt/nfs-test
三、在 Kubernetes 中部署 NFS StorageClass
3.1 安装 NFS 客户端驱动
#使用 nfs-subdir-external-provisioner 动态创建 PV
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm install nfs-sc nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=<NFS_SERVER_IP> \ # 替换为 NFS 服务端 IP
--set nfs.path=/srv/nfs/k8s-pv \
--set storageClass.name=nfs-sc \
--set storageClass.defaultClass=true
#如果拉取不下来就把文件下载到本地然后改yaml文件镜像
helm install nfs-sc nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.30.180 \
--set nfs.path=/srv/nfs/k8s-pv \
--set storageClass.name=nfs-sc \
--set storageClass.defaultClass=true \
--set image.repository=registry.cn-guangzhou.aliyuncs.com/xingcangku/nfs-subdir-external-provisioner \
--set image.tag=v4.0.2 \
--set image.pullPolicy=IfNotPresent
3.2 验证安装
root@k8s-master-01:~/helm/nfs-subdir-external-provisioner# kubectl get storageclass # 应看到 nfs-sc 且为默认
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-sc cluster.local/nfs-provisioner-nfs-subdir-external-provisioner Delete Immediate true 7m21s
root@k8s-master-01:~/helm/nfs-subdir-external-provisioner# kubectl get pods -l app=nfs-subdir-external-provisioner # 检查 Pod 状态
NAME READY STATUS RESTARTS AGE
nfs-provisioner-nfs-subdir-external-provisioner-6cbb5bbf-57tqn 1/1 Running 0 7m24s
评论 (0)