运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。

我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?


当前回答

在本例中,当Pod中定义了多个container时,可以替换<namespace>和<app-name>来获取日志。

kubectl -n <namespace> logs -f deployment/<app-name> \
    --all-containers=true --since=10m

其他回答

我考虑的另一个解决方案是使用K9S,这是一个很棒的kube管理工具。

安装后使用非常简单明了:

 k9s -n my-namespace --context the_context_name_in_kubeconfig

(如果kubeconfig不在默认位置,则添加kubeconfig =path/to/kubeconfig prefix)。

默认视图将列出所有pod列表:

我们可以通过输入冒号将视图更改为其他Kube控制器,如副本集(关于复制控制器的问题,请注意它们已弃用),部署,cron作业等,然后开始输入所需的控制器-正如我们可以看到K9S为我们提供了自动补全功能:

我们可以看到当前命名空间中的所有副本集:

我们可以通过单击enter选择所需的副本集,然后我们将看到与此副本集相关的所有pod的列表-然后我们可以按'l'查看每个pod的日志。

所以,不像在stern的情况下,我们仍然需要进入每个舱,并查看其日志,但我认为这是非常方便的K9S -我们首先查看相关控制器的所有舱,然后通过简单地导航进入,l和escape来调查每个舱的日志。

你可以使用标签

kubectl logs -l app=elasticsearch

你可能想要指定——all-containers——ignore-errors,以便:

包括来自多个容器的吊舱的日志 在致命错误(例如,无法检索日志)时继续到下一个pod

以前提供的解决方案并不是最优的。kubernetes团队自己在一段时间前提供了一个解决方案,称为stern。

stern app1

它还匹配正则表达式,默认情况下执行tail和-f (follow)。一个很好的好处是,它显示了生成日志的pod。

app1-12381266dad-3233c foobar log
app1-99348234asd-959cc foobar log2

抓取go-binary for linux或通过brew for OSX安装。

https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/

https://github.com/wercker/stern

我们刚刚推出了一个Kubernetes本地日志工具,可以从所有的pod(你指定的)收集日志,并将日志发送到一个集中的位置。

我希望它能帮助任何人登陆这个页面:https://github.com/parseablehq/collector

我使用这个命令。

kubectl -n <namespace> logs -f deployment/<app-name> --all-containers=true --since=10m