es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“bash” no encontrado al ejecutar xargs en Kubernetes.

Estoy tratando de usar/entender xargs para imprimir varios detalles de algunos pods que tengo en ejecución en Kubernetes en diferentes namespaces. Por ejemplo, este comando produce:

$ kubectl get pods -A | grep Error | awk '{print $2 "-n=" $1}'
my-pod-kf8xch6y-qc6ms-k6ww2 -n=my-ns
my-pod-kf8xlg64-g0ss7-mdv1x -n=my-ns
my-pod-kldslg64-polf7-msdw3 -n=another-ns

lo cual es correcto/esperado.

Cuando agrego xargs al comando anterior, obtengo:

$ kubectl get pods -A | grep Error | awk '{print $2 "-n=" $1}' | xargs kubectl $1 get pod $0 -oyaml | grep phase
Error from server (NotFound): pods "bash" not found
phase: Failed
phase: Failed

Lo cual es realmente la salida esperada, pero no entiendo por qué se pasa bash a xargs.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual se pasa bash a xargs es porque xargs toma la entrada del comando anterior y la utiliza como argumentos para el siguiente comando. En este caso, la salida del comando awk (my-pod-kf8xch6y-qc6ms-k6ww2 -n=my-ns, my-pod-kf8xlg64-g0ss7-mdv1x -n=my-ns, my-pod-kldslg64-polf7-msdw3 -n=another-ns) se pasa como argumentos al comando kubectl. El primer argumento ($1) en el comando kubectl espera el espacio de nombres (namespace), y el segundo argumento ($0) espera el nombre del pod. Sin embargo, como xargs no sabe qué argumento es cada uno, está pasando el primer argumento (my-pod-kf8xch6y-qc6ms-k6ww2) como el nombre del pod y el segundo argumento (-n=my-ns) como el espacio de nombres, lo cual resulta en kubectl buscando un pod llamado bash en el espacio de nombres my-ns y no encontrándolo.

Comments are closed.