You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中将所有hostPath存储卷更换为NFS并创建PVC且不丢失数据

裸金属Kubernetes集群hostPath存储切换为NFS存储操作指南(无数据丢失方案)

集群基础信息

Kubernetes version: 1.22.2
Installation method: bare-metal
Host OS: Ubuntu 20.04
CNI and version: Flannel 0.15.0
CRI and version: Docker 20.10.9

操作步骤

1. 前置环境部署

  • 所有Kubernetes集群节点安装NFS客户端依赖:
    apt update && apt install nfs-common -y
    
  • 独立部署NFS服务端:
    选择一台集群内或和集群网络互通的机器作为NFS服务端,执行安装:
    apt update && apt install nfs-kernel-server -y
    
    创建NFS共享目录,配置/etc/exports开放集群节点网段访问权限,重启nfs-server服务生效,确保所有集群节点都可以正常挂载该NFS共享目录。
  • 部署NFS存储类(StorageClass)
    在集群中部署nfs-subdir-external-provisioner组件,配置对应NFS服务端地址、共享路径,创建NFS类型的StorageClass,可根据需要设置为集群默认存储类。

2. 存量数据迁移(核心防丢失步骤)

  • 首先排查集群内所有使用hostPath存储的工作负载(Deployment、StatefulSet、DaemonSet等),记录每个hostPath卷对应的所在节点、本地路径、Pod内挂载路径、所属业务、目录占用空间。
  • 按业务优先级从低到高迁移,迁移单个业务前先将工作负载副本数缩为0,停止业务写入,避免数据不一致:
    kubectl scale <workload-type> <workload-name> --replicas=0 -n <namespace>
    
  • 为每个hostPath卷创建对应PVC,PVC的storageClassName指定为已部署的NFS存储类,存储容量不小于原hostPath目录的实际占用空间。
  • 启动临时辅助Pod,同时挂载新建的PVC和原hostPath所在节点的本地目录,使用rsync全量同步数据,保留文件权限、所有者、软链接等属性:
    rsync -avz /原hostPath本地目录/ /辅助Pod内PVC挂载路径/
    
    同步完成后校验两端文件数量、大小、权限完全一致。
  • 修改原工作负载的卷配置,删除原hostPath配置,替换为新建PVC的挂载配置,将工作负载副本数恢复为原数值,启动业务。
  • 业务启动后验证功能正常、数据完整,确认无误后原hostPath目录数据建议保留7天以上再删除,预留回滚空间。

注意事项

  • StatefulSet使用volumeClaimTemplates的场景,直接修改模板中的存储类为NFS类型,滚动更新前单独同步每个Pod对应hostPath的数据到对应PVC即可。
  • NFS共享目录权限需要和原hostPath目录权限保持一致,避免Pod启动后出现读写权限异常。
  • 建议先迁移非核心业务验证流程正确性,再执行核心业务迁移。

内容的提问来源于stack exchange,提问作者Aterow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:45:06