【问题标题】:How to list names of all pods serving traffic behind a service in kubernetes如何在 Kubernetes 中列出服务后面的流量的所有 Pod 的名称
【发布时间】:2020-02-14 15:12:11
【问题描述】:

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

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    有两种方法可以列出服务背后的 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}}'
    

    【讨论】:

      【解决方案2】:

      这个命令有效

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

      【讨论】:

      • 感谢您的回答。我注意到此查询没有列出在滚动部署期间与服务关联的正在运行的 pod
      【解决方案3】:

      这应该可以,“-o=name”用于仅显示 pod 名称。

      kubectl get pods -o=name --all-namespaces | grep {service-name}

      将 {service-name} 替换为您的服务名称

      【讨论】:

      • 我认为这行不通。 pod 名称的前缀是 deployment 名称,而不是 service 名称。在许多教程中,人们倾向于对deployment 和service(以及一大堆其他东西)使用相同的名称。这很方便,但很容易混淆概念。
      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多