如何获取“准备好”的豆荚列表?

fas*_*cja 8 kubernetes kubectl kubernetes-pod

我正在使用 kubectl 来检索 pod 列表:

 kubectl get pods --selector=artifact=boot-example -n my-sandbox  
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

NAME                           READY   STATUS    RESTARTS   AGE
boot-example-757c4c6d9c-kk7mg   0/1     Running   0          77m
boot-example-7dd6cd8d49-d46xs   1/1     Running   0          84m
boot-example-7dd6cd8d49-sktf8   1/1     Running   0          88m
Run Code Online (Sandbox Code Playgroud)

我只想得到那些“准备好”的豆荚(通过了readinessProbe)。是否有任何 kubectl 命令只返回“就绪”pods?如果不是 kubectl 命令,那么也许是其他方式?

Muh*_*eem 16

你可以使用这个命令:

kubectl -n your-namespace get pods -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep true
Run Code Online (Sandbox Code Playgroud)

这将返回带有“就绪”容器的 pod 。

要在没有 grep 的情况下执行此操作,您可以使用以下命令:

kubectl -n your-namespace get pods -o go-template='{{range $index, $element := .items}}{{range .status.containerStatuses}}{{if .ready}}{{$element.metadata.name}}{{"\n"}}{{end}}{{end}}{{end}}'

kubectl -n your-namespace get pods -o jsonpath='{range .items[*]}{.status.containerStatuses[*].ready.true}{.metadata.name}{ "\n"}{end}'
Run Code Online (Sandbox Code Playgroud)

这将返回“就绪”的 pod 名称。

  • @nrjohnstone,status.phase=正在运行并不意味着 Pod 准备就绪。 (4认同)
  • 更高版本的 kubectl 现在可以执行此操作 - kubectl get pods --field-selector=status.phase=Running (3认同)
  • 这是一个除了 kubectl 之外不需要任何外部工具的解决方案,可以向您返回“Ready”字段以及 pod 的其他数据。您可以使用 grep 只过滤“Ready”为“true”的 pod (2认同)

Vit*_*Vit 6

您可以尝试此命令,它使用 jq 根据您的需要转换 kubectl json 输出。

kubectl get pods --all-namespaces -o json  | jq -r '.items[] | select(.status.phase = "Ready" or ([ .status.conditions[] | select(.type == "Ready") ] | length ) == 1 ) | .metadata.namespace + "/" + .metadata.name'
Run Code Online (Sandbox Code Playgroud)


P..*_*... 6

使用kubectl get <resource-name>命令查询时打印 READY 状态的所有资源类型的通用答案。

kubectl get pod |grep -P '\s+([1-9]+)\/\1\s+'
Run Code Online (Sandbox Code Playgroud)

例子:

kubectl get pod
NAME   READY  STATUS     RESTARTS  AGE
app_1   1/1    Running    0         77m
app_2   1/1    Running    0         77m
app_3   0/1    Completed  0         77m
app_4   1/1    Running    0         77m
app_5   8/8    Running    0         77m
app_6   4/4    Running    1         77m
app_7   1/1    Running    0         77m
app_8   1/1    Running    0         77m
app_9   1/1    Running    0         77m
app_10  1/1    Running    0         77m
app_11  1/1    Running    0         77m
app_12  1/1    Running    0         77m
app_13  1/1    Running    0         75m
app_14  2/2    Running    0         77m
app_15  2/2    Running    0         77m
app_16  2/2    Running    0         76m
app_17  4/8    Running    0         77m
app_18  1/1    Running    0         77m
app_19  1/1    Running    0         77m
app_20  1/1    Running    0         77m
app_21  1/1    Running    0         77m
app_22  2/2    Running    0         77m
app_23  3/3    Running    0         77m
app_24  1/1    Running    0         77m
app_25  1/1    Running    0         77m
app_26  1/1    Running    0         77m
app_27  1/1    Running    0         77m
app_28  2/2    Running    0         77m
Run Code Online (Sandbox Code Playgroud)

示例输出:

kubectl get pod| grep -P '\s+([1-9]+)\/\1\s+'
app_1   1/1    Running    0         77m
app_2   1/1    Running    0         77m
app_4   1/1    Running    0         77m
app_5   8/8    Running    0         77m
app_6   4/4    Running    1         77m
app_7   1/1    Running    0         77m
app_8   1/1    Running    0         77m
app_9   1/1    Running    0         77m
app_10  1/1    Running    0         77m
app_11  1/1    Running    0         77m
app_12  1/1    Running    0         77m
app_13  1/1    Running    0         75m
app_14  2/2    Running    0         77m
app_15  2/2    Running    0         77m
app_16  2/2    Running    0         76m
app_18  1/1    Running    0         77m
app_19  1/1    Running    0         77m
app_20  1/1    Running    0         77m
app_21  1/1    Running    0         77m
app_22  2/2    Running    0         77m
app_23  3/3    Running    0         77m
app_24  1/1    Running    0         77m
app_25  1/1    Running    0         77m
app_26  1/1    Running    0         77m
app_27  1/1    Running    0         77m
app_28  2/2    Running    0         77m
Run Code Online (Sandbox Code Playgroud)

要打印未处于就绪状态的资源:

kubectl get pod |grep -Pv '\s+([1-9]+)\/\1\s+'
NAME   READY  STATUS     RESTARTS  AGE
app_3   0/1    Completed  0         77m
app_17  4/8    Running    0         77m
Run Code Online (Sandbox Code Playgroud)

grep命令感兴趣的人,建议阅读正则表达式中“捕获组”和“反向引用”的概念。但是,此处添加了简要说明。

\s+([1-9]+)\/\1\s+

解释:

\s匹配任何空白字符 +匹配前一个标记一次到无限次,尽可能多次

1st 捕获组 ([1-9]+)

匹配下面列表中存在的单个字符[1-9] +匹配一次到无限次之间的前一个标记,尽可能多地 1-9匹配介于两者之间的单个字符19 \/匹配该字符/字面上 \1匹配与第一次捕获最近匹配的相同文本组,在这种情况下是[1-9]+

\s匹配任何空白字符 +匹配 one 和 unlimit 之间的前一个标记