观察 Kubernetes 作业输出直到完成

Watch Kubernetes job output until completion

有没有办法使用 kubectl 查看作业的输出(STDOUT 和 STDERR)?我们需要等待作业完成并观察其输出,如果作业完成时出现错误,则应中断整个过程。

我想将作业输出(STDOUT 和 STDERR)重定向到我当前的进程 STDOUT。我想等待工作完成。如果它以错误结束,当前进程(通过 kubectl 触发作业)也应该以错误结束。我知道 kubectl wait 但据我所知,它不支持监听作业输出。

您可以尝试几个选项:

  1. 实时查看作业日志:
    • kubectl logs --follow $POD

如果你找不到合适的 pod 比先去 kubectl describe job $JOB Pod 名称将在 "Events"

  1. 这里还有一些有用的 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

  1. 使用 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