【问题标题】:When should I use StatefulSet?Can I deploy database in StatefulSet?什么时候应该使用 StatefulSet?我可以在 StatefulSet 中部署数据库吗?
【发布时间】:2021-09-10 09:30:25
【问题描述】:

听说statefulset适用于数据库。 但是 StatefulSet 会为 echo pod 创建不同的 pvc。 如果我设置 replicas=3.then 我得到 3 个 pod 和 3 个具有不同数据的不同 pvc。 对于数据库用户,他们只想要一个数据库而不是 3 个数据库。 所以很明显我们不应该在这种情况下使用 statefulset。 但是我们什么时候应该使用 statefulset。

【问题讨论】:

  • 您通常会有一个在有状态集中进行复制的数据库

标签: kubernetes kubectl azure-aks amazon-eks kubernetes-statefulset


【解决方案1】:

状态集对于运行存储状态的应用程序很有用。

有状态集数据库运行 POD 和 PVC 的多个副本,但在内部它们都自动同步。跨 pod 和 PVC 同步数据。

因此,理想情况下,最好使用具有多个副本的状态集来获取 HA 数据库

现在这取决于您要使用哪个数据库的用例,它支持复制或不集群等。

这里是带有复制详细信息的 MySQL 示例:https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/

【讨论】:

  • 谢谢,我去试试你分享的链接。?
  • @PengboWu 请确保共享链接不适用于生产用例,但它对 POC 有好处。
  • 谢谢,现在我正在学习这个概念。不用于生产
  • 如果发现 David 和我的回答有帮助和状态更新,请不要忘记投票。
  • 我是第一次尝试,但我需要至少15个声望才能投票,我是这里的新生,有资格我会投票
【解决方案2】:

StatefulSet 与 Deployment 做了三件大事:

  1. 它为每个副本创建一个新的 PersistentVolumeClaim;
  2. 它为 pod 提供顺序名称,以 statefulsetname-0 开头;和
  3. 它以特定顺序(按数字升序)启动 pod。

当数据库本身知道如何在自身的不同副本之间复制数据时,这很有用。例如,在 Elasticsearch 中,索引被分解为碎片。默认情况下,每个分片有两个副本。如果您有五个运行 Elasticsearch 的 Pod,每个 Pod 将具有不同的数据部分,但在内部,数据库系统知道如何将请求路由到具有相关数据的特定服务器。

我建议使用 StatefulSet 而不是手动创建 PersistentVolumeClaim。对于无法复制的数据库工作负载,无论哪种情况都不能将replicas: 设置为大于1,但PVC 管理很有价值。通常不能有多个数据库指向同一个物理存储、容器或其他位置,并且大多数类型的 Volume 不能在 Pod 之间共享。

【讨论】:

  • 谢谢,我知道了。所以主要原因是数据库本身知道如何在不同副本之间复制数据。我知道了。谢谢?
【解决方案3】:

我们可以将数据库作为有状态应用程序部署到 Kubernetes。通常,当我们部署 pod 时,它们有自己的存储空间,但该存储空间是短暂的——如果容器杀死了它的存储空间,它就会随之消失。

因此,我们将有一个 Kubernetes 对象来解决这种情况:当我们希望我们的数据持久化时,我们会附加一个具有相应持久性卷声明的 pod。通过这样做,如果我们的容器杀死了我们的数据,它将在集群中,并且新的 pod 将相应地访问数据。

使用 StatefulSet 的一些限制是:

1. 需要使用持久卷供应器来根据请求存储类为 pod 供应存储。

2.删除或缩小副本不会删除附加到StatefulSet的卷。保证数据的安全。

3.StatefulSets 目前需要 Headless Service 来负责 Pod 的网络身份。

4.StatefulSet 不提供在删除 StatefulSet 时删除所有 Pod 的保证,这与 Deployment 不同,它在删除 Deployment 时删除所有与 Deployment 关联的 Pod。在删除 StatefulSet 之前,您必须将 pod 副本缩减为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多