我们有一个项目,其中我们的托管客户被提供了一个数据库 (MySql) 作为其计划的一部分,我很好奇如何协调这一点。我们希望在与 Web 服务器运行不同的机器上运行数据库。
我正在考虑使用具有新StatefulSet
功能的 Kubernetes,但我对它的工作方式非常感兴趣compose.io
。它们似乎在对 RAM 和磁盘施加限制的情况下保证了 iops 和 CPU,就像它们提供的所有数据库一样。一种方法是在 Kubernetes 中分配有限的持久卷,并在有限的 RAM 下运行容器,而不对 CPU 施加任何限制,但这将创建一个高度不稳定的集群,因为容器/pod 开始消耗 CPU,而 Kubernetes 会不断将它们转移到所需资源所在的节点上。再加上持久卷,速度会变慢,因为在将磁盘连接到其他地方之前必须先终止 pod,这可能会给客户带来大量的停机时间。
我只是好奇,您猜测他们是如何协调他们的数据库的。
答案1
警告:Kubernetes 内部的状态非常困难,在将任何东西投入生产之前,请做好比这个答案更多的功课!
每种情况都不同,但一些最佳做法是:
- 使用 StatefulSets 的多实例集群
- 该集合中的每个 Pod 都有自己的数据卷
- pod 间反亲和性