在阿里云容器服务中使用定时任务-阿里云开发者社区

开发者社区> jimmycmh> 正文

在阿里云容器服务中使用定时任务

简介: 阿里云容器服务提供高可用、分布式的定时任务服务
+关注继续查看

定时任务是常见需求。普遍的做法是,选择一台或几台机器,通过crontab实现定时任务。但是对于大规模或大量的定时任务,这种做法的缺点非常多,比如:

  • 可靠性低,一台机器宕机,该机器上的定时任务就无法执行了
  • 没有调度功能,机器之间的负载可能不均衡
  • 没有重试机制,任务可能运行失败
  • 无法运行大规模分布式任务

阿里云容器服务在离线任务的基础上,增加了定时任务的功能,通过简单的描述,解决了上述问题。关于离线任务的细节,请参考在阿里云容器服务中运行离线作业

只有10月25号之后升级了agent版本或新创建的集群才能使用该功能。

基于docker compose的定时任务描述

跟离线任务一样,定时任务也是基于docker compose的,只需要在应用模板里添加aliyun.schedule标签,如下面例子所示。

version: "2"
labels:
  aliyun.project_type: "batch"
  aliyun.schedule: "0-59/30 * * * * *"
services:
  s1:
    image: registry.aliyuncs.com/jimmycmh/busybox:latest
    labels:
      aliyun.scale: "5"
      aliyun.retry_count: "3"
      aliyun.remove_containers: "remove-all"
    command: date

其中aliyun.schedule: "0-59/30 * * * * *"表示每30秒执行一次该任务;schedule的格式跟crontab完全相同(但要注意格式是秒 分 时 天 月 星期,比linux上的crontab多了秒这一项),使用的时间为北京时间。
因为定时任务只能是离线任务,只要添加了aliyun.schedule标签,会自动添加aliyun.project_type: "batch"标签,因此上述例子中aliyun.project_type: "batch"也可以省略。

另外,离线任务中所有的功能,在定时任务中依然可用。比如scaleretry_countremove_containers等,具体含义请参考离线任务的文档。

执行过程

定时任务被创建后,应用处于“等待”状态。当任务指定的时间到达时,任务会被启动运行,其后的状态变化跟离线应用相同;下一个执行时间到达时,应用状态会重复这一过程。

同一个定时任务同一时刻只会有一个实例在执行,如果任务的执行时间大于其执行周期(比如上述任务的执行时间大于30秒),则下一次执行会进入执行队列;如果执行队列长度大于3,则会丢弃该次执行。

可以在应用详情中查看运行历史及结果,如下图所示;只保留最后10次的运行历史。

定时任务运行历史

高可用性

定时任务控制器采用主-从备模式。主控制器故障时,控制功能将切换至备用控制器。

如果任务的执行时刻正好在主从切换期间,则会延迟至切换完成后执行;如果主从切换期间同一个任务有多次执行,切换完成后只会执行一次。

一般情况下,主从切换时间是秒级,但是为了保证不丢失,请不要设置重复周期小于1分钟的定时任务。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
本地容器服务 VS 公有云容器服务
本文讲的是本地容器服务 VS 公有云容器服务【编者的话】是将容器部署到本地,还是云上,这是所有公司都会考虑的问题,这两者各有什么利弊呢,让我们逐一看看。
1890 0
我写了一个脚本,可在“任意”服务器上执行命令!
冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了。你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个相同的命令,那别说执行命令了,就是让你依次手动登录上千台服务器,那也够你受的了。估计依次登录上千台服务器,给你三天时间你可能都登不完,那怎么办呢?有没有什么好的方法来解决这个问题呢?
19 0
201604深圳云栖大会Workshop - 阿里容器服务与持续集成
目标 熟悉容器服务的基本概念 练习通过容器服务实现持续集成的过程 准备工作 容器服务控制台 容器服务控制台 镜像管理平台 阿里Code 帮助文档 产品概念解释 注意事项:预计耗费的费用 容器服务暂时不收费;演示过程中会创建ECS实例和SLB,按量收费。 步骤 1. 创建集群
5525 0
如何使用Terraform管理容器服务Kubernetes集群之-标准版集群
#### 介绍 Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。关于 Terraform 的基本介绍本文不再赘述,有兴趣的同学可以参考 [《云生态下的基础架构资源管理利器Terraform》](https://yq.aliyun.com/articles/215592) 等云栖社区的优秀文章。
985 0
使用SQL Server 2005作业设置定时任务
原文:使用SQL Server 2005作业设置定时任务 公司有一个老项目由于直接把终端拍摄的图片以二进制的形式保存到数据库中,数据库比较大所以需要经常删除这些冗余数据,手动删除费时费力,项目组长让我把这些操作变成自动的,每天执行一次,只保留最近两个月的图片数据。
638 0
ShareDrop – 苹果 AirDrop 服务的 HTML5 实现
  ShareDrop 是苹果 AirDrop 服务的 HTML5 版本,你可以直接在设备之间传输文件,而无需先上传到任何服务器。它使用 WebRTC 来实现安全的点对点文件传输。目前 ShareDrop 只允许您发送文件到同一个本地网络的其他设备,即设备使用相同的公共IP地址。
993 0
使用阿里云容器服务 ACK 和文件存储 NAS 构建现代化企业应用
大规模构建容器化应用程序需要高可靠、弹性、共享且支持高性能数据处理的数据存储解决方案。通过迁移到公共云,企业可以获得更高的生产效率和更低的成本。阿里云文件存储可以为现代化应用提供强健的数据稳定性,可靠性,高性能和在线扩展能力。
1321 0
+关注
jimmycmh
阿里云技术专家,具有丰富的分布式系统、大规模数据处理方面的经验。现在专注于Docker容器的实践,尤其是基于容器的编排、调度、存储、微服务等概念的实施。
10
文章
5
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载