怎么优化集群上大量 crontab 执行问题

4 月 1 日
 LaLy

目前业务上存在大量的 crontab 每分钟任务执行,现在是单个 pod 里面跑了很多个同类型任务的容器,最多的是 10 个任务在同一个 pod 里面,任务一跑起来,CPU 就告警了,已经做了资源限制,但还是撑不住 10 个一起跑起来。

当前想到的办法是,一个任务一个 pod,这样拆分出来,大概会有一百多个 pod,感觉资源也是占用比较多的。还有一个钟方法就是一个 pod 容器里面跑多条任务,顺序执行,如果这样,其中一个任务有问题就全挂了。

想请教下大佬们,还有什么更好的解决办法吗

3161 次点击
所在节点    Kubernetes
13 条回复
laminux29
4 月 1 日
任务一跑起来,CPU 就告警了
===========================
为什么任务跑起来 CPU 就要告警? CPU 运行负载时,CPU 使用率有增长,这难道不是正常现象?
julyclyde
4 月 1 日
感觉是监控报警条件的设置有问题
你明知它会是锯齿状,但仍然选择了对尖峰情况进行报警

几个建议:
1 不要在整分钟启动任务,而是选择把多个任务加随机秒数延迟再开始运行
2 不要对尖峰情况进行报警,试试改为(超高+持续)
3 把定时任务单独搞一组机器运行,不要和日常负载混在一起
yinmin
4 月 1 日
#2 正解。

crontab 配置任务时,每分钟任务分别错峰设置为 0 秒启动、第 10 秒启动、第 20 秒启动…

对于其他的按小时、按天启动的任务,设一个随机分钟和秒数启动。例如:每天凌晨 1:00 运行的任务改成 1:06:29 启动运行。
QHKZ
4 月 1 日
任务多了就上队列,成熟的框架策略比 cron 多的多。
c1985382
4 月 1 日
@QHKZ 是指 APScheduler 之类的吗?还有别的更好的吗?
RadishWind
4 月 1 日
这种其实已经超出了 cron 的适用范围了, 可以考虑上分布式的定时任务调度
LaLy
4 月 1 日
@laminux29 这些任务都是很快跑完的,但持续这样,会影响对异常告警的判断
LaLy
4 月 1 日
@julyclyde 谢谢,我尝试下加延迟,看下能不能降低
LaLy
4 月 1 日
@QHKZ 让开发改感觉太难了
gyl1989113
4 月 1 日
上 k8s,然后用 k8s 的 crontjob
hxy100
4 月 1 日
轻度问题加延迟,重度问题加个中心队列容器,排队执行,再怎么多都能解决。
LaLy
4 月 2 日
@gyl1989113 我就是 k8s 上的,如果是独立部署我就忽略了
LaLy
4 月 2 日
@hxy100 这个中心队列容器怎么实现的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1202721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX