将数据库作为Kubernetes部署或StatefulSet运行?

iezvtpos  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(131)

我想在我的Kubernetes集群中运行一个Mongo数据库单元。我将使用节点选择器在特定节点上调度单元。
由于Mongo是一个数据库,而我使用的是节点选择器,那么我有什么理由不使用Kubernetes Deployment over StatefulSet呢?如果我们不应该使用Deployment,请详细说明这一点。

vwkv1x7d

vwkv1x7d1#

由于mongo是一个数据库,而我使用的是节点选择器,那么我有什么理由不使用基于StatefulSet的k8s部署呢?如果我们不应该使用部署,请详细说明这一点。
您不应该以Deployment运行数据库(或其他有状态工作负载),而应该使用StatefulSet
在更新或pod变得不可访问时,它们具有不同的语义。StatefulSet使用at-most-X语义,Deployments使用at-least-X语义,其中X是副本的数量。
例如,如果节点变得不可访问(例如,网络问题),则对于部署,将在不同节点上创建新Pod(以遵循您所需的1个副本),但对于StatefulSet,它将确保在创建新Pod之前终止现有Pod,因此不会超过1个(当您将1作为所需的副本数量时)。
如果您运行一个数据库,我假设您希望数据保持一致,因此您不希望使用具有不同数据的重复示例-(但可能应该运行分布式数据库)。

相关问题