Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

740
Vistas
obtener uno del nuevo nombre del pod después del estado de implementación de kubectl | kubectl get pods --field-selector devuelve Terminación de pods

El problema es que después de implementar una nueva implementación como

 kubectl apply -f deployment.yml

(digamos implementación con una réplica)

Kubernetes creará un segundo pod y apagará el anterior; hasta ahora, está bien.

Pero inmediatamente después de aplicar kubectl, me gustaría detectar en CI/CD si la implementación fue exitosa y, en cualquier caso (sin importar si la implementación tuvo éxito o falló), obtenga el registro de uno de los pods recién implementados para proporcionar la mayor cantidad de información posible en CI /CD log para determinar qué salió mal.

entonces estoy usando

 kubectl rollout status deployment deployment-name

que está esperando la implementación para implementarse. Inmediatamente después, terminará con dos pods, uno en estado "En ejecución" y otro "Terminando".

Ahora la parte problemática: normalmente usaría un método como

 kubectl get pods --selector=app=deployment-name --output=jsonpath='{.items[*].metadata.name}' --field-selector=status.phase=Running

pero desafortunadamente devolverá los nombres de ambos pods ("En ejecución" y "Terminando") separados por espacios.

Ahora he probado también

 kubectl get pods --selector=app=deployment-name --output=jsonpath='{.items[*].metadata.name}' --field-selector=status.phase=Running,status.phase!=Terminating

según la documentación:

pero por alguna razón esto devolverá exactamente el mismo resultado, ambos pods ejecutándose y finalizando.

La pregunta es:

¿Cómo excluir correctamente los pods TERMINATING del resultado?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Problema conocido desde 2018. Aún no se ha resuelto.

Consulte Kubectl devuelve pods en varios estados cuando solo se seleccionan aquellos en estado En ejecución a través de --field-selector o -o jsonpath para obtener más detalles.

En resumen: NO hay un comando de una línea normal, CORTO y adecuado que haga lo que usted quiere.

Razones detrás de eso :

Esto parece no ser un error. La columna STATUS de salida de kubectl get pods no muestra status.phase. kubectl get pods muestra el formato de tabla del objeto PodList y usa los estados status.containerStatuses para mostrar los datos de la columna STATUS.

Los estados válidos de la fase del pod son pendiente, en ejecución, correcto, fallido y desconocido. De este documento, el estado 'En ejecución' depende de 'restartPolicy'.

Jsonpath se aplica al objeto 'PodList', no a la salida de kubectl. status.containerStatuses indica si los contenedores de pod se están ejecutando o no. Los selectores de campo varían según los tipos de recursos de Kubernetes. status.containerStatuses no es compatible con los selectores de campo de pods.

Soluciones alternativas:

1. kubectl get pods | grep Running

2. kubectl get pods -o jsonpath='{.items[*].status.containerStatuses[*].state.running},{.items[*].metadata.name}' --field-selector=status.phase==Running | sed 's/ /\n/' | grep startedAt | awk -F',' '{print $2}'

3. ( fuente ) kubectl get pods --field-selector=status.phase=Running --template {{range .items}}{{ if not .metadata.deletionTimestamp }}{{.metadata.name}}{{"\n"}}{{end}}{{end}}

over 4 years ago · Santiago Trujillo Denunciar

0

desde la línea de comandos puedes usar comandos como

 grep

para atrapar lo que te gusta o puedes hacer lo que hago y simplemente mirar todas las vainas con

 watch

Comando para ver los cambios y ver los errores desde una terminal separada.

Lo que uso para este tipo de situaciones:

 watch -n0.5 " kubectl get pods | grep -v 'Running' "

para capturar pods con estado no en ejecución (Completado, OOMKilled, Pendiente, etc.) y luego desde una terminal separada

 kubectl logs podName && kubectl describe pods podName

Espero haber sido un poco de ayuda.

Incluso para obtener el último número de revisión que uso

 kubectl rollout history deployment.v1.apps/deploymentName | tail -2 | head -1 | awk '{print $1}'

Pero tal vez puedas usar

 kubectl get pods --sort-by=.metadata.creationTimestamp

y luego tome el último, así que finalmente tal vez, puede usar

 kubectl logs -c [containerName] $(kubectl get pods --sort-by=.metadata.creationTimestamp | tail -1 | awk '{print$1}')

esto me puede dar el último pod creado y sus registros

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda