如何使用jsonpath从kubectl中提取多个值

30

我找到了关于测试多个值的jsonpath示例,但没有找到提取多个值的。

我想从kubectl get pods中获取imagename

这个命令可以获取namekubectl get pods -o=jsonpath='{.items[*].spec.containers[*].name}' | xargs -n 1

这个命令可以获取imagekubectl get pods -o=jsonpath='{.items[*].spec.containers[*].image}' | xargs -n 1

但是这个命令出错了:kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].[name,image]}' | xargs -n 2,错误提示是“invalid array index image” - 是否有一种语法可以获取节点相邻的值列表?

3个回答

41

使用下面的命令获取名称和图像:

kubectl get pods -Ao jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.template.spec.containers[].image}{"\n"}{end}'

它将会输出以下内容:

name image

4
这个命令对我有用,只需进行微小的调整: kubectl get pods -ao jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.containers[*].image}{"\n"}{end}' - navicore

7

有用的命令,我不得不稍作修改才能使它工作(使用 -a 标志失败)。此外,我添加了一个应用标签过滤器和一个额外的字段以获取:命名空间、Pod 名称、镜像。

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{@.metadata.namespace}{"\t"}{@.metadata.name}{"\t"}{@.spec.containers[*].image}{"\n"}{end}' -l app=nginx

-a 应该在所有命名空间中改为 -A。 kubectl get pods -Ao jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.containers[*].image}{"\n"}{end}' - Dobhaweim

2

谢谢!虽然我需要进行一些修改,但这对我很有帮助:

#!/bin/bash

releases=$(kubectl get deployment -A --output=jsonpath='{range .items[*]}{@.metadata.namespace}{"|"}{@.metadata.name}{"\n"}{end}')

for release in $releases; do
    namespace=$( echo $release | cut -d "|" -f 1)
    deployment=$( echo $release | cut -d "|" -f 2)
    kubectl rollout restart deployments -n "${namespace}" "${deployment}"
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接