观察 Kubernetes 作业输出直到完成
Watch Kubernetes job output until completion
有没有办法使用 kubectl 查看作业的输出(STDOUT 和 STDERR)?我们需要等待作业完成并观察其输出,如果作业完成时出现错误,则应中断整个过程。
我想将作业输出(STDOUT 和 STDERR)重定向到我当前的进程 STDOUT。我想等待工作完成。如果它以错误结束,当前进程(通过 kubectl 触发作业)也应该以错误结束。我知道 kubectl wait
但据我所知,它不支持监听作业输出。
您可以尝试几个选项:
- 实时查看作业日志:
kubectl logs --follow $POD
如果你找不到合适的 pod 比先去 kubectl describe job $JOB
Pod 名称将在 "Events"
下
- 这里还有一些有用的 kubectl 命令:
kubectl logs -f my-pod
- 流式传输 pod 日志(标准输出)
kubectl logs -f my-pod -c my-container
- 流式传输 pod 容器日志(stdout,multi-container 案例)
kubectl logs -f -l name=myLabel --all-containers
- 流式传输标签名称=myLabel (stdout) 的所有 pods 日志
可以找到更多相关信息 here
- 使用 kubectl wait 再试一次,但要使用
--for=condition=xxxxx
等适当的标志
一条成功消息将打印到标准输出,指示何时满足指定条件。
我们最终使用了三个命令来完成任务。首先,我们删除旧作业(之前可能有 运行),创建新作业,等待它完成(超时),完成后,我们打印日志:
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
有没有办法使用 kubectl 查看作业的输出(STDOUT 和 STDERR)?我们需要等待作业完成并观察其输出,如果作业完成时出现错误,则应中断整个过程。
我想将作业输出(STDOUT 和 STDERR)重定向到我当前的进程 STDOUT。我想等待工作完成。如果它以错误结束,当前进程(通过 kubectl 触发作业)也应该以错误结束。我知道 kubectl wait
但据我所知,它不支持监听作业输出。
您可以尝试几个选项:
- 实时查看作业日志:
kubectl logs --follow $POD
如果你找不到合适的 pod 比先去 kubectl describe job $JOB
Pod 名称将在 "Events"
- 这里还有一些有用的 kubectl 命令:
kubectl logs -f my-pod
- 流式传输 pod 日志(标准输出)kubectl logs -f my-pod -c my-container
- 流式传输 pod 容器日志(stdout,multi-container 案例)kubectl logs -f -l name=myLabel --all-containers
- 流式传输标签名称=myLabel (stdout) 的所有 pods 日志
可以找到更多相关信息 here
- 使用 kubectl wait 再试一次,但要使用
--for=condition=xxxxx
等适当的标志 一条成功消息将打印到标准输出,指示何时满足指定条件。
我们最终使用了三个命令来完成任务。首先,我们删除旧作业(之前可能有 运行),创建新作业,等待它完成(超时),完成后,我们打印日志:
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