NFS 共享存储部署

需要为 CubeStudio 准备一套可被所有 k8s 节点共享读写的存储(/data/k8s 目录)时,用 NFS 搭建最简单的共享文件系统

02-部署安装 / 存储准备
NFS共享存储分布式存储nfs-kernel-servernfs-commonnfs-utilsrpcbindexportsshowmount在线安装离线安装ubuntucentos/data/k8s/data/nfsReadWriteMany

NFS 共享存储部署

CubeStudio 在多机/多节点部署时,要求每台机器的 /data/k8s/ 目录是同一份共享存储(pipeline 工作目录、dataset、global、用户工作空间等都落在该目录下)。NFS 是搭建这份共享存储最简单的方式,适合中小规模集群或测试环境;对一致性、吞吐有更高要求的场景可改用 Ceph 或对象存储(见关联文档)。

共享存储在平台中的目录用途与挂载约定,见 04-运维管理/分布式存储目录.md

本文覆盖在线安装、离线安装、server/client 配置与性能压测。

一、安装 NFS

在线安装(所有节点)

Ubuntu:

apt update
apt install -y nfs-kernel-server
apt install -y nfs-common

CentOS:

yum install -y nfs-utils rpcbind

离线安装

Ubuntu 使用 deb 包方式安装(所有节点)

按自己的系统版本查找对应的包:https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/n/nfs-utils/

下载 nfs-commonnfs-kernel-server 后安装:

dpkg -i nfs-common
dpkg -i nfs-kernel-server

CentOS 使用 rpm 包方式安装(所有节点)

wget https://cube-studio.oss-cn-hangzhou.aliyuncs.com/install/nfsrpm.tar.gz
tar -zxvf nfsrpm.tar.gz
cd nfs
rpm -ivh *.rpm --force --nodeps

二、NFS server 配置

# 修改配置文件,增加下面这一行数据
# /data/nfs/ 代表 nfs server 本地存储目录
mkdir -p /data/nfs
echo "/data/nfs/ *(rw,no_root_squash,async)" >> /etc/exports

# 加载配置文件
exportfs -arv
systemctl enable rpcbind.service
systemctl enable nfs-server.service
systemctl start rpcbind.service
systemctl start nfs-server.service

# 验证
[root@nfs ~]# showmount -e localhost
Export list for localhost:
/data/nfs   *

server 端把存储目录软链到 CubeStudio 约定的 /data/k8s 目录:

mkdir -p /data/nfs/k8s
ln -s /data/nfs/k8s /data/

说明:ln -s /data/nfs/k8s /data/ 会在 /data/ 下生成名为 k8s 的软链,即 /data/k8s -> /data/nfs/k8s。CubeStudio 默认把分布式存储挂载/软链到每台机器的 /data/k8s/(见 04-运维管理/分布式存储目录.md)。

如果只是单机部署 NFS,到这里就部署结束了;如果是多机部署,则还需要在客户端机器上继续部署客户端。

三、NFS client 配置

客户端依据以下步骤配置。注意:客户端和服务端的挂载不能在同一台机器上,否则挂载会出现问题。

export server=192.168.3.100

# 查看 nfs server 信息
showmount -e $server
# 结果
# Export list for xx.xx.xx.xx:
# /data/nfs      *

# 系统层面添加挂载(写入 /etc/fstab,重启自动挂载),将服务端的 /data/nfs 挂载到客户端的 /data/nfs
mkdir -p /data/nfs
echo "${server}:/data/nfs  /data/nfs   nfs   defaults  0  0" >> /etc/fstab
mount -a

# 或者使用命令行挂载;如果是同一台机器请注意不要用同一个地址
mount -t nfs $server:/data/nfs /data/nfs

# 验证
df -h | grep nfs

# 软链到 CubeStudio 的目录
mkdir -p /data/nfs/k8s
ln -s /data/nfs/k8s /data/

# 输出类似下面,表示挂载成功
[root@node02 ~]# df -h /data/nfs/
Filesystem                Size  Used Avail Use% Mounted on
172.16.101.13:/data/nfs  3.5T  626M  3.5T   1% /data/nfs

四、性能压测

# 写入测试
time dd if=/dev/zero of=/data/nfs/test bs=2M count=1000
# 读取测试
time dd if=/data/nfs/test of=/dev/null bs=2M

附:在 k8s 中使用 NFS(示例 PV/PVC)

install/kubernetes/nfs/nfs.yaml 提供了一个直接用 NFS 作为 PV 的示例(ReadWriteManyRetain 回收策略),可作为编写自定义 PV/PVC 的参考:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /data/nfs/test
    server: 9.135.95.95   # 改成你的 NFS server 地址

同目录下还有 cfs.yaml(腾讯云 CFS 的 CSI 示例,driver 为 com.tencent.cloud.csi.cfs)可参考。具体字段以 install/kubernetes/nfs/ 下的 yaml 源码为准。

最后更新 2026-07-05完整文档以官方仓库为准:GitHub Wiki