我们希望部署一个 k8s 集群,该集群将同时运行 ~100 个 IO 密集型 Pod。它们都应该能够访问同一卷。
到目前为止,我们尝试了什么:
- CephFS
- 设置非常复杂。难以排除故障。最后,它崩溃了很多,原因并不完全清楚。
- Helm NFS Server Provisioning er
- 运行良好,但是当 IO 达到峰值时,单个副本是不够的。我们根本无法让多个副本工作。
- 最小IO
- 是在 K8s 中创建存储桶的绝佳工具。但是我们的操作需要 fs 安装。这在理论上是可能的,但是由于我们运行~100个pod,因此我们需要另外运行100个s3fs边车。这似乎是一个坏主意。
必须有某种方法可以在具有相对高可用性的 GKE 集群中挂载 2TB 的数据吗?
防火似乎有效,但它比其他解决方案贵一个数量级,而且对于大量的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 可能会容易得多。