go - 如何通过 corev1.PodLogOptions 从所有容器中获取日志?

标签 go kubernetes

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

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

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

a container name must be specified for pod xxx, choose one of: [aaa bbb] or one of the init containers: [aaa bbb]



我希望在 corev1.PodLogOptions 上找到一个合适的 field 。对象,但我只找到一个特定的 Container field 。

我正在寻找 --all-containers与 REST 客户端提供的等效。

$ kubectl logs mypod --all-containers

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

最佳答案

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

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

关于go - 如何通过 corev1.PodLogOptions 从所有容器中获取日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61777982/

相关文章:

go - 测量每个流的 gRPC 带宽

json - 如何解码为嵌入式结构?

go - 使用 jsonpb 解码自定义类型

cron - 如何获取由 cronjob 创建的作业日志?

kubernetes - 在kustomization.yaml中排除资源

database - 有数据库的 Authboss

go - 如何模拟 stripe 需要 webhooks 的捕获事件?

kubernetes - 有直接方法将文件上传到Google Cloud上的SSD永久磁盘吗?

garbage-collection - Kubernetes:图像垃圾收集失败:无法找到容器/的数据

kubernetes - Kubernetes更改滚动更新逻辑