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-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 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
containers
yinit containers
init containers
de 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
less
vi
COMMAND | less
vi<(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[*].name
fuente
Si lo usa
json
como formato de salidakubectl get
, obtendrá muchos detalles de unpod
. Conjson
procesadores comojq
este, es fácil seleccionar o filtrar ciertas partes que le interesan.Para enumerar los contenedores de un pod, la
jq
consulta 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 yaml
fuente
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