如何在kubernetes中列出服务背后所有提供流量的pod名称

bakd9h0s  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(4)|浏览(137)

我想列出所有在kubernetes服务后面实际提供流量的pod的名称。我的问题是如何通过执行单个kubectl命令来实现这一点。

ej83mcc0

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名称

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

在单个命令中,但使用服务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}}'
0vvn1miw

0vvn1miw2#

这个命令奏效了

kubectl get ep servicename -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl get pods -o=name --field-selector=status.podIP=%
4ktjp1zp

4ktjp1zp3#

这应该可以工作,“-o=name”只显示pod名称。
kubectl get pods -o=name --all-namespaces | grep {service-name}
将{service-name}替换为您的服务名称

kninwzqo

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。

$ 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

相关问题