【问题标题】:Deploying stateful applications in Kubernetes在 Kubernetes 中部署有状态的应用程序
【发布时间】:2016-08-09 13:21:53
【问题描述】:

我正在熟悉 Kubernetes,但还没有找到在 Kubernetes 中部署有状态服务的简单解决方案。

  • 每个 pod 都必须使用接触点(其他 pod IP 列表)进行引导,这些接触点无法进行负载平衡(我担心运气不好时会出现裂脑:在最坏的情况下,负载平衡器可能会加载- 平衡每个 pod 自身,使一个节点的几个自封闭集群)
  • 每个 pod 都必须有持久存储,在最坏的情况下,必须手动访问(例如 consul 的 peers.json)
  • 每个 pod 都应该是可重新配置的;如果我忘记对我的领事集群做某事,从头开始重建它只会导致停机。如果 Kubernetes 阻止了这种情况,请随时告诉我,我对部署机制还不够熟悉。
  • 使用新配置的实例动态增加服务集群然后耗尽旧的实例可能是非常不受欢迎的(我不是 consul 专家,但从我的角度来看,这会降低 consul 集群中的脑裂保护)。

AFAIK 最适用的就是 Pet Set,不过它还处于 alpha 阶段,只能彻底删除;另外,我觉得我不明白应该如何管理持久卷以在 Pet Set 游戏中生存下来。我想出的另一个选择是将服务部署拆分为 bootstrap-node 部署、bootstrap-node 服务和 all-other-nodes 部署,这允许我使用 bootstrap-node 服务作为联系点(虽然这并不完全安全)。

这种情况下流行的方法是什么,它们有什么优缺点?

【问题讨论】:

  • 没有。 K8 还没有为此做好准备。 PetSets 是答案,但还有很长的路要走。
  • 我不确定 K8s 是否会为此做好准备。围绕 Kubernetes 的想法是一切都是短暂的。 PetSets 可能提供部分解决方案,但在这种情况下,使用 Kubernetes 并没有任何收获

标签: kubernetes


【解决方案1】:

如果您在 Kubernetes 集群中查看有状态集群中的一组 Pod,PetSets(我相信现在称为 StatefulSets)就是答案……或者您可以为每个 Pod 定义一个服务来实现一样。

为了让 Pod 了解其他 Pod 的 IP,您可以使用 Headless Services,它为您提供与标签关联的 IP 列表。

对于存储,如果您使用 emptyDir,则您拥有本地存储,但当 Pod 被移除/重新调度时,您会丢失它。

我在 Kubernetes 中使用 Zookeeper,设置起来有点麻烦,但是 Zookeeper 提供了一个“重新配置”API,允许在节点更改时重新配置集群,因此在启动时重新定义集群相当容易Pod 重新调度时的新节点。我不确定 Consul 是否具有相同类型的功能,但可能有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2018-07-15
    • 2023-04-06
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多