En ajoutant la meilleure réponse, issue d'un commentaire de @Coo, Si vous ajoutez un -f
o --follow
lors de l'obtention des journaux, il continuera à suivre le journal et s'arrêtera lorsque le travail sera terminé. se termine ou échoue . Les $#
est même non nul lorsque le travail échoue.
kubectl logs -l job-name=myjob --follow
L'inconvénient de cette approche, à ma connaissance, est qu'il n'y a pas d'option de temporisation.
Un autre inconvénient est que l'appel de logs peut échouer alors que le pod est en cours d'exécution. Pending
(pendant que les conteneurs sont en cours de démarrage). Vous pouvez résoudre ce problème en attendant le pod :
# Wait for pod to be available; logs will fail if the pod is "Pending"
while [[ "$(kubectl get pod -l job-name=myjob -o json | jq -rc '.items | .[].status.phase')" == 'Pending' ]]; do
# Avoid flooding k8s with polls (seconds)
sleep 0.25
done
# Tail logs
kubectl logs -l job-name=myjob --tail=400 -f
0 votes
Pour attendre que le pod soit en cours d'exécution, utilisez "condition=ready". Il est également possible d'attendre l'état d'avancement du déploiement. Voir : stackoverflow.com/a/60810347/658497