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

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


当前回答

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

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

其他回答

一种选择是通过Fluentd/ElasticSearch设置集群日志记录,如https://kubernetes.io/docs/user-guide/logging/elasticsearch/所述。一旦日志在ES中,就很容易在Kibana中应用过滤器来查看特定容器中的日志。

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

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

对我有用:

Kubectl logs -n namespace -l app=label -c container

以前提供的解决方案并不是最优的。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

我考虑的另一个解决方案是使用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来调查每个舱的日志。