Search code examples
kuberneteskubectl

Watch Kubernetes job output until completion


Is there a way to watch the job's output (STDOUT and STDERR) using kubectl? We need to wait the job completion watching its output and, if the job finishes with error, the entire process should be interrupted.

I'd like to redirect the job output (STDOUT and STDERR) to my current process STDOUT. I want to wait the job completion. In case it finished with error, the current process (which triggered the job via kubectl) should finish in error as well. I know kubectl wait but, as far as I know, it does not support listening to the jobs output.


Solution

  • We ended up using three commands to accomplish the task. First, we delete the old job (it might have ran before), create the new job, wait it for completion (with a timeout) and, after it has finished, we print the logs:

    kubectl delete job my-job || true
    kubectl apply -f ./jobs/my-job.yaml
    kubectl wait --for=condition=complete job/my-job --timeout=60s
    echo "Job output:"
    kubectl logs job/my-job