gpt4 book ai didi

go - 如何使用 Go 从 kubernetes 获取日志?

转载 作者:IT王子 更新时间:2023-10-29 01:34:29 30 4
gpt4 key购买 nike

我正在寻找如何使用 Go 从 Kubernetes 集群中的 pod 获取日志的解决方案。我看过“https://github.com/kubernetes/client-go”和“https://godoc.org/sigs.k8s.io/controller-runtime/pkg/client”,但无法理解如何为此目的使用它们。除了日志之外,我在 K8S 中获取 pod 或任何其他对象的信息没有问题。

例如,我使用“https://godoc.org/sigs.k8s.io/controller-runtime/pkg/client#example-Client--Get”中的 Get() 来获取 K8S 作业信息:

found := &batchv1.Job{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: job.Name, Namespace: job.Namespace}, found)

请分享一下您现在如何获取 Pod 的日志。如有任何建议,我们将不胜感激!

更新:Kubernetes go client api for log of a particular pod中提供的解决方案已过期。它有一些提示,但不是最新的当前库。

最佳答案

这是我们最终使用 client-go 库得出的结果:

func getPodLogs(pod corev1.Pod) string {
podLogOpts := corev1.PodLogOptions{}
config, err := rest.InClusterConfig()
if err != nil {
return "error in getting config"
}
// creates the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
return "error in getting access to K8S"
}
req := clientset.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &podLogOpts)
podLogs, err := req.Stream()
if err != nil {
return "error in opening stream"
}
defer podLogs.Close()

buf := new(bytes.Buffer)
_, err = io.Copy(buf, podLogs)
if err != nil {
return "error in copy information from podLogs to buf"
}
str := buf.String()

return str
}

希望对大家有所帮助。请分享您对如何从 Kubernetes 中的 pod 获取日志的想法或解决方案。

关于go - 如何使用 Go 从 kubernetes 获取日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53852530/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com