如何解决有没有办法获取有关 kubernetes cronjob 时间表的信息?
我想获取有关 k8s cronjob 时间的信息。 我的 k8s 程序中有很多工作。 所以很难计算他们专注于什么时间。 我想平均分配我的工作。 有没有办法计算cronjob时间或按时间排序?
解决方法
我试图找到一种合适的工具来帮助您解决问题。 不幸的是,我没有找到任何既合适又易于使用的东西。
可以使用 Prometheus + Grafana
来监控 CronJobs
,例如使用此 Kubernetes Cron and Batch Job monitoring 仪表板。
但是,我认为您不会通过这种方式找到任何有用的信息,只是一个显示集群中 CronJobs
数量的仪表板。
出于这个原因,我决定编写一个 Bash 脚本,该脚本能够以可读的方式显示最后几个 CronJobs
运行。
如Kubernetes CronJob documentation中所述:
CronJob 按重复计划创建作业。
要了解特定的 Job 运行了多长时间,我们可以检查它的 startTime
和 completionTime
,例如使用以下命令:
# kubectl get job <JOB_NAME> --template '{{.status.startTime}}' # "startTime"
# kubectl get job <JOB_NAME> --template '{{.status.completionTime}}' # "completionTime"
要以秒为单位获得 Jobs
的持续时间,我们可以将 startTime
和 completionTime
日期转换为 epoch:
# date -d "<SOME_DATE> +%s
这是整个 Bash 脚本:
注意:我们需要将命名空间名称作为参数传递。
#!/bin/bash
# script name: cronjobs_timetable.sh <NAMESPACE>
namespace=$1
for cronjob_name in $(kubectl get cronjobs -n $namespace --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'); do
echo "===== CRONJOB_NAME: ${cronjob_name} ==========="
printf "%-15s %-15s %-15s %-15s\n" "START_TIME" "COMPLETION_TIME" "DURATION" "JOB_NAME"
for job_name in $(kubectl get jobs -n $namespace --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep -w "${cronjob_name}-[0-9]*$"); do
startTime="$(kubectl get job ${job_name} -n $namespace --template '{{.status.startTime}}')"
completionTime="$(kubectl get job ${job_name} -n $namespace --template '{{.status.completionTime}}')"
if [[ "$completionTime" == "<no value>" ]]; then
continue
fi
duration=$[ $(date -d "$completionTime" +%s) - $(date -d "$startTime" +%s) ]
printf "%-15s %-15s %-15s %-15s\n" "$(date -d ${startTime} +%X)" "$(date -d ${completionTime} +%X)" "${duration} s" "$job_name"
done
done
默认情况下,此脚本仅显示最后三个 Jobs
,但可以在作业配置中使用 .spec.successfulJobsHistoryLimit
和 .spec.failedJobsHistoryLimit
字段对其进行修改(有关详细信息,请参阅 {{3 }})
我们可以检查它是如何工作的:
$ ./cronjobs_timetable.sh default
===== CRONJOB_NAME: hello ===========
START_TIME COMPLETION_TIME DURATION JOB_NAME
02:23:00 PM 02:23:12 PM 12 s hello-1616077380
02:24:02 PM 02:24:13 PM 11 s hello-1616077440
02:25:03 PM 02:25:15 PM 12 s hello-1616077500
===== CRONJOB_NAME: hello-2 ===========
START_TIME COMPLETION_TIME DURATION JOB_NAME
02:23:01 PM 02:23:23 PM 22 s hello-2-1616077380
02:24:02 PM 02:24:24 PM 22 s hello-2-1616077440
02:25:03 PM 02:25:25 PM 22 s hello-2-1616077500
===== CRONJOB_NAME: hello-3 ===========
START_TIME COMPLETION_TIME DURATION JOB_NAME
02:23:01 PM 02:23:32 PM 31 s hello-3-1616077380
02:24:02 PM 02:24:34 PM 32 s hello-3-1616077440
02:25:03 PM 02:25:35 PM 32 s hello-3-1616077500
===== CRONJOB_NAME: hello-4 ===========
START_TIME COMPLETION_TIME DURATION JOB_NAME
02:23:01 PM 02:23:44 PM 43 s hello-4-1616077380
02:24:02 PM 02:24:44 PM 42 s hello-4-1616077440
02:25:03 PM 02:25:45 PM 42 s hello-4-1616077500
此外,您可能希望创建异常和错误处理,以使该脚本在所有情况下都能按预期工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。