k8s

k8s中安装nfs

axing
2025-07-24 / 0 评论 / 3 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2025年07月28日,已超过26天没有更新,若内容或图片失效,请留言反馈。

一、本地部署 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

评论 (0)

取消