【问题标题】:kubectl command to find a particular pod status as readykubectl 命令查找特定 pod 状态为就绪
【发布时间】:2021-04-19 08:23:23
【问题描述】:

我想点击一个命令,用服务名称搜索 pod 并将其 pod 的状态标识为“就绪”

我尝试了一些命令,但它不起作用,并且没有使用服务名称进行搜索。

kubectl get svc | grep my-service | --output="jsonpath={.status.containerStatuses[*].ready}" | cut -d' ' -f2

我也尝试使用循环,但脚本没有提供所需的输出。

你能帮我弄清楚确切的命令吗?

【问题讨论】:

    标签: kubernetes containers kubernetes-helm kubectl kubernetes-pod


    【解决方案1】:

    如果我理解正确,您想查找特定的Pod 是否连接到特定的Endpoint - 是否处于"Ready" 状态。

    使用JSON PATH,您可以在特定的namespace 中显示所有Pods 及其状态:

    $ kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'
    

    如果您正在寻找连接到特定EndpointPods 的状态,您可以使用以下脚本:

    #!/bin/bash
    
    endpointName="web-1"
    
    for podName in $(kubectl get endpoints  $endpointName -o=jsonpath={.subsets[*].addresses[*].targetRef.name}); do
        if [ ! -z $podName ]; then
            kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}' | grep $podName
        fi
    done
    
    for podName in $(kubectl get endpoints  $endpointName -o=jsonpath={.subsets[*].notReadyAddresses[*].targetRef.name}); do
        if [ ! -z $podName ]; then
            kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}' | grep $podName
        fi
    done
    

    请注意,您需要根据需要更改Endpoint 名称,在上面的示例中我使用web-1 名称。

    如果此回复没有回答您的问题,请说明您的确切目的。

    【讨论】:

      【解决方案2】:

      每个服务都会创建一个端点,其中包含 podIp 和其他服务信息。您可以使用 endpoints 来获取 pod。 .它会为您的my-service 显示准备好的 pod。

      使用这个命令:

      kubectl get endpoints -n <Name_space> <service_name> -o json | jq -r 'select(.subsets != null) | select(.subsets[].addresses != null) | .subsets[].addresses[].targetRef.name'
      

      对你来说,命令将是:

      kubectl get endpoints my-service -o json | jq -r 'select(.subsets != null) | select(.subsets[].addresses != null) | .subsets[].addresses[].targetRef.name'
      

      您可以运行脚本来获取 pod 状态

      #!/usr/bin/env bash
      for podname in $(kubectl get endpoints my-service -o json | jq -r 'select(.subsets != null) | .subsets[].addresses[].targetRef.name')
      do
      kubectl get pods -n demo  $podname  -o json | jq -r ' select(.status.conditions[].type == "Ready") | .status.conditions[].type ' | grep -x Ready
      
      done
      

      【讨论】:

      • @sagarverma 我已经更新了。现在可以试试吗?
      • 确定..现在就试试
      • 是的。我理解,当 pod 未准备好并返回 pod 名称时会出错但是有没有办法我们也可以获取 pod 的 READY 参数的状态。因为我需要检查 pod 的状态。
      • kc get pods -o json | jq -r '.items[] | select(.status.conditions[].type=="Ready") | .metadata.name ' 这个会显示默认命名空间中准备好的每个 pod
      • 我添加了一个脚本,它只会给你状态。如果有用,请研究一下
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2021-07-10
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多