tutorial paso jorge instalación iniciar español disponibilidad cruz crear controles kubernetes kubectl

paso - kubernetes tutorial español



API de Kubernetes: obtiene Pods en nodos específicos (5)

Mirando http://kubernetes.io/docs/user-guide/labels/#selecting-sets-of-nodes parece posible seleccionar un cierto rango de pods basado en etiquetas. Pero en mi caso, quiero seleccionar todos los pods en un nodo, pero no quiero etiquetar cada pod en su nodo correspondiente.

¿Falta algo en la documentación o simplemente no es posible seleccionarlo por nodo? Si lo hago:

kubectl --server="<SERVER>" --namespace=<NS> get pods -o wide | head NAME READY STATUS RESTARTS AGE NODE

¿Se puede usar alguno de estos encabezados como selector? Si es así, ¿cómo hacerlo con kubectl busto más importante, cómo hacerlo con la API?

Gracias por adelantado


Como se mencionó en la respuesta aceptada, ahora el PR se fusiona y puede obtener pods por nodo de la siguiente manera:

kubectl get pods --all-namespaces --field-selector spec.nodeName=<node> -o wide


Ejemplo de clasificación de pods por nodeName:

kubectl get pods -o wide --sort-by="{.spec.nodeName}"

Ejemplo de obtención de pods en nodos utilizando el filtro de etiqueta:

for n in $(kubectl get nodes -l your_label_key=your_label_value --no-headers | cut -d " " -f1); do kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=${n} done

o por numero de reinicios

kubectl get pods --sort-by="{.status.containerStatuses[:1].restartCount}"

Ejemplo de filtrado por nombre de nodo usando --template flag:

$ kubectl get nodes NAME STATUS AGE ip-10-0-90-30.ec2.internal Ready 2d ip-10-0-90-35.ec2.internal Ready 2d ip-10-0-90-50.ec2.internal Ready,SchedulingDisabled 2d ip-10-0-91-60.ec2.internal Ready 2d ip-10-0-91-65.ec2.internal Ready 2d $kubectl get pods --template ''{{range .items}}{{if eq .spec.nodeName "ip-10-0-90-30.ec2.internal"}}{{.metadata.name}}{{"/n"}}{{end}}}{{end}}'' filebeat-pezch app-5xole node-exporter-6kfs8 prometheus-0 sso-359976856-wu8zt


Lo que quieres es compatible con el servidor de la API de Kubernetes de esta manera:

curl --cacert ca.crt --cert apiserver.crt --key apiserver.key https://<server>:<port>/api/v1/namespaces/<namespace>/pods?fieldSelector=spec.nodeName%3Dsomenodename

Sin embargo, esa opción de selección de campo aún no está integrada en kubectl : https://github.com/kubernetes/kubernetes/pull/50140


También puede consultar todos los pods y un nodo con el siguiente comando

kubectl get pods -o wide --all-namespaces | grep <YOUR-NODE>


kubectl describe node <node> mostrará todos los pods sin terminación que se ejecutan en ese nodo