在Kubernetes中运行数据库是反模式吗?[closed]

qij5mzcb  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(125)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.

8天前关闭。
Improve this question
假设我们在Kubernetes集群中运行一些服务,其中一个服务需要PostgreSQL示例来可靠地持久化数据。数据库应该位于集群中还是单独配置?
假设数据库部署在集群中,这可能意味着以下情况之一:
1.我们需要一个流程来将数据迁移到另一个节点,以防当前节点出现故障。这听起来像是一个不简单的任务。或者:
1.必须以特殊方式处理数据库所在的节点。必须将水平扩展限制到其他节点,并且集群不再是同构的。这可能被视为设计缺陷,违背了维护一次性、可替换容器的精神。
点(1)仅适用于自我管理的集群,在这种集群中,我们拥有的所有存储都与节点运行的机器绑定。如果我们使用托管云,我们可以使用持久卷声明,新示例可以自动获取数据。尽管如此,这意味着如果删除了具有DB的节点,我们将遭受数据库停机直到新示例出现。因此,第(2)点对于托管K8产品仍然有效。
因此我很理解把DB放在Kubernetes之外的论点。一些反对的论点会是什么样的呢?有很多官方的各种DB的掌舵图,这表明人们毕竟把他们的DB放在Kubernetes集群中。
很高兴能学到一些批判性的思想!

mzsu5hc0

mzsu5hc01#

这不是一个反模式,只是难以实现和管理。

第1点

  • 在自托管集群中,您也可以通过GlusterFS和CEPH配置持久卷存储。因此,您不必总是使用临时存储。因此,第1点并不完全有效。
  • 数据库通常创建为statefulsets,其中每个示例都有自己的数据副本。
    第2点
  • 当您的数据库群集水平扩展时,新数据库单元的“init”容器或数据库提供的CRD需要注册“辅助”数据库单元,以便它成为数据库群集的一部分
  • statefulset还需要作为headless service运行,以便始终知道每个端点的IP,以便进行群集运行状况检查和主节点-〉辅助节点数据同步,并在主节点出现故障时选择新的主节点
  • 因此,只要新的pod注册到DB集群,您就可以在kubernetes集群中运行数据库工作负载

进一步阅读:https://devopscube.com/deploy-postgresql-statefulset/

相关问题