【问题标题】:Kubernetes: Getting the IP Addresses of Other Pods on the NetworkKubernetes:获取网络上其他 Pod 的 IP 地址
【发布时间】:2017-06-23 06:48:38
【问题描述】:

获取本地网络上其他 kubernetes pod 的 IP 地址的最佳方法是什么?

目前,我正在使用以下命令并解析输出:kubectl describe pods

不幸的是,上面的命令通常需要很多秒才能完成(至少 3 秒,通常是 30 多秒),如果多个请求几乎同时发生,我会收到 503 样式错误。我已经围绕这个命令构建了一个缓存系统来缓存本地 pod 上的 IP 地址,但是当 10 个左右的 pod 唤醒并需要创建这个缓存​​时,会有很大的延迟并且经常会出现很多错误。我觉得我做错了什么。获取网络上其他 pod 的 IP 地址似乎应该是一个简单的过程。那么获得它们的最佳方法是什么?

更多细节,我在他们的容器引擎上使用谷歌的 kubernetes 系统。运行标准的 Ubuntu 映像。


上下文:为了添加上下文,我试图在集群上的 Pod 之间建立一个共享的 memcached。为此,他们都需要知道彼此的 IP 地址。如果有更简单的方法来链接 pod/实例以实现 memcached,那也会很有帮助。

【问题讨论】:

    标签: docker kubernetes google-cloud-platform memcached google-kubernetes-engine


    【解决方案1】:

    你试过了吗

    kubectl get pods -o wide
    

    这也会返回 Pod 的 IP 地址。由于这不会返回describe 返回的所有信息,因此可能会更快。

    【讨论】:

    • 我尝试了这个命令,但我认为它并没有好多少(也许只是勉强)。此外,如果有很多这样的请求(例如,每个 pod 上的每个进程都发出一个),您仍然会收到 503 错误。目前,我正在使用基于 ip 文件系统的自定义缓存。似乎很奇怪,没有一种快速简便的方法可以获取网络上的所有 IP。
    【解决方案2】:

    对于您描述的用例,您应该使用服务。无头服务将允许您使用my-svc.my-namespace.svc.cluster.local 引用它们。这假设您不需要知道单个节点,只需要知道如何到达其中一个,因为它将在它们之间循环。

    如果您确实需要将集群中的固定网络身份附加到 pod,您可以设置 StatefulSet 并使用以下方式引用它们:app-0.my-svc.my-namespace.svc.cluster.localapp-1.my-svc.my-namespace.svc.cluster.local 等等。

    您永远不需要以其他方式联系特定的 pod ip,特别是因为它们可以随时重新安排并更改其 IP。

    具体而言,对于您的用例,仅使用 memcache helm chart 可能更容易,它支持 StatefulSet 中的集群:https://github.com/kubernetes/charts/tree/master/stable/memcached

    【讨论】:

    • Memcache 需要了解网络上参与 Memcache 池的所有服务器。不确定这是否可行。
    • 当您确实需要使用 StatefulSets 了解网络中的所有身份时,请参阅我的第二部分答案。
    • 从未听说过 StatefulSets,而且看起来很新,Kubernetes 是一个真正的移动目标!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多