在阿里云容器服务中运行离线作业

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 目前在在线应用,Docker容器已经成为执行层的事实标准,有大量云服务商提供容器云服务。但在离线计算领域,还很少有服务商提供这样的能力。而离线计算在实际生产中使用很广,小到一个脚本任务,大到大数据分析。因此,阿里云容器服务抽象出离线计算的基本模型,推出了基于Docker容器的离线计算功能

目前在在线应用,尤其是无状态的在线应用领域,Docker容器已经成为执行层的事实标准,有大量云服务商提供容器云服务。但在离线计算领域,还很少有服务商提供这样的能力。

但离线计算在实际生产中使用很广,小到一个脚本任务,大到大数据分析;而且离线计算对资源隔离、环境隔离的需求更高,这正是docker容器的优势。因此,阿里云容器服务抽象出离线计算的基本模型,推出了基于Docker容器的离线计算功能。其核心功能是:

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

基本概念

首先介绍一下离线计算的基本概念。下表中列出了离线与在线应用的概念对比。

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

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

基于DockerCompose的作业编排

跟在线应用一样,我们使用DockerCompose来描述和编排作业。DockerCompose支持Docker的绝大部分功能,比如:

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

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

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

下面是一个离线作业的DockerCompose示例。

version: "2"
labels:
  aliyun.project_type: "batch"
services:
  s1:
    image: registry.aliyuncs.com/jimmycmh/testret:latest
    restart: no
    cpu_shares:  10
    mem_limit: 100000000
    labels:
      aliyun.scale: "10"
      aliyun.retry_count: "20"
      aliyun.remove_containers: "remove-all"
  s2:
    image: registry.aliyuncs.com/jimmycmh/testret:latest
    cpu_shares:  50
    mem_limit: 100000000
    labels:
      aliyun.scale: "4"
      aliyun.retry_count: "20"
      aliyun.remove_containers: "remove-finished"
      aliyun.depends: "s1"

需要注意的几点是:

  • 只支持version2的docker compose
  • 需要在作业级别添加标签 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

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

集成日志和监控服务

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

操作步骤

首先打开容器服务控制台https://cs.console.aliyun.com/,并创建一个集群。

第二步,选择应用->创建应用->使用模板创建,填入上文中的编排模板,并创建应用。

第三步,选择应用->您的应用,可以查看应用的运行状态,如下图所示。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
Oracle 关系型数据库 数据库
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
268 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
3月前
|
Docker 容器
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
|
3月前
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
68 6
|
3月前
|
Linux 开发者 Docker
如何构建在 Docker 容器中运行命令?
【1月更文挑战第6天】
58 0
|
27天前
|
弹性计算 缓存 Kubernetes
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
|
1月前
|
JavaScript Shell Docker
|
2月前
|
Kubernetes 关系型数据库 数据库
运行在容器中 Postgres 数据库数据损坏后如何恢复?
运行在容器中 Postgres 数据库数据损坏后如何恢复?
|
2月前
|
Kubernetes 监控 Cloud Native
阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)考试大纲
介绍阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)所需具备的知识及学习方法等。
173 2

相关产品

  • 容器计算服务