98 votes

Signaler l'achèvement du travail

Je cherche un moyen de savoir (à partir d'un script) quand un Job Kubernetes s'est terminé. Je veux ensuite sortir les journaux des conteneurs et effectuer le nettoyage.

Quelle serait la meilleure façon de procéder ? La meilleure façon serait-elle d'exécuter kubectl describe job <job_name> et grep pour 1 Succeeded ou quelque chose de ce genre ?

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

0voto

kelloti Points 4157

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X