3FS是深度求索(DeepSeek)公司自主研发的高性能分布式存储系统,专为AI大模型训练、大数据分析及高性能计算(HPC)场景优化设计。在3FS中,融合现代SSD存储与RDMA网络技术,突破传统网络的性能瓶颈。本文介绍如何基于阿里云自研的云上弹性RDMA网络,使用阿里云托管的Kubernetes ACK服务,实现快速部署。
部署方案
基于阿里云高性能弹性RDMA网络eRDMA与弹性临时盘构建3FS集群,使用阿里云的ACK托管集群实现快速部署,轻松搭建跨多个节点的集群服务。
阿里云不对3FS提供技术支持,也不承诺性能。如遇问题,欢迎在GitHub上或加入钉群35532895与我们交流。
弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA)是阿里云自研的云上弹性RDMA网络,底层链路复用VPC网络,采用全栈自研的拥塞控制CC(Congestion Control)算法,享有传统RDMA网络高吞吐、低延迟特性的同时,可支持秒级的大规模RDMA组网。可兼容传统HPC应用、AI应用以及传统TCP/IP应用。
详细信息,请参见弹性RDMA(eRDMA)。
弹性临时盘(Elastic Ephemeral Disk)是一款可灵活随实例创建或单独创建的、由用户自定义选择容量大小的块存储设备,作为临时数据存储使用,为ECS实例提供临时数据存储,具备高性能、高性价比等特点。详细信息,请参见弹性临时盘。
容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)是全球首批通过Kubernetes一致性认证的容器服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,让您轻松高效地在云端运行Kubernetes容器化应用。
详细信息,请参见容器服务Kubernetes版(ACK托管集群)。
3FS关键节点介绍
3FS关键组件及作用如下:
元数据服务Metadata Service(Meta):无状态服务,处理文件系统的元数据请求。底层通过foundation DB实现原子性操作。
数据存储Storage Service(Storage):在存储节点上运行,数据分块存储于高性能NVMe SSD,采用CRAQ(Chain Replication with Apportioned Queries)链式复制协议管理副本,提供write-all-read-any语义。
集群管理Cluster manager(Mgmtd):管理集群的配置信息,存储节点状态,负责选举主节点并对其他组件进行同步更新。
客户端Client:3FS提供了两种形态的客户端,通过FUSE实现标准化访问和USRBIO实现高性能传输,兼顾兼容性与效率,成为AI、大数据等场景的理想存储接口。
FUSE客户端:通过用户态文件系统接口挂载存储集群为本地目录。提供 POSIX 兼容的文件操作接口(
read
/write
/mkdir
),无需修改应用代码。USRBIO高性能客户端:通过用户态I/O栈和RDMA,实现微秒级延迟与超高吞吐,满足AI/HPC需求。
各个组件通过RDMA网络通信,绕过内核协议栈,显著减少 CPU 负载与网络延迟。
准备工作
准备一台开通公网的客户端ECS实例,用于创建和管理ACK集群。如果您已有安装并配置了阿里云CLI的实例,可以跳过此准备工作,直接开始搭建ACK集群。
本文所有操作步骤在此客户端实例上进行。
准备客户端ECS实例
为客户端实例安装并配置阿里云CLI
使用阿里云CLI搭建ACK集群
通过CLI创建基于阿里云托管Kubernetes服务构建的ACK集群,该集群采用Terway ENI网络模式实现容器直连弹性网卡,配备支持eRDMA的加速实例和ESSD云盘优化存储性能,通过containerd运行时与预置镜像加速配置保障容器效率,并启用企业级安全组规则强化网络隔离。
本文中使用自动创建VPC方式搭建ACK集群,会同步创建ACK集群相关的ECS实例、VPC、交换机、安全组、CLB、公网NAT网关、EIP等资源,可能会产生相关费用。详细信息,请参见ACK托管和专有集群计费说明。
本文仅为示例操作,在生产环境中,建议您提前规划集群的规模、网络功能需求、专有网络VPC相关配置(VPC自身、交换机等)和集群网络相关配置(容器网络插件CNI、容器网段、服务网段等),确保网络资源的高效利用,为后续业务扩展预留充足空间。详细信息,请参见ACK托管集群网络规划。
命令中参数描述了ACK集群的配置信息,更多参数信息,请参见创建集群。
如果您希望使用已有VPC创建ACK集群,注意设置VPC下的交换机、安全组等资源。
集群初始化可能需要一段时间,请您耐心等待。
远程连接客户端实例,执行以下命令,创建集群。
集群配置说明如下所示:
从返回信息,可以看到集群ID信息:
集群创建成功后,执行以下命令,查看集群实例。
aliyun cs GET /clusters/cluster_id
替换cluster_id为上一步输出的集群ID,通过返回信息,可以看到集群详细配置信息。
您也可以登录容器服务ACK控制台在集群列表中查看创建的集群:
安装kubectl来管理集群并应用,具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
重要本示例中通过内网连接ACK集群,请确保安装kubectl的客户端实例和ACK集群在同一VPC中,内网互通。
如果客户端实例和ACK集群不在同一VPC内,您可以更换客户端实例的VPC为ACK集群的VPC,详细信息,请参见更换ECS实例的VPC。
配置成功后,执行以下命令,可以列出Kubernetes集群中所有的命名空间。
kubectl get namespace
安装Helm V3。
Helm是一个用于在Kubernetes集群中进行应用管理的开源工具,它提供了统一的应用打包方式,同时支持版本控制,降低了应用分发和部署的复杂性。本文中,我们通过Helm部署3FS集群。关于Helm的更多信息,请参见使用Helm简化应用部署。
wget https://get.helm.sh/helm-v3.3.0-linux-amd64.tar.gz tar -xzvf helm-v3.3.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm helm version
预期输出如下所示,表示安装成功。
在ACK集群上部署3FS
阿里云基于开源3FS文件系统进行了轻量级技术适配,将其封装为标准化容器镜像并提供开箱即用的Helm Chart,实现Kubernetes环境下的自动化部署。相关定制化代码、部署清单及持续集成配置已全面开源并托管于GitHub仓库,支持开发者通过单一命令完成部署。
本示例通过Helm在ACK集群中成功部署了一个包含2个meta节点、2个mgmtd节点、1个fuse客户端以及3个storage节点的3FS集群。
远程连接客户端实例,执行以下命令,获取代码仓库并切换到部署目录。
git clone https://github.com/AliyunContainerService/alibabacloud-3FS.git cd alibabacloud-3FS/deploy/container
执行以下命令,部署FoundationDB Operator。
3FS基于FoundationDB构建存储引擎,部署前需先行搭建FDB集群,我们使用Kubernetes Operator进行部署。
kubectl create ns fdb kubectl apply -n fdb -f ./fdb-operator
执行以下命令,使用代码仓库中提供的helm chart一键部署3FS及其所需的FDB集群。
helm install 3fs ./chart -n 3fs --create-namespace --timeout 10m
说明部署过程中,系统将基于Helm Pod YAML配置自动为Storage节点所在的ECS实例创建弹性临时盘并完成挂载操作。
部署可能需要几分钟时间,初始化阶段某些容器可能出现多次崩溃,属于正常现象,请您耐心等待。
部署完成后,输出如下所示:
部署完成后,我们就得到了一个,通过ACK部署的、基于3FS使用eRDMA进行节点间通信的高性能分布式文件系统。
执行以下命令,查看3fs命名空间中所有Pod。
kubectl get pods -o wide -n 3fs
执行以下命令,访问3FS集群管理控制台。
kubectl attach -n 3fs admin-cli-3fs -it
按Ctrl+D显示提示符后输入
list-nodes
,可以看到3FS集群的各个节点信息(按Ctrl+D退出)。执行以下命令,查看FUSE客户端。
kubectl exec -n 3fs fuse-3fs -it -- ls /mnt/3fs
可看到
3fs-virt
输出,这是3FS fuse客户端的特殊文件夹。同时会将/mnt/3fs目录挂载到ECS实例,可在实例上运行fio等工具测试性能。