问题描述
考虑以下表达式
kubectl get deploy -o 'jsonpath={.items[*].apiVersion}'
它返回以下输出:
apps/v1 apps/v1
在自定义列中使用完全相同的表达式时:
kubectl get deploy -o 'custom-columns=A:{.items[*].apiVersion}'
我得到:
A
<none>
<none>
我在做什么错了?
解决方法
实际上,您要测试的情况具有误导性。因为Deployment
和DeploymentList
具有相同的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