全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
容器服务

运行离线任务

更新时间:2017-07-07 16:23:14

容器服务抽象出离线计算的基本模型,推出了基于 Docker 容器的离线计算功能。

其核心功能包括:

  • 作业编排
  • 作业调度与生命周期管理
  • 存储与日志等功能的集成

基本概念

下表中列出了离线应用与在线应用的概念对比。

概念 离线应用 在线应用
容器 任务执行单元 服务的执行单元
运行历史 任务出错重试的执行历史
服务(任务) 一个特定的功能,可以分割成若干个容器来执行 一组功能相同的容器
应用(作业) 若干个任务的组合 若干个服务的组合

简言之,一个离线作业包含若干个任务,每个任务可以由若干个容器来执行,每个容器可以有多个运行历史;而一个在线应用包含若干个服务,每个服务可以有若干个容器同时服务。

基于 Docker Compose 的作业编排

和在线应用一样,您可以使用 Docker Compose 来描述和编排作业。Docker Compose 支持 Docker 的绝大部分功能,比如:

  • CPU、内存等资源限制
  • 数据卷(Volume)
  • 环境变量与标签
  • 网络模型、端口暴露

除此之外,阿里云容器服务还扩展了以下功能:

  • 容器数量:每个任务分成多少个容器
  • 重试次数:每个容器重试多少次
  • 移除容器:容器运行完后是否删除,可选策略包括 remove-finished(删除完成的容器)、remove-failed(删除失败的容器)、remove-all(删除全部容器)、remove-none(不删除)。
  • DAG 模型的任务依赖:同一个作业的任务之间可以有依赖关系,被依赖的任务会先执行。

离线作业的 Docker Compose 示例:

  1. version: "2"
  2. labels:
  3. aliyun.project_type: "batch"
  4. services:
  5. s1:
  6. image: registry.aliyuncs.com/jimmycmh/testret:latest
  7. restart: no
  8. cpu_shares: 10
  9. mem_limit: 100000000
  10. labels:
  11. aliyun.scale: "10"
  12. aliyun.retry_count: "20"
  13. aliyun.remove_containers: "remove-all"
  14. s2:
  15. image: registry.aliyuncs.com/jimmycmh/testret:latest
  16. cpu_shares: 50
  17. mem_limit: 100000000
  18. labels:
  19. aliyun.scale: "4"
  20. aliyun.retry_count: "20"
  21. aliyun.remove_containers: "remove-finished"
  22. aliyun.depends: "s1"

注意:

  • 该功能只支持 Docker Compose 2.0。
  • 您需要在作业级别添加标签 aliyun.project_type: "batch"。如果您未添加该标签或标签值不为 batch,则认为该应用为在线应用。
  • 无论您将 restart 设置为什么值,都会被修改为 no
  • 您可以用 aliyun.depends 标签指定依赖关系。可以依赖多个任务,用逗号(,)分隔。
  • aliyun.retry_count 的默认值为 3。
  • aliyun.remove_containers 的默认值为 remove-finished

作业生命周期管理

容器状态由容器的运行及退出状态决定;任务状态由该任务中所有容器的状态决定;作业状态由该作业的所有任务决定。

容器状态

  • 运行中(Running):容器在运行。
  • 完成(Finished):容器退出且 ExitCode==0
  • 失败(Failed):容器退出且 ExitCode!=0

任务状态

  • 运行中(Running):有容器在运行。
  • 完成(Finished):所有容器都完成了。
  • 失败(Failed):有容器失败次数超过给定值。

作业状态

  • 运行中(Running):有任务在运行。
  • 完成(Finished):所有任务都完成了。
  • 失败(Failed):有任务失败了。

上述状态都可以通过 API 获取,方便您自动化运维。

共享存储

容器之间、任务之间会有数据共享和交换,共享存储可以解决这一问题。比如在 Hadoop上跑 MR 作业,是通过 HDFS 来交换数据的。在容器服务中,可以使用三类共享存储,其特性及应用场景对比如下所示。

存储 优点 缺点 适用范围
OSSFS 数据卷 跨主机共享 读写、ls 性能低;修改文件会导致文件重写 共享配置文件;附件上传
阿里云 NAS 数据卷 跨主机共享;按需扩容; 高性能、高可靠性;挂载速度高 成本略高 需要共享数据的重 IO 应用,如文件服务器等;需要快速迁移的重 IO 应用,如数据库等
您自己集成成三方存储,如 Portworx 将集群内的云盘虚拟成共享的大磁盘;性能高;snapshot、多拷贝 需要一定运维能力 同 NAS

具体使用数据卷的帮助,可以参考以下文档:

集成日志和监控服务

日志和监控是分析离线作业的重要工具。阿里云容器服务集成了阿里云日志服务与云监控功能,只要在编排模板中添加一个标签,就可以将日志收集到日志服务,将容器的 CPU、内存等数据收集到云监控。具体使用方便请参考下面的文档。

操作步骤

  1. 登录 容器服务管理控制台 并创建一个集群。

    有关如何创建集群的详细信息,参见 创建集群

  2. 单击左侧导航栏中的 应用 并单击右上角的 创建应用

  3. 设置应用的基本信息,单击 使用编排模板创建

  4. 填入上文中的编排模板并单击 创建并部署

  5. 单击 应用 并单击创建的应用的名称,可以查看应用的运行状态,如下图所示。

    离线任务状态

本文导读目录