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

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


当前回答

你可以使用标签

kubectl logs -l app=elasticsearch

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

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

其他回答

您也可以通过服务名称来完成此操作。

首先,尝试找到对应于相同服务的多个pod的各自pod的服务名称。库贝特尔得到svc。

接下来,运行以下命令显示每个容器的日志。

kubectl logs -f service/<service-name>

我使用这个简单的脚本从部署的pods中获取日志:

#!/usr/bin/env bash

DEPLOYMENT=$1

for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do 
    echo --------------------------- 
    echo $p 
    echo --------------------------- 
    kubectl logs $p
done

剧本要点

使用方法:log_deploy .sh "deploy -name"。

然后脚本将显示所有以“deployment-name”开头的pod的日志。

你可以使用标签

kubectl logs -l app=elasticsearch

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

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

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

kubectl logs -f deployment/app

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

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