通过kubernetes HTTP API从kubernetes流式传输pod的日志

时间:2020-03-02 23:03:51

标签: java kubernetes kubernetes-apiserver

所以我正在使用以下kubernetes HTTP API尝试流式传输我kubernetes集群中当前运行的pod的日志(我不想使用kubectl,因为我需要从应用程序代码中调用此API):

GET /api/v1/namespaces/{namespace}/pods/{name}/log

在这里记录 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#read-log

我正在API调用中传递“ follow = true”参数,因为我基本上想向kubernetes API发送请求,保持连接打开,并让kubernetes API不断地向我发送日志,一点一点。当我使用kubectl做同样的事情时,我使用了verbose选项,我发现它实际上所做的就是使用上述API(带有follow = true)发送一个请求,并且日志被流回。

当kubectl执行此操作时,它仅发送一个如上所述的请求,并且能够将其流回,并且未使用分块的传输编码或类似的内容...如何从应用程序级代码中模拟出来?当我尝试在我的应用程序代码中执行此操作时(我正在使用Java),它将等待请求完全完成,然后才能打印出日志。供参考的是我的代码:

    PodLogStreamer podLogStreamer = new PodLogStreamer();
    InputStream is = podLogStreamer
            .getLogStream("asdf", "asdfasd", "asdfas");

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));

    String line;
    while ((line = bufferedReader.readLine()) != null && !line.equals("ENDLOGS")) {
        System.out.println(line);
        Thread.sleep(100);
    }

    bufferedReader.close();

PodLogStreamer()是我制作的一个类,它以前面提到的方式仅调用了上面的API。是否有一种方法可以从客户端请求kubernetes API服务器应保持持久连接并流回日志?

0 个答案:

没有答案