如何通过 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

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


元芳怎么了
浏览 257回答 2
2回答

倚天杖

如果您查看kubectl代码,它们只会在一个 pod 中获取所有相关容器,然后遍历它们并逐个容器收集日志容器。所以我认为没有 REST API 端点可以为您做到这一点。见这里:https ://github.com/kubernetes/kubectl/blob/19fd05792d8c806a5024d6bbbdd7d66d3234cbcb/pkg/polymorphichelpers/logsforobject.go#L86

MM们

您的问题非常专业,对我来说不容易在脑海中留下片段,但策略始终如下:如果您想模仿 kubectl 的行为,您显然应该首先检查 kubectl 的来源。您可以从这里开始寻找您想要的模式,然后您必须检查补充包、测试等。旅途愉快。以我的经验,kubectl 中的一些糖操作是可能的,不是因为它们被 REST API 原生支持,而是因为迭代周期与许多不同的请求的分派。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go