1. 创建 Dataset
1
2
3
4
5
6
7
8
9
10
| kubectl apply -f - <<EOF
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: nfs-demo
spec:
mounts:
- mountPoint: x.x.x.x:/x-x/
name: nfs-demo
EOF
|
2. 创建 Runtime
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| kubectl apply -f - <<EOF
apiVersion: data.fluid.io/v1alpha1
kind: ThinRuntimeProfile
metadata:
name: nfs
spec:
fileSystemType: nfs
fuse:
image: fluidcloudnative/nfs
imageTag: v0.1
imagePullPolicy: IfNotPresent
command:
- "/usr/local/bin/entrypoint.sh"
EOF
|
1
2
3
4
5
6
7
8
| kubectl apply -f - <<EOF
apiVersion: data.fluid.io/v1alpha1
kind: ThinRuntime
metadata:
name: nfs-demo
spec:
profileName: nfs
EOF
|
3. 创建测试 Pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: nfs-demo
spec:
containers:
- name: nfs-demo
image: shaowenchen/demo-ubuntu
volumeMounts:
- mountPath: /data
name: nfs-demo
volumes:
- name: nfs-demo
persistentVolumeClaim:
claimName: nfs-demo
EOF
|
4. 性能测试
4.1 测试工具
1
| curl -sfL https://raw.githubusercontent.com/shaowenchen/ops/main/getcli.sh | VERSION=latest sh -
|
1
| opscli task --filepath ~/.ops/tasks/get-diskio-byfio.yaml --filename ./testfile --size 10g -i 127.0.0.1
|
4.2 三种 nfs 挂载方式
- Direct 直接挂载到主机目录
1
| mount -t nfs x.x.x.x:/x-x/ /data/
|
- 使用 CSI-Driver-NFS 提供 NFS 存储
参考 https://github.com/kubernetes-csi/csi-driver-nfs
- 使用 Fluid NFS Runtime 提供 NFS 存储
4.3 测试结果 - 10 GB 数据
- Random Read Testing (随机读取测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (GiB) |
---|
Direct | 28.0k | 113 | 90469 | 10 |
CSI NFS Pod | 3115 | 12.2 | 841368 | 10 |
Fluid NFS Pod | 28.2k | 110 | 93052 | 10 |
- Random Write Testing (随机写入测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (GiB) |
---|
Direct | 28.6k | 112 | 91775 | 10 |
CSI NFS Pod | 3217 | 12.6 | 814718 | 10 |
Fluid NFS Pod | 29.2k | 114 | 89678 | 10 |
- Sequential Read Testing (顺序读取测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (GiB) |
---|
Direct | 3029 | 379 | 27043 | 10 |
CSI NFS Pod | 1150 | 144 | 71226 | 10 |
Fluid NFS Pod | 2606 | 326 | 31428 | 10 |
- Sequential Write Testing (顺序写入测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (GiB) |
---|
Direct | 3092 | 387 | 26489 | 10 |
CSI NFS Pod | 1154 | 144 | 70946 | 10 |
Fluid NFS Pod | 2300 | 288 | 35605 | 10 |
- Random Read IOPS Testing (随机读取 IOPS 测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (GiB) |
---|
Direct | 10.5k | 40.0 | 249817 | 10 |
CSI NFS Pod | 3107 | 12.1 | 843484 | 10 |
Fluid NFS Pod | 9202 | 35.9 | 284852 | 10 |
- Random Write IOPS Testing (随机写入 IOPS 测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (GiB) |
---|
Direct | 14.2k | 55.6 | 184205 | 10 |
CSI NFS Pod | 3148 | 12.3 | 832589 | 10 |
Fluid NFS Pod | 12.0k | 50.6 | 202321 | 10 |
4.4 测试结果 - 1 GB 数据
- Random Read Testing (随机读取测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 27.2k | 106 | 9648 | 1024 |
CSI NFS Pod | 20.3k | 79.4 | 12901 | 1024 |
Fluid NFS Pod | 36.1k | 141 | 7255 | 1024 |
- Random Write Testing (随机写入测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 27.6k | 108 | 9489 | 1024 |
CSI NFS Pod | 28.3k | 110 | 9275 | 1024 |
Fluid NFS Pod | 20.5k | 80.3 | 12759 | 1024 |
- Sequential Read Testing (顺序读取测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 4291 | 536 | 1909 | 1024 |
CSI NFS Pod | 1125 | 141 | 7280 | 1024 |
Fluid NFS Pod | 4662 | 583 | 1757 | 1024 |
- Sequential Write Testing (顺序写入测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 4689 | 586 | 1747 | 1024 |
CSI NFS Pod | 1161 | 145 | 7052 | 1024 |
Fluid NFS Pod | 3803 | 475 | 2154 | 1024 |
- Random Read IOPS Testing (随机读取 IOPS 测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 15.5k | 60.7 | 16871 | 1024 |
CSI NFS Pod | 14.4k | 56.3 | 18195 | 1024 |
Fluid NFS Pod | 15.0k | 58.8 | 17419 | 1024 |
- Random Write IOPS Testing (随机写入 IOPS 测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 13.1k | 51.1 | 20020 | 1024 |
CSI NFS Pod | 15.0k | 62.4 | 16423 | 1024 |
Fluid NFS Pod | 13.2k | 51.5 | 19875 | 1024 |
4.5 测试结果 - 100 MB 数据
好的,我将按照您提供的格式整理全部的测试案例。
- Rand_Read_Testing (随机读取测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 14.3k | 55.7 | 1794 | 100 |
CSI NFS Pod | 28.1k | 110 | 912 | 100 |
Fluid NFS Pod | 37.0k | 145 | 691 | 100 |
- Rand_Write_Testing (随机写入测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 26.5k | 104 | 966 | 100 |
CSI NFS Pod | 29.4k | 115 | 872 | 100 |
Fluid NFS Pod | 9052 | 35.4 | 2828 | 100 |
- Sequ_Read_Testing (顺序读取测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 3603 | 450 | 222 | 100 |
CSI NFS Pod | 1568 | 196 | 510 | 100 |
Fluid NFS Pod | 6779 | 847 | 118 | 100 |
- Sequ_Write_Testing (顺序写入测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 6666 | 833 | 120 | 100 |
CSI NFS Pod | 6349 | 794 | 126 | 100 |
Fluid NFS Pod | 6451 | 806 | 124 | 100 |
- Rand_Read_IOPS_Testing (随机读取 IOPS 测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 15.4k | 60.0 | 1666 | 100 |
CSI NFS Pod | 14.6k | 56.8 | 1759 | 100 |
Fluid NFS Pod | 15.4k | 60.2 | 1660 | 100 |
- Rand_Write_IOPS_Testing (随机写入 IOPS 测试)
测试环境 | IOPS | 带宽 (MiB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 13.5k | 52.6 | 1900 | 100 |
CSI NFS Pod | 15.8k | 61.9 | 1616 | 100 |
Fluid NFS Pod | 13.2k | 51.4 | 1944 | 100 |
- Rand_Read_Latency_Testing (随机读取延迟测试)
测试环境 | IOPS | 带宽 (kB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 496 | 1985 | 51594 | 100 |
CSI NFS Pod | 579 | 2319 | 44159 | 100 |
Fluid NFS Pod | 458 | 1833 | 55868 | 100 |
- Rand_Write_Latency_Testing (随机写入延迟测试)
测试环境 | IOPS | 带宽 (kB/s) | 用时 (msec) | 数据大小 (MiB) |
---|
Direct | 458 | 1836 | 55785 | 100 |
CSI NFS Pod | 575 | 2301 | 44495 | 100 |
Fluid NFS Pod | 444 | 1776 | 57651 | 100 |
4.5 结论
直接挂载 NFS 的方式性能是最好的,但在 Kubernetes 下只能用 HostPath 挂载,不便于使用。
对于小文件的读写能力很好,适合存储代码等场景,但相较于其他方式优势并不明显。
Fluid Runtime 提供的 NFS 性能与 Direct 直接挂载的方式性能相差不大,原因在于 Fuse Pod 的原理就是挂载 NFS 目录到当前主机目录。