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 名称。
您可以尝试此命令,它使用 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)
使用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匹配介于两者之间的单个字符1 并9
\/匹配该字符/字面上
\1匹配与第一次捕获最近匹配的相同文本组,在这种情况下是[1-9]+
\s匹配任何空白字符
+匹配 one 和 unlimit 之间的前一个标记
| 归档时间: |
|
| 查看次数: |
6530 次 |
| 最近记录: |