我想列出所有在kubernetes服务后面实际提供流量的pod的名称。我的问题是如何通过执行单个kubectl命令来实现这一点。
ej83mcc01#
有两种方法可以列出服务后面的Pod。
简单的方法,但有两个命令
通过运行下面的命令找到选择器
kubectl get services -o=wide
输出量:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR hello-world-service ClusterIP 172.21.xxx.xx <none> 80/TCP 13m run=nginx
将选择器传递给下面的命令
kubectl get pods --selector=run=nginx -o=name
查看不带pod/的确切pod名称
pod/
kubectl get pods --selector=run=nginx --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
在单个命令中,但使用服务hello-world-service的端点信息
hello-world-service
kubectl get endpoints hello-world-service -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
0vvn1miw2#
这个命令奏效了
kubectl get ep servicename -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl get pods -o=name --field-selector=status.podIP=%
4ktjp1zp3#
这应该可以工作,“-o=name”只显示pod名称。kubectl get pods -o=name --all-namespaces | grep {service-name}将{service-name}替换为您的服务名称
kubectl get pods -o=name --all-namespaces | grep {service-name}
kninwzqo4#
列出服务。
$ kubectl get services -o=wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d <none> nginx-24 ClusterIP 10.111.9.176 <none> 808/TCP 15m app=nginx-24
注意SELECTORapp=nginx-24。列出Pod。
SELECTOR
app=nginx-24
$ kubectl get pods --selector=app=nginx-24 NAME READY STATUS RESTARTS AGE nginx-24-6dc9d8c7df-cp7rh 1/1 Running 0 97m nginx-24-6dc9d8c7df-tzrwf 1/1 Running 0 97m nginx-24-6dc9d8c7df-xnvgq 1/1 Running 0 97m
4条答案
按热度按时间ej83mcc01#
有两种方法可以列出服务后面的Pod。
简单的方法,但有两个命令
通过运行下面的命令找到选择器
输出量:
将选择器传递给下面的命令
查看不带
pod/
的确切pod名称在单个命令中,但使用服务
hello-world-service
的端点信息0vvn1miw2#
这个命令奏效了
4ktjp1zp3#
这应该可以工作,“-o=name”只显示pod名称。
kubectl get pods -o=name --all-namespaces | grep {service-name}
将{service-name}替换为您的服务名称
kninwzqo4#
列出服务。
注意
SELECTOR
app=nginx-24
。列出Pod。