Kubectl:jsonpath 有效,但自定义列不起作用



考虑以下表达式

kubectl get deploy -o 'jsonpath={.items[*].apiVersion}'

它返回以下输出:

apps/v1 apps/v1

当对自定义列使用完全相同的表达式时:

kubectl get deploy -o 'custom-columns=A:{.items[*].apiVersion}'

我得到:

A
<none>
<none>

我做错了什么?

实际上,您正在测试的案例有点误导。因为DeploymentDeploymentList都具有相同的apiVersion(apps/v1(。因此,让我们以.metadata.name为例:

kubectl -n kube-system get deploy -o 'jsonpath={.items[*].metadata.name}'

你会得到这样的结果:

calico-kube-controllers coredns dns-autoscaler kubernetes-dashboard metrics-server rbd-provisioner

但对于自定义列,它在某种程度上有所不同。表用于显示内容列表。因此,您提供的路径适用于表中的每一行。所以你应该使用:

kubectl -n kube-system get deploy -o 'custom-columns=A:{.metadata.name}'

你会得到正确的结果:

A
calico-kube-controllers
coredns
dns-autoscaler
kubernetes-dashboard
metrics-server
rbd-provisioner

所以问题是在custom-columns上使用items[*]

对于自定义列,您必须使用以下方式。

kubectl get deploy -o 'custom-columns=A:{.apiVersion}'

如果您有1个或多个部署,您应该会看到如下输出。

A
apps/v1
apps/v1

相关内容

  • 没有找到相关文章

最新更新