delete - kubernetes restart deployment
¿Cómo puedes enumerar de forma clara todos los contenedores en un pod kubernetes? (6)
Estoy buscando enumerar todos los contenedores en un pod en una secuencia de comandos que recopila los registros después de ejecutar una prueba. kubectl describe pods -l k8s-app=kube-dns
devuelve mucha información, pero solo estoy buscando una devolución como:
etcd
kube2sky
skydns
No veo una forma sencilla de formatear la salida de descripción. ¿Hay otro comando? (y supongo que en el peor de los casos siempre hay un análisis de la salida de describir).
Responder
kubectl get pods POD_NAME_HERE -o jsonpath=''{.spec.containers[*].name}''
Explicación
Esto obtiene el objeto JSON que representa el pod. A continuación, utiliza JSONpath de JSONpath para extraer el nombre de cada contenedor del pod.
Corte rápido para evitar la construcción de la consulta JSONpath para un solo pod:
$ kubectl logs mypod-123
a container name must be specified for pod mypod-123, choose one of: [etcd kubesky skydns]
Lo uso para mostrar versiones de imágenes en las cápsulas.
kubectl get pods -o=jsonpath=''{range .items[*]}{"/n"}{.metadata.name}{":/t"}{range .spec.containers[*]}{.image}{end}{end}'' && printf ''/n''
Es solo una pequeña modificación del script desde here , con la adición de una nueva línea para iniciar el siguiente comando de la consola en la nueva línea, las comas eliminadas al final de cada línea y una lista de solo mis pods, sin pods de servicio (por ejemplo --all-namespaces
opción --all-namespaces
is remoto).
Puede usar get
y elegir una de las plantillas de salida admitidas con el --output
( -o
).
Tome jsonpath
por ejemplo, kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}
etcd kube2sky skydns
kubectl get pods -l k8s-app=kube-dns -o jsonpath={.items[*].spec.containers[*].name}
le proporciona etcd kube2sky skydns
.
Otras plantillas de salida de salida compatibles son go-template, go-template-file, jsonpath-file. Consulte http://kubernetes.io/docs/user-guide/jsonpath/ para saber cómo usar la plantilla jsonpath. Consulte https://golang.org/pkg/text/template/#pkg-overview para https://golang.org/pkg/text/template/#pkg-overview cómo usar la plantilla go.
Actualización: consulte este documento para ver otros comandos de ejemplo para listar imágenes de contenedor: https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
Si desea una salida clara de qué contenedores son de cada Pod
kubectl get po -l k8s-app=kube-dns /
-o=custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name
Si utiliza json
como formato de salida de kubectl get
, obtendrá muchos detalles de un pod
. Con los procesadores json
como jq
es fácil seleccionar o filtrar ciertas partes que le interesan.
Para listar los contenedores de un pod, la consulta jq
ve así:
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods /
| jq --raw-output ''.items[].spec.containers[].name''
Si desea ver todos los detalles relacionados con un contenedor específico, intente algo como esto:
kubectl get --all-namespaces --selector k8s-app=kube-dns --output json pods /
| jq ''.items[].spec.containers[] | select(.name=="etcd")''