Как идентифицировать статические модули с помощью команды kubectl?

#kubernetes #kubectl #kubernetes-pod

#kubernetes #kubectl #kubernetes-pod

Вопрос:

У меня есть несколько модулей в 2 узлах в моем кластере Kubernetes. (Пожалуйста, смотрите ниже).

Есть ли способ определить, какие из них являются статическими модулями? (может kubectl быть, команда сортировки?)

Спасибо!

 controlplane $ k get pods -A -o wide
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE    IP            NODE           NOMINATED NODE   READINESS GATES
kube-system   coredns-f9fd979d6-h865q                1/1     Running   0          119s   10.244.0.5    node02   <none>           <none>
kube-system   coredns-f9fd979d6-z4j6f                1/1     Running   0          119s   10.244.1.5    node01         <none>           <none>
kube-system   etcd-a1b2k7h7                      1/1     Running   0          2m9s   172.17.0.79   node02   <none>           <none>
kube-system   kube-apiserver-g8j4k8o8            1/1     Running   0          2m9s   172.17.0.79   node02   <none>           <none>
 

Комментарии:

1. Можете ли вы проверить ссылку на владельца статического модуля через describe, чтобы узнать, имеет ли он особое значение? Я полагаю, он не должен принадлежать набору реплик, но у меня сейчас нет доступа к кластеру, чтобы проверить мое дело

2. Вы на 100% правы!

3. Управляется: ReplicaSet/ coredns-f9fd979d6 ИЛИ управляется: Node / controlplane . Если вы добавите это в качестве ответа, я отмечу его как правильный ответ. Спасибо!

Ответ №1:

Проверка ссылки владельца статического модуля с помощью kubectl describe command должна указывать на то, что такой модуль управляется не a ReplicaSet , а скорее из Node/controlplane

Комментарии:

1. Также: к имени статических модулей всегда добавляется -${NODENAME}, указывающий, какой узел управляет этим статическим модулем.

Ответ №2:

Вы можете фильтровать по OwnerReference.Kind . Статические модули имеют Node вид ownerReference .

Вы можете использовать --custom-columns для составления списка всех ваших модулей и ссылок на их владельцев. Пример:

 $ kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace
NAME                                        CONTROLLER   NAMESPACE
busybox-6ff78776d5-k56fx                    ReplicaSet   default
nginx-6b87f7d77c-rq6fl                      ReplicaSet   default
coredns-74ff55c5b-xpgnq                     ReplicaSet   kube-system
etcd-minikube                               Node         kube-system
ingress-nginx-admission-create-n6j7k        Job          kube-system
ingress-nginx-admission-patch-45xvw         Job          kube-system
ingress-nginx-controller-65cf89dc4f-g7lwm   ReplicaSet   kube-system
kindnet-44pq8                               DaemonSet    kube-system
kindnet-nqhg9                               DaemonSet    kube-system
kube-apiserver-minikube                     Node         kube-system
kube-controller-manager-minikube            Node         kube-system
kube-proxy-nmzbn                            DaemonSet    kube-system
kube-proxy-wlmdz                            DaemonSet    kube-system
kube-scheduler-minikube                     Node         kube-system
metrics-server-58966dd6b9-schjr             ReplicaSet   kube-system
storage-provisioner                         <none>       kube-system
 

Или использовать jq для фильтрации только статических модулей ( kind == "Node" ):

 $ kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.ownerReferences[]?.kind == "Node" ) | .metadata.name) | .[]'
etcd-minikube
kube-apiserver-minikube
kube-controller-manager-minikube
kube-scheduler-minikube
 

Комментарии:

1. К вашему сведению — Добавить столбец для имени узла и grep для узла: kubectl get pods -A -o custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace,NODE:.spec.nodeName | grep Node

Ответ №3:

В Kubernetes версии v1.16.3 metadata.ownerReferences.kind — это не вещь, поэтому рекомендуемый ответ здесь не сработал. Я смог идентифицировать статические модули, просмотрев пару metadata.labels.tier ключ / значение с равным «control-plane» с помощью jq, используя следующее.

 kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.labels.tier == "control-plane" ) | .metadata.name) | .[]'
 

Комментарии:

1. Статические модули не обязательно имеют определенную метку и не обязательно должны находиться на ваших главных узлах.