如何列出具有特定环境变量的部署

tit*_*nic 1 kubernetes kubectl

我很乐意列出具有mongodb环境价值的部署及其阶段状态。有办法这样做吗?

使用此命令,我获得带有特定环境值的部署名称

kubectl get deploy -o=custom-columns="NAME:.metadata.name,SEC:.spec.template.spec.containers[*].env[*].value" | grep mongodb | cut -f 1 -d ' '
Run Code Online (Sandbox Code Playgroud)

输出:

app1
app2
app3
app4
Run Code Online (Sandbox Code Playgroud)

我想要得到的输出:

NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
app1                                     1/1     1            1           125d
app2                                     1/1     1            1           248d
app3                                     1/1     1            1           248d
app4                                     1/1     1            1           248d
Run Code Online (Sandbox Code Playgroud)

或者它也可以是 pod。我很感激你的帮助。

谢谢你!

Daz*_*kin 5

我尝试使用解决方案,kubectl但没有成功。

我怀疑(!?)您需要使用额外的工具来解析|处理结果以获得您想要的结果。也许使用jq

对于部署,您可以使用以下命令根据环境变量名称过滤结果:

FILTER="{.items[*].spec.template.spec.containers[*].env[?(@.name==\"mongodb\")]}"

kubectl get deployments \
--namespace=${NAMESPACE} \
--output=jsonpath="${FILTER}"
Run Code Online (Sandbox Code Playgroud)

但这仅返回过滤后的路径(即items[*].spec.template.spec.containers[*].env)。

使用 JSONPath,您应该(!)能够将过滤器应用于该项目,但我不支持(通过 的kubectl实现)即:

FILTER="{.items[?(@.spec.template.spec.containers[?(@.env[?(@.name==\"mongodb\")])])]}"
Run Code Online (Sandbox Code Playgroud)

有了jq,我认为您将能够选择env.name、返回 的状态并获取您需要的item原始值。status就像是:

FILTER='
.items[]
|select(.spec.template.spec.containers[].env[].name == "mongodb")
|{"name":.metadata.name, "ready":.status.readyReplicas}
'

kubectl get deployments \
--output=json \
| jq -r "${FILTER}"
Run Code Online (Sandbox Code Playgroud)