首页 > 解决方案 > 如何通过 corev1.PodLogOptions 从所有容器中获取日志?

问题描述

我正在使用kubernetes/client-go来检索一些 pod 日志。如果 pod 有一个容器,我可以检索日志

req := client.CoreV1().Pods("namespace").GetLogs("mypod", &corev1.PodLogOptions{})
logs, err := req.Stream()
[...]

这很好用,直到我遇到一个包含多个容器的 pod,我收到以下错误

必须为 pod xxx 指定容器名称,选择以下之一:[aaa bbb] 或 init 容器之一:[aaa bbb]

我希望在corev1.PodLogOptions对象上找到一个可容纳的字段,但我只找到一个特定的Container字段。

我正在寻找--all-containersREST 客户端提供的等价物。

$ kubectl logs mypod --all-containers

这可能吗?有什么选择吗?

标签: gokubernetes

解决方案


如果您查看kubectl代码,它们只会在一个 pod 中获取所有相关容器,然后遍历它们并逐个容器收集日志容器。所以我认为没有 REST API 端点可以为您做到这一点。

见这里:https ://github.com/kubernetes/kubectl/blob/19fd05792d8c806a5024d6bbbdd7d66d3234cbcb/pkg/polymorphichelpers/logsforobject.go#L86


推荐阅读