Watch Kubernetes job output until completion

6/24/2019

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.

-- viniciusjssouza
kubectl
kubernetes

2 Answers

6/25/2019

There are few options you can try:

  1. View the job logs in real time:
    • kubectl logs --follow $POD

If you are having trouble locating the proper pod than first go kubectl describe job $JOB Pod name will be under the "Events"

  1. There are few more kubectl commands that can be useful here:
    • kubectl logs -f my-pod - stream pod logs (stdout)
    • kubectl logs -f my-pod -c my-container - stream pod container logs (stdout, multi-container case)
    • kubectl logs -f -l name=myLabel --all-containers - stream all pods logs with label name=myLabel (stdout)

More about that can be found here

  1. Try again with kubectl wait but with proper flags like --for=condition=xxxxx A successful message will be printed to stdout indicating when the specified condition has been met.
-- OhHiMark
Source: StackOverflow

6/28/2019

We ended up using three commands to accomplish the task. First, we delete the old job (it might had 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
-- viniciusjssouza
Source: StackOverflow