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

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


当前回答

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

其他回答

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

kubectl logs deployment/app1

我使用这个简单的脚本从部署的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的日志。

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

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

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

kubectl logs -f service/<service-name>

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

你可以使用标签

kubectl logs -l app=elasticsearch

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

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