kubernetes 列出所有 运行 pods 名称

kubernetes list all running pods name

我正在寻找列出所有 pods 姓名的选项

没有 awk(或 cut)怎么办。现在我正在使用这个命令

kubectl get --no-headers=true pods -o name | awk -F "/" '{print }'

您可以使用 kubectl 内置的 go 模板选项将输出格式化为仅显示每个 pod 的名称:

kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'

您可以在输出选项中使用自定义列来获取名称和 --no-headers 选项

kubectl get --no-headers=true pods -l app=external-dns -o custom-columns=:metadata.name

jsonpath 替代

kubectl get po -o jsonpath="{range .items[*]}{@.metadata.name}{end}" -l app=nginx-ingress,component=controller

另请参阅: more examples of kubectl output options

您可以使用 -o=name 只显示 pod 名称。例如,要列出代理 pods,您可以使用:

kubectl get pods -o=name --all-namespaces | grep kube-proxy

结果是:

pod/kube-proxy-95rlj
pod/kube-proxy-bm77b
pod/kube-proxy-clc25

使用 -o=name 获取 pods 的名称 请参阅此 cheatsheet 了解更多信息。

kubectl get pods -o=name

示例输出:

pod/kube-xyz-53kg5
pod/kube-xyz-jh7d2
pod/kube-xyz-subt9

要删除尾随 pod/,您可以使用标准 bash sed 命令

kubectl get pods -o=name | sed "s/^.\{4\}//"

示例输出:

kube-xyz-53kg5
kube-pqr-jh7d2
kube-abc-s2bt9

要获取带有特定字符串的 podname,标准 linux grep 命令

kubectl get pods -o=name | grep kube-pqr | sed "s/^.\{4\}//"

示例输出:

kube-pqr-jh7d2

有了这个名字,你可以做一些事情,比如添加别名以获取 shell 到 运行 容器:

alias bashkubepqr='kubectl exec -it $(kubectl get pods -o=name | grep kube-pqr | sed "s/^.\{4\}//") bash'

我个人更喜欢这种方法,因为它只依赖于 kubectl,不是很冗长,而且我们不会在输出中得到 pod/ 前缀:

kubectl get pods --no-headers -o custom-columns=":metadata.name"

kubectl get po --all-命名空间 | awk '{if ($4 != "Running") system ("kubectl -n " $1 " delete pods " $2 " --grace-period=0 " " --force ")}'

获取命名空间中的所有运行pods

kubectl get pods --field-selector=status.phase=Running --no-headers -o custom-columns=":metadata.name" 

来自 viewing, finding resources.

您还可以使用 -n <命名空间名称>.

指定命名空间

还有这个解决办法:

kubectl get pods -o jsonpath={..metadata.name}

如果您想提取特定 containerpod 名称,那么 一个简单的命令可以完成所有艰巨的工作

kubectl get pods --template '{{range .items}}{{.metadata.name}}{{end}}' --selector=app=<CONTAINER-NAME>

只需将 <CONTAINER-NAME> 替换为您的服务容器名称

这是另一种方法:

kubectl get pods -o=name --field-selector=status.phase=Running

--field-selector=status.phase=Running 是必需的,因为问题提到了所有 运行 pod 名称。如果问题中的 all 是针对所有命名空间的,只需添加 --all-namespaces 选项即可。

请注意,此命令非常方便,可以快速访问 运行 个 pod 上的内容,例如日志:

kubectl logs -f $(kubectl get pods -o=name --field-selector=status.phase=Running)

好吧,在我们的例子中,我们将 pods 保留在不同的命名空间中,这里是为了识别 pods 的特定 pod 或列表,我们 运行 按照命令-

方法一:

  1. 获取命名空间列表 kubectl get ns -A

  2. 获取一个命名空间内的所有 pods kubectl get pods -n <namespace>

方法二:

使用这个命令-

kubectl get pods --all-namespaces