所以我正在使用以下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服务器应保持持久连接并流回日志?