Kubernetes将客户端api用于特定pod的日志

sad*_*lil 10 kubernetes

我正在使用kube go客户端和kube api来访问kube数据.我目前没有找到任何api调用特定pod的日志.

kubectl logs pod-name
Run Code Online (Sandbox Code Playgroud)

返回特定pod的日志.如何使用go客户端执行此操作?我正在使用kubernetes的v1.0.6.

我可以通过使用获得pod

client.Pods("namespace").Get("pod-name")
Run Code Online (Sandbox Code Playgroud)

Ale*_*son 24

在了解如何使用客户端库时,查看kubectl如何实现其命令会很有帮助.在这种情况下,kubectl的logs命令实现如下所示:

req := client.RESTClient.Get().
    Namespace(namespace).
    Name(podID).
    Resource("pods").
    SubResource("log").
    Param("follow", strconv.FormatBool(logOptions.Follow)).
    Param("container", logOptions.Container).
    Param("previous", strconv.FormatBool(logOptions.Previous)).
    Param("timestamps", strconv.FormatBool(logOptions.Timestamps))

if logOptions.SinceSeconds != nil {
    req.Param("sinceSeconds", strconv.FormatInt(*logOptions.SinceSeconds, 10))
}
if logOptions.SinceTime != nil {
    req.Param("sinceTime", logOptions.SinceTime.Format(time.RFC3339))
}
if logOptions.LimitBytes != nil {
    req.Param("limitBytes", strconv.FormatInt(*logOptions.LimitBytes, 10))
}
if logOptions.TailLines != nil {
    req.Param("tailLines", strconv.FormatInt(*logOptions.TailLines, 10))
}
readCloser, err := req.Stream()
if err != nil {
    return err
}

defer readCloser.Close()
_, err = io.Copy(out, readCloser)
return err
Run Code Online (Sandbox Code Playgroud)

  • 考虑到 API 机会的最新答案可以在这里找到:/sf/answers/3770919001/ (2认同)