问题
我有一个项目要做,它包含以下内容:我需要一个容器化的数据库。当数据库的负载增加并且数据库过载时,我需要使用数据库拉起另一个容器(pod)。问题是新的Pod需要预先加载一些数据(以供用户读取),当负载下降时,新的Pod将终止,并且其中存储的数据需要存储在中央数据库中(以便避免松动)。
我正在使用Kubernetes集群(Google Kubernetes引擎)用于Pod和Mongo数据库。看起来像这样
我知道上述问题可能不是推荐的方法,但这就是他们要我们采取的措施。
现在,问题在于MongoDB不允许这样做(将多个数据库中的内容合并到一个数据库中)。控制Pod(需要动态处理)并将其从中提取数据并将其推入中央数据库的脚本非常复杂,需要控制已提取的数据。
我的解决方案
所以,我的想法是所有容器都指向同一卷。这意味着每个Pod的目录“ / data / db”(mongo在其中存储文件)中的文件对于所有Pod都是相同的,因为为所有Pod安装了相同的卷。看起来像这样
Same Volume Mounted for each Pod
Kubernetes允许您使用多个卷。允许 ReadWriteMany 的是 NFS 和 Cephfs 等。我尝试了this NFS link的示例,但是没有用。第一个吊舱成功启动,但其他吊舱卡在“启动容器”中。我假定无法为其他Pod安装该卷,因为不允许使用WriteMany。
我尝试手动创建一个 Cephfs 集群,但是在使用Kubernetes集群中的集群时遇到了一些麻烦。我的问题是:ceffs会做这项工作吗? cephfs可以在同一个文件中处理多个作者吗?如果可以,Mongo吊舱能否成功升起? NFS应该可以工作,但是没有。