问题描述
我正在尝试根据某种条件获取我的 Kubernetes 集群节点列表,即是否存在污点。我有 3 个节点集群(1 个主节点和 2 个工作节点)。我需要获取 2 个工作节点名称,因为污点在主节点上。我被困在这里,因为我得到了相反的结果,即能够获得带有污点(主)的节点。请帮忙帮我放!运算符,以便我只能获得没有任何污点的节点。
这是我到目前为止的 JSONPath 查询:-
vagrant@mykubemaster:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
mykubemaster Ready control-plane,master 12d v1.20.1
mykubenode01 Ready <none> 12d v1.20.1
mykubenode02 Ready <none> 12d v1.20.1
vagrant@mykubemaster:~$ kubectl get nodes -o=jsonpath='{$.items[?(@.spec.taints)].Metadata.name}'
mykubemastervagrant@mykubemaster:~$
解决方法
Kubernetes/kubectl 使用的 Go JSONPath implementation(遗憾的是)不支持带有否定的路径过滤器表达式;事实上,许多实现不支持这样的语法:
$[?(!(@.key==42))]
看到这个广泛的comparisons: