kubernetes列出所有跑步吊舱的名称

kubernetes列出所有跑步吊舱的名称,kubernetes,Kubernetes,我正在寻找列出所有吊舱名称的选项 如何避免awk(或切割)。现在我使用这个命令 kubectl get --no-headers=true pods -o name | awk -F "/" '{print $2}' 您可以使用kubectl内置的go模板选项格式化输出,只显示每个pod的名称: kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' 您可以使用输出选项中的自定义列来获取名

我正在寻找列出所有吊舱名称的选项

如何避免awk(或切割)。现在我使用这个命令

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

您可以使用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
另见:

您可以使用仅显示吊舱名称。例如,要列出可以使用的代理播客,请执行以下操作:

kubectl get pods -o=name --all-namespaces | grep kube-proxy
结果是:

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

使用
-o=name
获取POD的名称有关详细信息,请参阅此

kubectl get pods-o=name

示例输出:

pod/kube-xyz-53kg5
pod/kube-xyz-jh7d2
pod/kube-xyz-subt9
kube-xyz-53kg5
kube-pqr-jh7d2
kube-abc-s2bt9
要删除尾随的
pod/
可以使用标准bash
sed
命令

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

示例输出:

pod/kube-xyz-53kg5
pod/kube-xyz-jh7d2
pod/kube-xyz-subt9
kube-xyz-53kg5
kube-pqr-jh7d2
kube-abc-s2bt9
要使用特定字符串获取podname,请使用标准的linux
grep
命令

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

示例输出:

pod/kube-xyz-53kg5
pod/kube-xyz-jh7d2
pod/kube-xyz-subt9
kube-xyz-53kg5
kube-pqr-jh7d2
kube-abc-s2bt9
kube-pqr-jh7d2

使用此名称,您可以执行以下操作,例如添加别名以使shell进入正在运行的容器:


别名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 namespaces | awk'{if($4!=“Running”)system(“kubectl-n“$1”删除pod“$2”--宽限期=0”“--force”)}

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

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


您还可以使用-n

指定名称空间。还有以下解决方案:

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

如果要提取特定的
容器
pod
名称,则 一个简单的命令就可以完成所有繁重的工作

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

只需将
替换为您的服务容器名称

谢谢,找不到任何关于go模板的参考。描述不同的输出类型,并给出使用该模板的示例。模板语言本身在中描述,您可以运行
kubectl descripe-o yaml pod
查看可用于操作的字段。第一个模板声明中的空白太多:{range.items}它使用和不使用空白欢迎使用。如果你解释为什么喜欢这种方法,你的答案会对更多的用户更有用。事实上,我已经添加了一些关于为什么我喜欢这种方法的解释。这种方法比通常的模板解决方案好得多。实际上,我更喜欢这种方法,您可以这样做:
kubectl获取pods-o name
然后像这样使用输出:
kubectl descripe pod/mypod-xxxxx
使用awk而不是sed将使它可以处理任何事情(您忽略了前4个字符,但是除了pods之外的另一个资源,名称更长或更短的资源呢?)。对于awk:
kubectl get pods-o=name | awk-F“{print$2}”
,正如@Brou指出的那样,
resource/name
是kubectl到特定对象的有效格式,因此您不需要修剪
pod/
前缀。这做得更多(甚至是破坏性的)OP说他只是想去掉前面的“pod/”部分…实际上你的命令相当好(与下面建议的解决方案相比)。您可以将
awk
替换为grep-Po'\/\K.+'to,也可以删除
--no headers=true
我发现
cut-d/-f2
awk
grep
自定义列更易于键入。