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

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


当前回答

在前面答案的基础上,如果添加-f,可以跟踪日志。

kubectl logs -f deployment/app

其他回答

对我有用:

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

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

@johan的回答让我想到了一句话:

for i in $(kubectl get pods -n default |cut -d" " -f1); do kubectl logs $i -n default; done

我使用这个命令。

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

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