文章目录0 背景与架构0.1 为什么需要NFS0.2 环境架构0.3 镜像拉取方案1 配置NFS服务器rockylinux10-41.1 创建出 rockylinux10-41.2 安装nfs-utils1.3 创建共享目录并设置权限1.4 配置/etc/exports1.5 启动并启用nfs-server1.6 验证NFS共享2 在所有K8s节点安装nfs-utils客户端3 部署nfs-subdir-external-provisioner3.1 下载部署文件3.2 修改deployment.yaml3.3 应用部署4 验证部署4.1 查看 Pod 状态4.2 查看 StorageClass5 测试RWX PVC5.1 创建 RWX PVC5.2 创建两个 Pod 同时挂载5.3 验证数据共享6 常见问题与解决6.1 镜像拉取失败ImagePullBackOff6.2 Pod 一直 Pending6.3 挂载失败7 总结感谢阅读0 背景与架构0.1 为什么需要NFS在 《02_在多个RockyLinux10虚拟机上安装k8s集群》 和 《04_在k8s集群中安装OpenEBS Rawfile并测试快照》 之后我们的集群已经具备了本地存储Rawfile和快照能力。但 Rawfile 只支持ReadWriteOnceRWO而很多场景例如多个Pod同时读写同一份数据需要ReadWriteManyRWX。NFS 是 Kubernetes 中原生支持 RWX 的存储方案之一它允许多个节点上的多个 Pod 同时挂载同一个共享目录并进行读写。非常适合学习 PVC 的不同访问模式尤其是 RWX。0.2 环境架构IP虚拟机名称角色说明192.168.56.101rockylinux10-1control-planek8s master 节点192.168.56.102rockylinux10-2workerk8s worker 节点192.168.56.103rockylinux10-3workerk8s worker 节点192.168.56.104rockylinux10-4NFS Server独立的 NFS 服务器这个是从 rockylinux10-1 的 VirtualBox 快照中复制出来后配置的0.3 镜像拉取方案由于国内网络限制我们采用以下镜像源原始仓库替换地址用途docker.iodocker.m.daocloud.ioDaoCloud 镜像加速registry.k8s.iok8s.m.daocloud.ioDaoCloud 的 k8s 镜像代理1 配置NFS服务器rockylinux10-41.1 创建出 rockylinux10-4从 rockylinux10-1 的 VirtualBox 快照rockylinux10-init中复制出 rockylinux10-4如下图在弹出的对话框中做如下图的配置复制好之后启动 rockylinux10-4我们来修改它的静态 ip 和 hostname 。这块儿可以参考 《02_在多个RockyLinux10虚拟机上安装k8s集群》 的1.14 设置静态IP小节的内容。由于 rockylinux10-4 是从 rockylinux10-1 复制出来的所以不用想现在 rockylinux10-4 的静态 ip 肯定是192.168.56.101我们直接在 rockylinux10-4 中执行nmtui命令如下图回车之后回车之后按照上图的编辑好之后一路 OK就好。然后设置 hotstname 主机名hostnamectl set-hostname rockylinux10-4然后 reboot 重启 rockylinux10-4 。重启之后给 rockylinux10-1 到 10-4 的每台机器设置一下 /etc/hosts 保证有如下内容192.168.56.101 rockylinux10-1192.168.56.102 rockylinux10-2192.168.56.103 rockylinux10-3192.168.56.104 rockylinux10-41.2 安装nfs-utils在rockylinux10-4上执行sudodnfinstall-ynfs-utils1.3 创建共享目录并设置权限sudomkdir-p/data/k8s-nfssudochownnobody:nobody /data/k8s-nfssudochmod777/data/k8s-nfs这里设置为nobody:nobody和777是为了简化权限生产环境请根据实际需求调整。1.4 配置/etc/exports编辑/etc/exports添加以下内容/data/k8s-nfs192.168.56.0/24(rw,sync,no_subtree_check,no_root_squash)参数说明rw读写权限sync同步写入no_subtree_check不检查子树提高性能no_root_squash允许 root 用户保持权限方便测试1.5 启动并启用nfs-serversudoexportfs-rasudosystemctl restart nfs-serversudosystemctlenablenfs-server1.6 验证NFS共享sudoshowmount-elocalhost期望输出Export list for localhost: /data/k8s-nfs 192.168.56.0/242 在所有K8s节点安装nfs-utils客户端Kubernetes 的 kubelet 需要调用mount -t nfs来挂载 NFS因此每个节点都需要安装nfs-utils。在rockylinux10-1、10-2、10-3上分别执行sudodnfinstall-ynfs-utils--disablerepodocker-ce-stable加--disablerepodocker-ce-stable是为了跳过可能会连接失败的 Docker 仓库避免dnf卡住。如果已经永久禁用了该仓库可以省略此参数。3 部署nfs-subdir-external-provisionernfs-subdir-external-provisioner是 Kubernetes SIG-Storage 官方维护的项目它可以在 NFS 共享目录下自动创建子目录作为 PV实现动态供应。3.1 下载部署文件在 master 节点rockylinux10-1上执行mkdir-p~/nfs-provisionercd~/nfs-provisioner# 下载三个 YAML 文件curl-Ohttps://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/deployment.yamlcurl-Ohttps://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/rbac.yamlcurl-Ohttps://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/class.yaml如果curl下载失败可以用浏览器打开链接保存文件。3.2 修改deployment.yaml需要修改三个地方a. 修改 NFS 服务器地址和路径找到env部分改成你的 NFS 服务器信息env:-name:PROVISIONER_NAMEvalue:k8s-sigs.io/nfs-subdir-external-provisioner-name:NFS_SERVERvalue:192.168.56.104# NFS 服务器 IP-name:NFS_PATHvalue:/data/k8s-nfs# NFS 共享路径volumes:-name:nfs-client-rootnfs:server:192.168.56.104# 同上path:/data/k8s-nfs# 同上b. 修改镜像地址为国内可访问的原镜像registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2国内拉不动改成 DaoCloud 的镜像源image:docker.m.daocloud.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2c. 确认镜像版本当前最新稳定版是v4.0.2。如果拉取失败可以试试v4.0.1或v4.0.0。3.3 应用部署kubectl apply-frbac.yaml kubectl apply-fdeployment.yaml kubectl apply-fclass.yaml4 验证部署4.1 查看 Pod 状态kubectl get pods|grepnfs-client期望输出nfs-client-provisioner-6bd7ff8964-gf9jv 1/1 Running 0 2m4.2 查看 StorageClasskubectl get sc期望输出NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE AGE nfs-client k8s-sigs.io/nfs-subdir-external-provisioner Delete Immediate 2m5 测试RWX PVC5.1 创建 RWX PVC创建文件test-pvc-rwx.yamlapiVersion:v1kind:PersistentVolumeClaimmetadata:name:demo-rwx-pvcspec:accessModes:-ReadWriteManystorageClassName:nfs-clientresources:requests:storage:1Gi应用kubectl apply-ftest-pvc-rwx.yaml kubectl get pvc期望输出NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE demo-rwx-pvc Bound pvc-e380223a-732e-4446-89e9-20af374a7803 1Gi RWX nfs-client 10s5.2 创建两个 Pod 同时挂载创建文件test-pods-rwx.yamlapiVersion:v1kind:Podmetadata:name:demo-rwx-pod-1spec:containers:-name:busyboximage:m.daocloud.io.localcache.registry:65000/docker.io/library/busybox:1.38.0command:[/bin/sh,-c,while true; do echo pod-1 /mnt/data/test.txt; sleep 5; done]volumeMounts:-name:datamountPath:/mnt/datavolumes:-name:datapersistentVolumeClaim:claimName:demo-rwx-pvc---apiVersion:v1kind:Podmetadata:name:demo-rwx-pod-2spec:containers:-name:busyboximage:m.daocloud.io.localcache.registry:65000/docker.io/library/busybox:1.38.0command:[/bin/sh,-c,while true; do echo pod-2 /mnt/data/test.txt; sleep 5; done]volumeMounts:-name:datamountPath:/mnt/datavolumes:-name:datapersistentVolumeClaim:claimName:demo-rwx-pvc应用kubectl apply-ftest-pods-rwx.yaml kubectl get pods-owide5.3 验证数据共享进入任意一个 Pod 查看文件内容kubectlexec-itdemo-rwx-pod-1 --cat/mnt/data/test.txt你会看到pod-1和pod-2交替出现证明RWX 生效。6 常见问题与解决6.1 镜像拉取失败ImagePullBackOff现象nfs-client-provisionerPod 处于ImagePullBackOff。排查kubectl describe pod-lappnfs-client-provisioner|grep-EImage:|Failed解决将deployment.yaml中的镜像地址替换为国内可访问的镜像源例如image:docker.m.daocloud.io/sig-storage/nfs-subdir-external-provisioner:v4.0.26.2 Pod 一直 Pending现象使用 RWX PVC 的 Pod 一直Pending。排查kubectl describe podpod-name常见原因PVC 未绑定检查 PVC 状态确保STATUS为Bound。节点资源不足检查节点 CPU/内存。节点污点Master 节点有污点Pod 需要容忍度。6.3 挂载失败现象Pod 事件中出现mount failed或permission denied。解决确认所有节点已安装nfs-utils。确认 NFS 服务器共享目录权限正确/data/k8s-nfs为777或合适的权限。确认/etc/exports中no_root_squash已设置并执行exportfs -ra。7 总结通过本文我们完成了以下工作配置了 NFS 服务器在rockylinux10-4上安装并启动了 NFS 服务共享/data/k8s-nfs目录。在所有 K8s 节点安装了 nfs-utils确保 kubelet 可以挂载 NFS。部署了 nfs-subdir-external-provisioner实现了 NFS 存储的动态供应并创建了nfs-clientStorageClass。测试了 RWX PVC创建了ReadWriteMany的 PVC并用两个 Pod 同时挂载验证了多节点读写共享。感谢阅读
企业数字化 ERP 产品动态
相关推荐
【电磁大数据理论与算法】 第三课:星链信号特性与被动雷达应用 星链的卫星在约 550 km 高的轨道上,用 Ku 波段的用户下行把数据洒向地面。这段信号不是为雷达发的,带宽、波形、发射时刻都由通信需求决定。要把它当机会照射源,第一步不是设计系统,而是把信号本身看清楚:它由几部分构… · 2026/9/27 5:04:06
葡萄酒感官建模:PLSR与品酒师偏差校正实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:04:06
3个坑点拆解:如何做购物网站的设计最佳实践 3个坑点拆解:如何做购物网站的设计最佳实践 别再把“模板网站太丑不够用”当借口了。如果你还在用五年前的电商模板,不仅转化率上不去,连用户停留时长都撑不过3秒。很多项目经理在立项时只盯着功能列表,却忽略了视觉体验对转化的决定性影响。真正的… · 2026/9/27 5:04:00
C语言学习之始 1.自我介绍2.编程目标3.学习方法4.学习期限5.想进入的IT公司1.自我介绍我是一名通信工程专业的普通学生,之前发布过一个有关数学建模的文章,感兴趣的可以去看看了解一下。目前才刚刚接触c语言,我希望能够在学习c语言的同时利用博客来记录和分… · 2026/9/27 5:51:51
5.5 教学辅助 教师的工作时间很大一部分消耗在非教学本身的事务上,例如备课、出题、写评语、准备家长会发言等。这些内容有模式可循,但每次都需要从头来过,消耗大量时间和精力。大模型可以帮教师快速完成这些有规律的文字工作,把更多时间留给真… · 2026/9/27 5:51:45
扩散模型图像恢复实战:DDPM原理、代码实现与踩坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:51:38
单节锂电池保护芯片CM100E深度解析:快速定制与新国标实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:51:38
网站开发有哪些书籍实战案例 零基础做网站选对书能省一半建站报价 自己不会代码想做网站,最怕的不是学不会,而是买错书。很多人搜“网站开发有哪些书籍”,点进去全是枯燥的理论堆砌,看完还是连个静态页面都搭不起来。更坑的是,拿着这些过时的教程去问服务商,对方一看你连基础都搞不… · 2026/9/27 5:51:32
Smith圆图实战:2.4GHz天线L型匹配四步法 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:51:32
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01