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

标签 go kubernetes

我正在寻找如何使用 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/

相关文章:

go - 如何检查操作系统上是否安装了程序/软件包?

go - Go 中有 uint64 字面量吗?

amazon-web-services - 如何使用AWS EKS中的静态DNS向我的vpc中的所有用户公开kubernetes仪表板?

go - 如何比较嵌套结构,在子 slice 字段中具有相同字段但顺序不同

go - 吐出代码格式错误,而不是实际在golang中格式化

Go Protobuf 精度小数

docker - 在Kubernetes(+ Rancher)中评估Docker的安全性

kubernetes - 在 Minikube 上部署 GitLab

Kubernetes Kubeadm 单节点,仪表板 "malformed http response"

kubernetes - 如何跟踪远程二进制文件?