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-common、nfs-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 的示例(ReadWriteMany、Retain 回收策略),可作为编写自定义 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 源码为准。