【问题标题】:Kubernetes volumes: when is Statefulset necessary?Kubernetes 卷:什么时候需要 Statefulset?
【发布时间】:2020-07-12 15:34:22
【问题描述】:

我正在接近 k8s 卷和最佳实践,我注意到在阅读文档时,如果您想在集群中实现持久性,您似乎总是需要使用 StatefulSet 资源:

"StatefulSet 是用于管理有状态的工作负载 API 对象 应用程序。”

我已经实现了一些教程,其中一些使用 StatefulSet,另一些则没有

事实上,假设我想持久化一些数据,我可以拥有我的无状态 Pod(甚至是 MySql 服务器 Pod!),其中我使用持久化状态的 PersistentVolumeClaim。如果我停止并重新运行集群,我可以从 Volume 恢复状态,而无需 StatefulSet。

我在这里附上一个 Github repo 的示例,其中有一个带有 MySql 的有状态应用程序,根本没有 StatefulSet: https://github.com/shri-kanth/kuberenetes-demo-manifests

那么我真的需要为 k8s 中的数据库使用 StatefulSet 资源吗?或者在某些特定情况下它可能是必要的做法?

【问题讨论】:

    标签: database kubernetes persistent-volumes kubernetes-statefulset persistent-volume-claims


    【解决方案1】:

    PVC 并不是使用 Statefulsets 而不是 Deployments 的唯一原因。 正如 Kubernetes manual 所说:

    StatefulSet 对于需要以下一项或多项的应用程序很有价值:

    • 稳定、唯一的网络标识符。
    • 稳定、持久的存储。
    • 有序、优雅的部署和扩展。
    • 有序的自动滚动更新。

    您可以在此处阅读更多关于部署在 Kubernetes 上的数据库注意事项To run or not to run a database on Kubernetes

    【讨论】:

      【解决方案2】:

      StatefulSet 不等于 PV+PVC。

      StatefulSet 管理基于相同容器规范的 Pod。与 Deployment 不同,StatefulSet 为其每个 Pod 维护一个粘性标识。这些 pod 是根据相同的规范创建的,但不可互换:每个 pod 都有一个持久标识符,它在任何重新调度时都会维护该标识符。

      换句话说,它管理一组 Pod 的部署和扩展,并保证这些 Pod 的顺序和唯一性。

      那么我真的需要为 k8s 中的数据库使用 StatefulSet 资源吗?

      这取决于你想要达到的目标。

      StatefulSet 为您提供:

      • 拥有稳定网络 ID 的可能性(因此您的 pod 将始终命名为 $(statefulset name)-$(ordinal)
      • 拥有稳定存储的可能性,因此当 Pod 被(重新)调度到节点上时,其 volumeMounts 会挂载与其 PersistentVolume 声明关联的 PersistentVolume。

      ...MySql 并且没有 StatefulSet...

      如您所见,如果您的目标只是运行将其所有数据(DB 本身)存储在 PV+PVC 上的单个 RDBMS Pod(例如 Mysql),那么 StatefulSet 绝对是矫枉过正。

      但是,如果您需要运行 Redis 集群(分布式数据库):-D 如果没有 StatefulSet(据我所知并基于 StackOverflow 上的大量线程),几乎不可能做到这一点) .

      希望这些信息对您有所帮助。

      【讨论】:

      • 即使对于 redis 集群,为什么需要 statefulset?我有主选举(如果节点出现故障)和从节点之间的负载平衡以供读取。这种方式似乎不需要稳定的内存/网络 ID...
      • 对不起,我打错了。我在考虑 Apache Zookeeper。
      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2018-12-10
      • 2010-12-29
      • 2017-07-13
      • 2012-08-21
      相关资源
      最近更新 更多