Estoy buscando enumerar todos los contenedores en un pod en un script que recopila los registros después de ejecutar una prueba.  kubectl describe pods -l k8s-app=kube-dnsdevuelve 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 se analiza la salida de describe).
fuente

kubectl get pods -o json.kubectl get pods kube-dns-q2oh6 -o jsonpath={.spec.containers[*].name}Responder
kubectl get pods POD_NAME_HERE -o jsonpath='{.spec.containers[*].name}'Explicación
Esto obtiene el objeto JSON que representa el pod. Luego usa JSONpath de kubectl para extraer el nombre de cada contenedor del pod.
fuente
Truco rápido para evitar construir 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]fuente
containersyinit containersinit containersde esta manera en v1.18.8 :(Reuní algunas ideas en lo siguiente:
Línea simple:
kubectl get po -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\tname: "}{.name}{"\n\timage: "}{.image}{"\n"}{end}'Dividir (para facilitar la lectura):
kubectl get po -o jsonpath=' {range .items[*]} {"pod: "} {.metadata.name} {"\n"}{range .spec.containers[*]} {"\tname: "} {.name} {"\n\timage: "} {.image} {"\n"} {end}'fuente
lessviCOMMAND | lessvi<(COMMAND)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[*].namefuente
Si lo usa
jsoncomo formato de salidakubectl get, obtendrá muchos detalles de unpod. Conjsonprocesadores comojqeste, es fácil seleccionar o filtrar ciertas partes que le interesan.Para enumerar los contenedores de un pod, la
jqconsulta se 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 sobre 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")'fuente
Utilizo esto para mostrar versiones de imágenes en los pods.
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 aquí , con agregar una nueva línea para iniciar el siguiente comando de la consola en la nueva línea, eliminar las comas al final de cada línea y enumerar solo mis pods, sin los pods de servicio (por ejemplo
--all-namespaces, se elimina la opción).fuente
Utilice el siguiente comando para ver toda la información de un pod en particular
kubectl get pod <pod name> -n <namespace name> -o yamlfuente
Para ver información detallada junto con los mapas de configuración de todos los contenedores en un pod en particular, use este comando:
kubectl describe pod/<pod name> -n <namespace name>fuente