【问题标题】:Kubernetes : How to detect total replicas from within a Java micro serviceKubernetes:如何从 Java 微服务中检测总副本
【发布时间】:2021-07-07 20:50:12
【问题描述】:

我要解决的问题:让 Java 微服务了解副本的总数。这个副本计数本质上是动态的

问题: Kubernetes 向下 API 的元数据有限,不包含此信息。有没有办法从容器中本地查询类似 kubectl 的命令?

我为什么要这样做:对于 Kafka,新副本会导致重新平衡。希望通过额外的业务逻辑来减轻新容器上线/下线时的重新平衡。

目标:创建一个仲裁器 java-service,检测部署的副本计数 xyz 并编排相应的 pod 以在 Kafka 连接上屈服,直到满足条件

如果这很疯狂,我也不会生气。在那种情况下,我要找一个朋友

【问题讨论】:

  • 你通过this thread了吗?尤其是静态成员资格可能适合您的用例。

标签: java kubernetes microservices


【解决方案1】:

Kubernetes 向下 API 的元数据有限,不包含此信息。有没有办法从容器中本地查询类似 kubectl 的命令?

您需要查询 Kubernetes API 服务器以获取有关特定部署的副本数量的信息。您可以使用kubernetes-client java 来执行此操作。

我为什么要这样做:对于 Kafka,新副本会导致重新平衡。希望通过额外的业务逻辑来减轻新容器上线/下线时的重新平衡。

听起来你想要始终一致数量的 Pod,例如避免滚动部署?在您的 Deployment 中,您可以将 strategy: 设置为 type: Recreate - 然后会先删除当前 Pod,然后再创建新 Pod - 所以最多同时运行 1 个(或与副本相同的数量) .

有状态集

当您想要最多 X 个副本时,您应该考虑使用 StatefulSet,因为它的行为不同于 Deployment,例如一个节点变得无法访问。 Deployment 具有至少 X 个副本的行为。

【讨论】:

  • 策略类型“重新创建”似乎仅在版本更改时才采取行动。当服务失败/死亡时,部署的 pod 将被一个接一个地重新创建,从而导致 Kafka 重新平衡。我希望所有 pod 同时下线,从 Kafka 的角度来看,这将是一个理想的解决方案
  • 如果您使用 StatefulSet 而不是 Deployment,即使 pod/node 失败或死亡,您也会得到这种行为。
  • 有两种有效的更新策略,RollingUpdate 和 OnDelete。来自kubernetes.io/docs/tutorials/stateful-application/…
  • StatefulSet 在节点变得不可访问时具有不同的行为,例如如果副本数:2,则表示最多 2 个副本,但对于部署,则表示至少 2 个副本。参见例如medium.com/tailwinds-navigator/…
猜你喜欢
  • 1970-01-01
  • 2019-06-14
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 2020-06-18
  • 2018-10-25
  • 2019-03-23
相关资源
最近更新 更多