登录
首页 >  Golang >  Go问答

如何使用corev1.PodLogOptions从所有容器中检索日志?

来源:stackoverflow

时间:2024-03-25 22:00:32 500浏览 收藏

本文探讨了如何使用 Kubernetes 的 `corev1.PodLogOptions` 从所有容器中检索日志。由于该选项缺少容纳字段,因此本文建议使用与 `kubectl` 类似的策略,即获取 pod 中的所有容器并逐个收集日志。作者强调了检查 `kubectl` 源代码的重要性,以了解其行为并发现潜在的解决方案。

问题内容

我正在使用 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 字段。

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

$ kubectl logs mypod --all-containers

这可能吗?还有其他选择吗?


解决方案


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

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

你的问题非常专业,对我来说不容易在头脑中包含片段,但策略始终如下:如果你想模仿 kubectl 的行为,你显然应该首先检查 kubectl 的来源。您可以从here开始寻找您想要的图案,然后检查补充包,测试等,祝您旅途愉快。根据我的经验,kubectl 中的一些糖操作是可能的,不是因为它们由 REST API 原生支持,而是因为分派许多不同请求的迭代周期。

希望对你有帮助!

到这里,我们也就讲完了《如何使用corev1.PodLogOptions从所有容器中检索日志?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>