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

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


当前回答

不确定这是否是一个新事物,但随着部署,可以这样做:

kubectl logs deployment/app1

其他回答

我使用这个命令。

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

一种选择是通过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 -n my_namespace记录部署/my_deployment——all-containers=true——10m以来的日志 $(kubectl get pods -n "my_namespace" | sed 1d | cut -d" " -f1);Do kubectl logs $i -n "my_namespace" "app_name" | grep -i "filter_string you want to";完成

你可以像Adrian Ng建议的那样,使用标签从多个容器中获取日志:

kubectl logs --selector app=yourappname

但是如果你有一个包含多个容器的pod,上面的命令将会失败,你需要指定容器名称:

kubectl logs --selector app=yourappname --container yourcontainername

注意:如果你想查看哪些标签是可用的,下面的命令将列出所有标签:

kubectl get pod <one of your pods> -o template --template='{{.metadata.labels}}'

...输出会是这样的

映射[app:yourappname controller-revision-hash:598302898 pod-template-generation:1]

请注意,有些标签可能不会被其他pod共享——选择“app”似乎是最简单的一个