希望有一个命令来继续从特定pod流式传输日志。目前我必须做
kubectl get pods
(列出所有正在运行的pod(- 从列表中检查正在运行的pod,并复制pod名称
kubectl logs <pod name> -f
(来自pod的连续日志流(
奖励点数:列出以某个单词(如kubectl get pods asset*
(开头的pod。只显示名称以资产开头的吊舱
终于找到了解决方案。这会有点麻烦,但我基本上会使用--field-selector=status.phase=Running
,只使用-o=name
标志来获得名称。我的最后命令是类似
kubectl logs -f $(kubectl get pods --field-selector=status.phase=Running -o=name | awk '/asset/ {print $1;exit}')
链接:字段选择器
您可以使用awk来实现这一点。您可以使用:
kubectl logs -n <namespace> $(kubectl get pod -n <namespace> | awk '/<pattern>/{print $1}') -f
在这里,您可以在<pattern>
字段中指定regex。print $1
只打印匹配对象的第一列。在我们的例子中,它是pod名称。
例如:
kubectl logs -n kube-system $(kubectl get pod -n kube-system | awk '/kube-proxy*/{print $1}') -f
您可以通过kubectl get pods
获得所有结果,grep
可以完成其余的工作。
[root@k8s-m1 ~]# kubectl get pods | grep httpd*-app
httpd-app-66cb7d499b-4nfl4 1/1 Running 0 6m39s
httpd-app-66cb7d499b-c2blq 1/1 Running 0 6m39s
httpd-app-66cb7d499b-dt4tr 1/1 Running 0 6m39s
您可以使用一些bash技巧来获得:
示例:
获取以kube系统命名空间中的名称模式core开头的pod的日志。
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -o go-template --template '{{range .items}}{{.metadata.name}}{{"n"}}{{end}}' | grep core)
甚至简单:
kubectl logs --namespace=kube-system $(kubectl get pods -o=name --all-namespaces | grep core)
但在生产中,您应该使用fluentbit将日志流式传输到ELK,然后在kibana UI中使用过滤器来获取每个pod/部署/命名空间等的日志。
https://github.com/fluent/fluent-bit-kubernetes-logging
只需在一行以下运行";显示来自运行kubernetes pod的日志的单个命令";
kubectl get pods -n default|grep Running|awk '{print $1}'|while read pods;do echo "Pod name is $pods" ;kubectl logs $pods;echo;done
创建一个名为"kubectl尾部";
#!/bin/bash
[ -z "$1" ] && { echo "Try kubectl tail RESOURCE_NAME"; exit 1; }
# this wil find only one pod in my case
# you can modify it if you have more than one with the same name
pod=$(kubectl get pods --field-selector=status.phase=Running -o=name|awk -v res="$1" '$1 ~ res && !/debug$/')
[ -z "$pod" ] && { echo "No pod found!"; exit 0; }
kubectl logs -f "$pod"
将脚本放在PATH中,并使其可执行
检查
$ kubectl plugin list
The following compatible plugins are available:
/home/ufopilot/bin/kubectl-tail
现在你可以使用它
kubectl tail asset