0

获取本地网络上其他kubernetes Pod的IP地址的最佳方式是什么?Kubernetes:获取网络上其他Pod的IP地址

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

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

有关更多详细信息,我在其容器引擎上使用了Google的kubernetes系统。运行标准的Ubuntu映像。


语境:要添加背景下,我想放在一起舱体之间共享的分布式缓存集群上。要做到这一点,他们都需要知道彼此的IP地址。如果为了memcached的目的,有更简单的方式来链接pods /实例,那也是有帮助的。

回答

1

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

如果您确实需要在连接到容器的集群中拥有固定的网络身份,则可以设置StatefulSet并将它们引用:app-0.my-svc.my-namespace.svc.cluster.local,app-1.my-svc.my-namespace.svc.cluster.local等。

你不应该需要以其他方式联系特定的pod ip,特别是因为它们可以在任何时间重新安排并且改变他们的IP。

对于你的使用情况而言,可能更容易只使用内存缓存掌舵的图表,它支持在StatefulSet集群:https://github.com/kubernetes/charts/tree/master/stable/memcached

+0

Memcache需要知道网络上参与Memcache池的所有服务器。不知道这会起作用。 – speedplane

+0

请看我的第二部分答案,当你需要使用StatefulSets知道网络中的所有身份。 – vascop

+0

从来没有听说过StatefulSets,看起来他们很新,Kubernetes是一个真正的移动目标! – speedplane

1

你试过

kubectl get pods -o wide 

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

+0

我试过这个命令,我不认为这是更好的(也许勉强)。另外,如果这些请求中有很多(例如,每个吊舱上的每个进程都会生成一个请求),则仍然会出现503错误。目前,我正在使用基于文件系统的缓存自定义IP 。看起来很奇怪,没有一种快速简单的方法来获取网络上的所有IP。 – speedplane

相关问题