本文介绍 Kubernetes 支持数据库等有状态应用的常见解决方案:StatefulSet。
在构建机器学习向量管理层时,我们面临的一个重要问题:如何持久化数据以避免数据丢失?
在阅读了许多数据库企业发布的博客后,我们认为 StatefulSet[1] 是实现这个目标的可行方法。
我们研究了不同的数据库,包括 Cockroach、MySQL、MongoDB、Cassandra、PostgreSQL、Dgraph 和 Redis。我们还研究了 Kafka 和 Zookeeper,因为它们都需要持久化状态。我们选择这些数据库是基于两方面:
- 它们是业界广泛使用的数据库解决方案,并可以部署在 Kubernetes 上。其中一些是云原生数据库,如 Cockroach。
- 这些有状态应用是不同类型的,比如 MySQL 是关系型数据库,MongoDB 是非关系型数据库。研究不同类型的数据库让我们对使用 StatefulSet 方案更加自信。
下面列出了一些关于如何使用 StatefulSet 在 Kubernetes 中部署不同数据库或有状态应用程序的文章。
Cockroach
- 3 ways to master stateful apps in Kubernetes[2],
Kubernetes 有两种方法管理状态:DaemonSet 和 StatefulSet,但是 Cockroach 强烈建议使用 StatefulSet。
- How to Run CockroachDB on Kubernetes[3]Deploy a Local Cluster with Kubernetes[4]
MySQL
- Run