考虑以下表达式
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
所以问题是在custom-columns
上使用items[*]
。
对于自定义列,您必须使用以下方式。
kubectl get deploy -o 'custom-columns=A:{.apiVersion}'
如果您有1个或多个部署,您应该会看到如下输出。
A
apps/v1
apps/v1