只需要一个命令就可以继续流式传输来自特定Pod的日志。目前我要做的
kubectl get pods
(列出所有正在运行的Pod)kubectl logs <pod name> -f
(来自pod的连续日志流)加分点:列出以诸如kubectl get pods asset*
之类的单词开头的豆荚。只会显示名称以资产开头的广告连播
答案 0 :(得分:1)
最终能够找出解决方案。这可能有点骇人听闻,但我基本上会使用--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}')
答案 1 :(得分:0)
您可以通过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
答案 2 :(得分:0)
您可以使用一些bash技巧来实现:
示例:
获取kube系统名称空间中以名称模式 core 开头的pod的日志。
(x, y)
甚至简单:
O(xy)
但是在生产中,您应该使用fluentbit将日志流式传输到ELK,然后在kibana UI中使用过滤器来获取每个pod /部署/命名空间等的日志。
答案 3 :(得分:0)
您可以使用awk来实现。您可以使用:
kubectl logs -n <namespace> $(kubectl get pod -n <namespace> | awk '/<pattern>/{print $1}') -f
在这里,您可以在<pattern>
字段中指定正则表达式。 print $1
仅打印匹配对象的第一列。在我们的例子中,它是pod名称。
例如:
kubectl logs -n kube-system $(kubectl get pod -n kube-system | awk '/kube-proxy*/{print $1}') -f