【问题标题】:Kubectl Get Worker Nodes OnlyKubectl 仅获取工作节点
【发布时间】:2021-08-11 17:12:06
【问题描述】:

是否有任何快捷方式或 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$ 

我的用例是希望每分钟获取此列表以更新外部负载平衡器池,以防添加新节点,从集群中删除。事实上,我可以自己标记它们,但如果有一些内置的默认方式这样做会很有用

【问题讨论】:

  • kubectl get nodes | grep worker 不工作?
  • 谢谢,我会尝试的,但我正在寻找一些更简洁的方法,不使用像 grep 这样的外部工具,因为我需要在 python sdk for k8s api 中使用它。
  • @christoph nope,它没有用

标签: kubernetes kubectl


【解决方案1】:

您可以通过

获取节点的角色/标签
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, workeretcd。另外两个有etcdworker(也可以向右滚动查看标签)。

所以我可以通过

获取所有工作节点
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

要排除controlplanes,您可以使用!=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

【讨论】:

  • hmmm 没有这些标签,我需要向 docker ee 创建一个功能请求
  • 这不应该留给 k8s 操作员在主节点和工作节点上放置标签,应该有一个内置的标准方式来做到这一点,也许我现在会在我的工作节点上放置标签,但是一个新的管理员明天添加新节点可能不会,或者可能忘记放置标签,因此它不会显示在使用列表的远程系统的工作人员列表中
  • 你通常如何添加节点?你有哪种集群?
  • 它的 docker EE,我只是安装了一个新的 docker EE 节点并使用 UCP 将其添加到现有集群
  • 无论使用何种部署工具,这些标签都应该由kubernetes默认添加
【解决方案2】:

您可以使用以下选择工人

kubectl get node --selector='!node-role.kubernetes.io/master'

【讨论】:

    【解决方案3】:

    尝试:

    kubectl describe node -l node-role.kubernetes.io/worker=true 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多