JSONPath 列出所有处于就绪状态的节点,除了那些被污染的节点?

Nax*_*axi 1 kubernetes

我想列出所有处于就绪状态的节点,除了那些有任何污染的节点。如何使用 jsonpath 实现这一点?

我尝试了以下取自 k8s doc 的语句,但它没有打印出我想要的内容。我正在寻找诸如 -- 之类的输出 node01 node02。输出中没有主节点,因为它有污点。什么样的污点在这里并不重要。

JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
 && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
Run Code Online (Sandbox Code Playgroud)

aci*_*uji 5

我已经成功上市,我的节点是readynot tainted使用jq

在这里,您拥有所有节点:

$ kubectl get nodes

gke-standard-cluster-1-default-pool-9c101360-9lvw   Ready    <none>   31s   v1.13.11-gke.9
gke-standard-cluster-1-default-pool-9c101360-fdhr   Ready    <none>   30s   v1.13.11-gke.9
gke-standard-cluster-1-default-pool-9c101360-gq9c   Ready    <none>   31s   v1.13.11-gke.
Run Code Online (Sandbox Code Playgroud)

这里我污染了一个节点:

$ kubectl taint node gke-standard-cluster-1-default-pool-9c101360-9lvw key=value:NoSchedule

node/gke-standard-cluster-1-default-pool-9c101360-9lvw tainted
Run Code Online (Sandbox Code Playgroud)

最后是一个列出not taintedready节点的命令:

$ kubectl get nodes -o json | jq -r '.items[] | select(.spec.taints|not) | select(.status.conditions[].reason=="KubeletReady" and .status.conditions[].status=="True") | .metadata.name'

gke-standard-cluster-1-default-pool-9c101360-fdhr
gke-standard-cluster-1-default-pool-9c101360-gq9c
Run Code Online (Sandbox Code Playgroud)