This guide is written for Alibaba Cloud Container Service for Kubernetes (ACK). It should work with minor tweaks on other standard Kubernetes environments.
eRDMA is available on multiple regions of Alibaba Cloud without extra fee. And it is fully compatible with 3FS.
Here is an example of creating a compatible ACK cluster with aliyun
CLI:
aliyun cs POST /clusters --header "Content-Type=application/json" --body '{
"name": "3FS-example",
"cluster_type": "ManagedKubernetes",
"kubernetes_version": "1.32.1-aliyun.1",
"region_id": "cn-beijing",
"snat_entry": true,
"proxy_mode": "ipvs",
"addons": [
{
"name": "terway-controlplane"
},
{
"name": "terway-eniip"
},
{
"name": "csi-plugin"
},
{
"name": "managed-csiprovisioner"
},
{
"name": "nginx-ingress-controller",
"disabled": true
},
{
"name": "ack-erdma-controller",
"config": "{\"agent\":{\"preferDriver\":\"compat\",\"allocateAllDevices\":true}}"
}
],
"cluster_spec": "ack.pro.small",
"charge_type": "PostPaid",
"zone_ids": [
"cn-beijing-i"
],
"service_cidr": "192.168.0.0/16",
"ip_stack": "ipv4",
"is_enterprise_security_group": true,
"nodepools": [
{
"nodepool_info": {
"name": "default-nodepool"
},
"scaling_group": {
"system_disk_category": "cloud_essd",
"system_disk_size": 60,
"system_disk_performance_level": "PL0",
"system_disk_encrypted": false,
"instance_types": [
"ecs.g8ise.xlarge",
"ecs.g8i.xlarge"
],
"instance_charge_type": "PostPaid",
"platform": "AliyunLinux",
"image_type": "AliyunLinux3",
"desired_size": 4
},
"kubernetes_config": {
"pre_user_data": "bWtkaXIgLXAgL2V0Yy9jb250YWluZXJkL2NlcnQuZC9kb2NrZXIuaW8vCmNhdCA+IC9ldGMvY29udGFpbmVyZC9jZXJ0LmQvZG9ja2VyLmlvL2hvc3RzLnRvbWwgPDxFT0YKc2VydmVyID0gImh0dHBzOi8vcmVnaXN0cnktMS5kb2NrZXIuaW8iCltob3N0LiJodHRwczovL21pcnJvcnMtc3NsLmFsaXl1bmNzLmNvbS8iXQogIGNhcGFiaWxpdGllcyA9IFsicHVsbCIsICJyZXNvbHZlIl0KICBza2lwX3ZlcmlmeSA9IHRydWUKRU9G",
"runtime": "containerd",
"runtime_version": "1.6.37"
}
}
]
}'
- Please choose instance types that support eRDMA (e.g. ecs.g8ise family).
- It is recommended to choose instance types and zones that supports elastic ephemeral disks (EED), such as cn-beijing-i, for higher performance. Alternatively, you can choose local SSD instance types (ecs.i4 family) for optimal performance, but manual initialization of the local disk is required.
- Please create at least 3 nodes, as the fdb operator requires 3 coordinators on 3 different nodes by default.
- ack-erdma-controller component is required to enable eRDMA.
- The open-source FoundationDB component needs to be pulled from DockerHub. To accelerate that, it is recommended to configure Alibaba's mirror.
3FS uses FoundationDB. If you also want to deploy the FDB cluster in Kubernetes, you may want to use the operator. For your convenience, we provide example deployment manifests here:
kubectl create ns fdb
kubectl apply -n fdb -f ./fdb-operator
Use helm to deploy the 3FS cluster along with the FDB cluster:
helm install 3fs ./chart -n 3fs --create-namespace --timeout 10m
It will take several minutes. Before the initialization completes, some containers may crash several times, this is normal.
When deploying out of cn-beijing region, please remove the "-vpc" from domain name of image.
Once deployed, you can access the 3FS cluster via:
- admin-cli:
kubectl attach -n 3fs admin-cli-3fs -it
(Press Ctrl+D to see the prompt)Press Ctrl+D again to exit./ > list-nodes Id Type Status Hostname Pid Tags LastHeartbeatTime ConfigVersion ReleaseVersion 2 MGMTD PRIMARY_MGMTD mgmtd-3fs-2 1 [] N/A 0(UPTODATE) 250228-dev-1-999999-f5fd8c05 1 MGMTD HEARTBEAT_CONNECTED mgmtd-3fs-1 1 [] 2025-03-21 19:52:58 0(UPTODATE) 250228-dev-1-999999-f5fd8c05 100 META HEARTBEAT_CONNECTED meta-3fs-100 1 [] 2025-03-21 19:52:59 0(UPTODATE) 250228-dev-1-999999-f5fd8c05 101 META HEARTBEAT_CONNECTED meta-3fs-101 1 [] 2025-03-21 19:52:56 0(UPTODATE) 250228-dev-1-999999-f5fd8c05 10000 STORAGE HEARTBEAT_CONNECTED storage-3fs-10000 1 [] 2025-03-21 19:53:04 0(UPTODATE) 250228-dev-1-999999-f5fd8c05 10001 STORAGE HEARTBEAT_CONNECTED storage-3fs-10001 1 [] 2025-03-21 19:53:04 0(UPTODATE) 250228-dev-1-999999-f5fd8c05 10002 STORAGE HEARTBEAT_CONNECTED storage-3fs-10002 1 [] 2025-03-21 19:53:04 0(UPTODATE) 250228-dev-1-999999-f5fd8c05
- fuse:
kubectl exec -n 3fs fuse-3fs -it -- ls /mnt/3fs
and you will see3fs-virt
. It will also mount /mnt/3fs to the host, where you can run fio or other tools to further test it.
These two pods are just examples, you may delete them without affecting the 3FS cluster.
This deployment use 64GiB elastic ephemeral disks (EED), which are the bottleneck of the throughput. To test the performance, Please consider:
- The throughput of the disks
- The cloud disk throughput of the instance
- The network throughput of the instance