如何使用Golang从Kubernetes获取日志?

我正在寻找如何使用golangKubernetes集群中的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的日志。任何建议,将不胜感激!

回答:

这是我们最终使用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的吊舱中获取日志的想法或解决方案。

以上是 如何使用Golang从Kubernetes获取日志? 的全部内容, 来源链接: utcz.com/qa/430291.html

回到顶部