显示运行kubernetes吊舱日志的单个命令

显示运行kubernetes吊舱日志的单个命令,kubernetes,kubectl,Kubernetes,Kubectl,希望使用一个命令继续从特定pod传输日志。现在我要做什么 kubectl获取吊舱(列出所有跑步吊舱) 从列表中检查正在运行的pod,并复制pod名称 kubectl日志-f(从pod连续传输日志) 奖励点:列出以特定单词开头的pod,例如,kubectl get pods asset*。这将只显示名称以asset开头的pod您可以通过kubectl get pods获得所有结果,grep可以完成其余的工作 [root@k8s-m1 ~]# kubectl get pods | grep ht

希望使用一个命令继续从特定pod传输日志。现在我要做什么

  • kubectl获取吊舱
    (列出所有跑步吊舱)
  • 从列表中检查正在运行的pod,并复制pod名称
  • kubectl日志-f
    (从pod连续传输日志)

奖励点:列出以特定单词开头的pod,例如,
kubectl get pods asset*
。这将只显示名称以asset开头的pod

您可以通过
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系统名称空间中以名称模式核心开头的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/部署/命名空间等的日志


终于找到了解决办法。这可能有点麻烦,但我基本上会使用
--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}')
链接:

您可以使用来实现此目的。您可以使用:

kubectl logs -n <namespace> $(kubectl get pod -n <namespace> |  awk '/<pattern>/{print $1}') -f

此特定命令不会区分具有不同状态的POD。我只想要有运行状态的吊舱。
kubectl logs -n kube-system $(kubectl get pod -n kube-system |  awk '/kube-proxy*/{print $1}') -f