运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
当前回答
您可以根据需要选择以下两种方式:
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";完成
其他回答
我考虑的另一个解决方案是使用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来调查每个舱的日志。
@johan的回答让我想到了一句话:
for i in $(kubectl get pods -n default |cut -d" " -f1); do kubectl logs $i -n default; done
不确定这是否是一个新事物,但随着部署,可以这样做:
kubectl logs deployment/app1
一种选择是通过Fluentd/ElasticSearch设置集群日志记录,如https://kubernetes.io/docs/user-guide/logging/elasticsearch/所述。一旦日志在ES中,就很容易在Kibana中应用过滤器来查看特定容器中的日志。
你可以从kubectl logs -h中得到帮助,根据信息,
kubectl logs -f deployment/myapp -c myapp --tail 100
-c是容器名称,——tail将显示最新的num行,但这将选择部署的一个pod,而不是所有pod。这是你必须记住的。
kubectl logs -l app=myapp -c myapp --tail 100
如果想显示所有pod的日志,可以使用-l并指定一个标签,但同时不使用-f。