Kubernetes:获取网络上其他Pod的IP地址

时间:2017-06-23 06:48:38

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

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

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

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

有关更多详情,我在他们的容器引擎上使用Google的kubernetes系统。运行标准的Ubuntu映像。

上下文:要添加上下文,我正在尝试将群集中的pod之间的共享memcached放在一起。要做到这一点,他们都需要知道彼此的IP地址。如果有一种更简单的方法来链接pods /实例以达到memcached的目的,那也会有所帮助。

2 个答案:

答案 0 :(得分:7)

你试过吗

public class Library<T> {

    private final LibraryAccess<T> library;

    public Library(T... items) {
        // create library from external jars by your own ClassLoader & reflect api
        library = LibraryAccess.newInstance(items);
    }

    public boolean exists(Predicate<? super T> condition) {
        return library.exists(condition::test);
    }

    public boolean exists(Function<? super T, Boolean> condition) {
        return library.exists(condition);
    }
}

这也会返回窗格的IP地址。由于这不会返回所有信息kubectl get pods -o wide 返回,这可能会更快。

答案 1 :(得分:2)

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

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

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

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