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