Kubectl Получить только рабочие узлы - PullRequest
0 голосов
/ 21 сентября 2018

Существует ли какая-либо быстрая команда или команда kubectl или вызов API REST, чтобы получить список только рабочих узлов.(не включая мастер-узлы)

Обновление : Для мастеров мы можем сделать так:

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$ 

Мой пример использования - каждый раз получать этот списокминута для обновления пулов внешних балансировщиков нагрузки, в случае добавления новых узлов, удаляемых из кластера.В самом деле, я могу пометить их сам, но если для этого есть встроенный стандарт, было бы полезно

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете получить роли / метки своих узлов с помощью

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

Для исключения 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 при добавлении узла.

API для этого находится в Rancher в (с уже добавленным фильтром):

/v3/clusters/c-xxxxx/nodes?worker=true&controlPlane_ne=true
...