如何获取由 cronjob 创建的作业日志?

Lei*_*ang 8 cron kubernetes

似乎kubectl logs不支持cronjob。它说

错误:无法从 *v1beta1.CronJob 获取日志:未实现 *v1beta1.CronJob 的选择器

目前我一一查看所有相关作业的日志。

有没有简单的命令或工具来获取这些日志?


我对 bash 脚本进行了一些研究,并修改了edbighead 的答案以更好地满足我的需求。

# cronJobGetAllLogs.sh: Get all logs of a cronjob.
# example:
# ./cronJobGetAllLogs.sh [Insert name of cronJob]

jobs=( $(kubectl get jobs --no-headers -o custom-columns=":metadata.name" | awk "/$1-[0-9]+/{print \$1}" | sort -r ) )
for job in "${jobs[@]}"
do
    echo Logs from job $job
    pod=$(kubectl get pods -l job-name=$job --no-headers -o custom-columns=":metadata.name")
    kubectl logs $pod
done
Run Code Online (Sandbox Code Playgroud)

# cronJobGetLatestLog.sh: Get log of latest job initiated by a cronjob.
# example:
# ./cronJobGetLateestLog.sh [Insert name of cronJob]

job=$(kubectl get jobs --no-headers -o custom-columns=":metadata.name" | awk "/$1-[0-9]+/{print \$1}" | sort -r | head -1)
pod=$(kubectl get pods -l job-name=$job --no-headers -o custom-columns=":metadata.name")
kubectl logs $pod
Run Code Online (Sandbox Code Playgroud)

edb*_*ead 14

来自CronJobsJobs 的文档

Cron 作业按基于时间的计划创建作业

...

一项作业创建一个或多个 Pod,并确保指定数量的 Pod 成功终止。

您只需要查看为作业创建的 pod 的日志。

  1. 找到你的工作kubectl get jobs。这将返回带有时间戳的 CronJob 名称

  2. 查找已执行作业的 pod kubectl get pods -l job-name=your-job-@timestamp

  3. 使用kubectl logs your-job-@timestamp-id查看日志

这是一个 bash 脚本示例,它执行上述所有操作并为每个作业的 pod 输出日志。

jobs=( $(kubectl get jobs --no-headers -o custom-columns=":metadata.name") )
for job in "${jobs[@]}"
do
   pod=$(kubectl get pods -l job-name=$job --no-headers -o custom-columns=":metadata.name")
   kubectl logs $pod
done
Run Code Online (Sandbox Code Playgroud)