如何在 kubernetes 中正确给出 POD 名称的模式?

How to correctly give patterns for POD name in kubernetes?

我正在使用 kubernetes 部署应用程序,

kubect logs

用于日志查看。 重新部署非常频繁,所以有点不舒服 - 每次都复制 pod 名称以粘贴到日志命令中(因为 pod 名称的末尾每次都动态变化),例如以下是相同应用程序的命令,经过 2 次部署

kubectl logs -n=testns --since=1m testapp-2818008534-jx2vv
kubectl logs -n=testns --since=1m testapp-2818008534-xls93

所以,我想使用一个命令,每次我们 运行 "kubectl logs".

时,它都会正确 "pick up" 需要的 POD 名称

不过好像

$kubectl logs -n=testns --since=1h $(kubectl get pods --namespace=testns | grep testapp)

returns 一个错误,我们不是 "giving" pod 名称,但那个 pod 确实存在:

error: expected 'logs (POD | TYPE/NAME) [CONTAINER_NAME]'.
POD or TYPE/NAME is a required argument for the logs command

那么,如何正确设置这个命令,每次我们想查看日志时都使用它,而不需要重新复制粘贴完整的 POD 名称?

当你这样做时:

kubectl get pods --namespace=testns | grep testapp

你会得到类似的东西:

testapp-54d99599bc-g2gs4 1/1 Running 0 56m

所以这不能很好地与 logs 命令一起使用,因为它有一些 Kubectl 无法理解的额外数据。您可以做的是:

kubectl get pods --namespace=testns | grep testapp | cut -d' ' -f1

这将只生成 POD 的名称,然后您的日志命令应该会起作用。

接受的答案在大多数情况下应该有效,但为了以防万一尝试这个替代方案:

kubectl get po | grep testapp | tr -s ' ' | cut -d\  -f 1

您可以使用选择器(label 查询)来过滤 pods :

kube logs -lapp.kubernetes.io/name=testapp --all-containers=true

使用 kubectl v1.15.0