是否有任何快捷方式或kubectl命令或REST API调用仅获取工作节点列表。 (不包括主节点)
更新: 对于大师们,我们可以这样:
kubectl get nodes --selector=node-role.kubernetes.io/master
对于工人,我看不到默认创建的任何此类标签。我们可以通过反转来做还是在选择器上做!=种事情。
我们也不能grep:
C02W84XMHTD5:ucp iahmad$ kubectl get nodes | grep worker
C02W84XMHTD5:ucp iahmad$
C02W84XMHTD5:ucp iahmad$ kubectl get nodes -o wide| grep worker
C02W84XMHTD5:ucp iahmad$
C02W84XMHTD5:ucp iahmad$ kubectl get nodes -o yaml | grep worker
C02W84XMHTD5:ucp iahmad$
C02W84XMHTD5:ucp iahmad$ kubectl get nodes -o json | grep worker
C02W84XMHTD5:ucp iahmad$
我的用例是要每分钟获取此列表以更新外部负载平衡器池,以防添加新节点并将其从群集中删除。的确,我可以自己给它们加上标签,但是如果有一些默认的方法可以这样做
答案 0 :(得分:2)
您可以通过
获得节点的角色/标签。kubectl get nodes --show-labels
就我而言,我确实有三个节点,每个节点都有给定的角色和标签:
NAME STATUS ROLES AGE VERSION LABELS
host01 Ready controlplane,etcd,worker 61d v1.10.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=host01,node-role.kubernetes.io/controlplane=true,node-role.kubernetes.io/etcd=true,node-role.kubernetes.io/worker=true
host02 Ready etcd,worker 61d v1.10.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=host02,node-role.kubernetes.io/etcd=true,node-role.kubernetes.io/worker=true
host03 Ready etcd,worker 61d v1.10.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=host03,node-role.kubernetes.io/etcd=true,node-role.kubernetes.io/worker=true
仅host01的标签为controlplane, worker
和etcd
。其他两个分别为etcd
和worker
(向右滚动以查看标签)。
所以我可以通过
获取所有工作节点kubectl get nodes -l node-role.kubernetes.io/worker=true
NAME STATUS ROLES AGE VERSION
host01 Ready controlplane,etcd,worker 61d v1.10.5
host02 Ready etcd,worker 61d v1.10.5
host03 Ready etcd,worker 61d v1.10.5
要排除controlplane
,可以在!=true
旁边加上第二个标签来排除它们
kubectl get nodes -l node-role.kubernetes.io/worker=true,node-role.kubernetes.io/controlplane!=true
NAME STATUS ROLES AGE VERSION
host02 Ready etcd,worker 61d v1.10.5
host03 Ready etcd,worker 61d v1.10.5
请使其适应您的标签,或根据您的群集设置标签。在我的情况下,它是一个Rancher 2.0集群。添加节点后,Rancher会自动创建标签。
Rancher的API位于(已附加过滤器):
/v3/clusters/c-xxxxx/nodes?worker=true&controlPlane_ne=true
答案 1 :(得分:0)
您可以使用以下选择工人
kubectl get node --selector='!node-role.kubernetes.io/master'
答案 2 :(得分:0)
试试:
kubectl describe node -l node-role.kubernetes.io/worker=true