【发布时间】:2020-02-14 15:12:11
【问题描述】:
我想列出所有实际在 Kubernetes 服务后面提供流量的 Pod 的名称。我的问题是如何通过执行单个 kubectl 命令来实现这一点。
【问题讨论】:
标签: kubernetes
我想列出所有实际在 Kubernetes 服务后面提供流量的 Pod 的名称。我的问题是如何通过执行单个 kubectl 命令来实现这一点。
【问题讨论】:
标签: kubernetes
有两种方法可以列出服务背后的 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}}'
【讨论】:
这个命令有效
kubectl get ep servicename -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl get pods -o=name --field-selector=status.podIP=%
【讨论】:
这应该可以,“-o=name”用于仅显示 pod 名称。
kubectl get pods -o=name --all-namespaces | grep {service-name}
将 {service-name} 替换为您的服务名称
【讨论】:
deployment 名称,而不是 service 名称。在许多教程中,人们倾向于对deployment 和service(以及一大堆其他东西)使用相同的名称。这很方便,但很容易混淆概念。