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.
There are few options you can try:
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"
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
--for=condition=xxxxx
A successful message will be printed to stdout indicating when the specified condition has been met.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