【问题标题】:How can kubernetes pods discover each other?Kubernetes Pod 是如何发现彼此的?
【发布时间】:2016-02-23 05:33:04
【问题描述】:

我正在尝试实现类似 etcd 服务的东西,它使用共识算法 (https://raft.github.io/)。在这种情况下,etcd 服务的多个实例需要相互了解。为此,如果我们在复制控制器中有 3 个 etcd 实例 pod,则这些 pod 需要能够相互通信(至少能够知道自己和所有其他 pod 的 IP)。

有没有办法在复制控制器或 pod 规范中实现这一点,而不必在 pod 容器中使用 kubernetes API?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以通过给每个 pod 一些标签(例如 etcd-service=true)来在这些 pod 前面放置一个服务,并使用与该标签匹配的选择器创建一个 kubernetes 服务。使用 DNS 插件,您将获得服务中每个端点的 DNS A 记录。您可以在文档here 中阅读更多内容。

    【讨论】:

    • 谢谢保罗。但是服务中的 pod 是如何相互了解的呢?将服务放在 pod 前面让我们在 pod 之间循环,但我们希望 pod 能够相互了解。我没有看到将 ETCD 服务中其他 pod 的 IP 传送到 pod 的方法
    • Gopinath,服务中的 pod 可以使用相同的发现方法——这是否满足您的需求?
    • 保罗,不是真的。您的意思是 Pod 应该使用 k8s API 来发现其复制控制器中的其他 Pod?例如,如果 etcd 复制控制器中有 3 个 etcd pod,那么 pod 1 如何知道 Pod 2 和 3 的 IP?有什么方法可以将 pod 2 和 3 的 IP 传递给 pod 1,而不必在 pod 内使用 k8s API? YAML 或 JSON 中是否有任何配置或规范魔法可以让我们做到这一点?
    • Gopinath,你不需要使用 kube API,只需要 DNS。
    • 保罗,你能详细说明一下吗?根据DNS addon documentation,名称仅分配给 kubernetes 服务。他们也有 Pod 的条目吗?如果是这样,那似乎与 DNS 文档所说的相矛盾。我在这里错过了什么?
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2018-02-09
    • 1970-01-01
    • 2019-01-29
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多