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

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

,

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

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

如果部署1或更多,您应该会看到类似下面的输出。

A
apps/v1
apps/v1