运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
当前回答
在本例中,当Pod中定义了多个container时,可以替换<namespace>和<app-name>来获取日志。
kubectl -n <namespace> logs -f deployment/<app-name> \
--all-containers=true --since=10m
其他回答
你可以像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”似乎是最简单的一个
您也可以通过服务名称来完成此操作。
首先,尝试找到对应于相同服务的多个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的日志。
我们刚刚推出了一个Kubernetes本地日志工具,可以从所有的pod(你指定的)收集日志,并将日志发送到一个集中的位置。
我希望它能帮助任何人登陆这个页面:https://github.com/parseablehq/collector
这个回答试图提供一个简洁的例子和解释。为了获得一组pod中所有容器的所有输出,您必须使用标签(选择器),除非您计划执行一些额外的脚本。
kubectl logs \
--namespace my-namespace \
-l app=my-app-label \
--tail=-1 \
--timestamps=true \
--prefix=true \
--all-containers=true
这个示例返回label app=my-app-label定义的pod中所有容器的完整快照日志。
可选选项
添加——timestamps=true和——prefix=true标志可能会有帮助,这样时间戳和日志源在输出中就可见了,但这不是必需的。
按资源划分的日志
如果指定了诸如部署之类的资源,并且该部署具有 多个pod(如ReplicaSet),则只返回其中一个pod日志。这就是为什么要使用选择器来识别豆荚。
尽管指定了——all-containers,但在编写响应时,使用kubectl v1.22.5,针对服务或部署等资源并不能成功返回所有pod中所有容器的日志。这就是必须使用选择器的原因。
容器名称
根据kubectl日志的输出—帮助
打印pod或指定资源中容器的日志。 如果pod只有一个容器,则容器名是可选的。
这意味着如果有多个容器,您必须执行以下操作之一:
让命令为您选择一个容器 使用——all-containers=true选项
跟踪和拖尾
如果您像上面的例子那样指定一个标签,那么tail将被设置为10,只返回每个容器的最后10条日志。要获取所有日志,请将tail设置为-1。
在示例中添加-f或——follow以跟踪日志。如果不需要所有日志,可以更改——tail选项的值。在跟踪日志时,您可能希望确保默认选项——max-log-requests=5是足够的。如果增加了20个容器,则需要max-log-requests=20。