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

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


当前回答

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

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

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

kubectl logs -f service/<service-name>

其他回答

我使用这个命令。

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

如果豆荚的命名有意义,可以使用简单的Plain Old Bash:

keyword=nodejs
command="cat <("
for line in $(kubectl get pods | \
  grep $keyword | grep Running | awk '{print $1}'); do 
    command="$command (kubectl logs --tail=2 -f $line &) && "
  done
command="$command echo)"
eval $command

说明:循环运行名称包含“nodejs”的pod。并行跟踪每个pod的日志(单&号在后台运行),确保如果任何pod失败,整个命令都退出(双&号)。将来自每个tail命令的流合并到一个唯一的流中。Eval需要运行这个动态构建的命令。

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

kubectl logs deployment/app1

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

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

对我有用:

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