具有 TB 数据的 kubernetes 上的 ReadWriteMany 卷
ReadWriteMany volumes on kubernetes with terabytes of data
我们想要部署一个 k8s 集群,它将同时 运行 ~100 IO-heavy pods。他们都应该能够访问同一卷。
到目前为止我们尝试了什么:
- CephFS
- 设置起来非常复杂。很难排除故障。最后崩溃了很多,原因也不完全清楚。
- Helm NFS 服务器配置器
- 运行很好,但是当 IO 达到峰值时,单个副本是不够的。我们根本无法让多个副本工作。
- 最小IO
- 是在k8s中创建存储桶的好工具。但是我们的操作需要fs挂载。 s3fs 在理论上是可行的,但由于我们 运行 ~100 pods,我们还需要 运行 100 个 s3fs sidecars。这似乎是个坏主意。
必须有某种方法可以将 2TB 的数据挂载到具有相对高可用性的 GKE 集群中吗?
Firestorage 似乎可行,但它比其他解决方案要昂贵得多,而且如果有大量 IO 操作,它很快就会变得不可行。
我打算在服务器故障时提出这个问题,但 k8s 社区比 SO 小得多。
我想我在 2020 年 1 月有了明确的答案,至少对于我们的用例而言:
| Solution | Complexity | Performance | Cost |
|-----------------|------------|-------------|----------------|
| NFS | Low | Low | Low |
| Cloud Filestore | Low | Mediocre? | Per Read/Write |
| CephFS | High* | High | Low |
* You need to add an additional step for GKE: Change the base image to ubuntu
我自己还没有对 Filestore 进行基准测试,但我会接受 stringy05 的回复:其他人很难从中获得非常好的吞吐量
如果 Helm 支持,Ceph 会简单很多。
我们想要部署一个 k8s 集群,它将同时 运行 ~100 IO-heavy pods。他们都应该能够访问同一卷。
到目前为止我们尝试了什么:
- CephFS
- 设置起来非常复杂。很难排除故障。最后崩溃了很多,原因也不完全清楚。
- Helm NFS 服务器配置器
- 运行很好,但是当 IO 达到峰值时,单个副本是不够的。我们根本无法让多个副本工作。
- 最小IO
- 是在k8s中创建存储桶的好工具。但是我们的操作需要fs挂载。 s3fs 在理论上是可行的,但由于我们 运行 ~100 pods,我们还需要 运行 100 个 s3fs sidecars。这似乎是个坏主意。
必须有某种方法可以将 2TB 的数据挂载到具有相对高可用性的 GKE 集群中吗?
Firestorage 似乎可行,但它比其他解决方案要昂贵得多,而且如果有大量 IO 操作,它很快就会变得不可行。
我打算在服务器故障时提出这个问题,但 k8s 社区比 SO 小得多。
我想我在 2020 年 1 月有了明确的答案,至少对于我们的用例而言:
| Solution | Complexity | Performance | Cost |
|-----------------|------------|-------------|----------------|
| NFS | Low | Low | Low |
| Cloud Filestore | Low | Mediocre? | Per Read/Write |
| CephFS | High* | High | Low |
* You need to add an additional step for GKE: Change the base image to ubuntu
我自己还没有对 Filestore 进行基准测试,但我会接受 stringy05 的回复:其他人很难从中获得非常好的吞吐量
如果 Helm 支持,Ceph 会简单很多。