简单的Docker编排工具TOSCA

时下Docker编排工具一瞥

从《Docker orchestration》这篇有趣的文章中,我们要思考为什么需要编排工具?基本的前提是,编排工具扮演了创建基于应用的容器及其层依赖的时间编排的角色,也就是使容器之间能够通信、彼此可以传递运行期的属性。在此我们更深入地探讨这篇文章的观点。

今日,尚无关于容器作为可移植的部署单位的讯息。但是,通常应用由多个容器构建会增加复杂度。而且,由多个Docker镜像组建集群的方式颇为笨重,因为这需要让容器感知其他容器的存在并暴露内部信息给其需要通信的容器。这并非小事一桩,尤其是当容器分布在不同主机上时。例如,构建一个由Docker容器组成的Mongo或者Cassandra集群,需要考虑集群环境内,哪些端口需要暴露、哪些卷(volume)需要挂载(mount)等复杂信息。

这些场景驱动了一些编排工具的发展,正如这篇关于Docker容器和微服务的优秀文章提出并由这篇 InfoQ文章所引述的,列表中的容器编排工具正在快速成长。这里列出其中著名的工具(当然这不是全部)。

  • Kubernetes - Google出品的开源Docker容器编排工具,特别为微服务的编排而设计。
  • Fleet - CoreOS的Docker编排工具,为在CoreOS上安装容器而设计。
  • Docker - Docker最近公布了Docker Swarm和Compose,这是为运行Docker集群而设计的编排服务。

此外,CoreOS最近公布了Rocket,我们将有幸一窥这另一种格式的容器将如何影响编排工具的前景。

纯粹的编排标准的必要性

我们经常使用可搬运的容器(shipping containers)来形容软件容器作为标准打包单位的角色。可搬运的容器是标准化益处的极佳示例。没有标准的容器,搬运货物的场景将与今天完全不同。就可搬运的容器而言,容器的形状、体积和装配的实际标准不会受制于单一的容器厂商,而更趋向于多家厂商共存。CoreOS近期公布的Rocket只是这一趋势的首个象征。

用TOSCA来解决

TOSCA (云应用的拓扑编排标准,Topology Orchestration Specification for Cloud Applications)是由OASIS组织 (XML的制定者)管理的。从TOSCA 编排工具的跟踪记录和发展速度上看,已经发展得相当成熟,许多组织正在投注和促进其成功。 自多年前的第二版以来,TOSCA得到了长足的发展,同时在商业和开源项目中吸引眼球,博得了诸如Juju、Cloudify、IBM Cloud Orchestrator和 OpenStack Heat的芳心。同时也被电信供应商领袖阿尔卡特-朗讯、 华为和思科所采纳。

事实上,TOSCA由标准团体(OASIS)在背后支持,使其成为强大的平台来定义能够可移植于各种云环境和容器提供商的标准容器编排工具的规范。

本文将提供一个示例来展示把当前的Docker API标准映射到可移植的TOSCA标准是多么的简单,因此,我们将使用直观的声明式方式来描述复杂的基于Docker的应用拓扑。

Docker的TOSCA规划

为使初始的映射过程简单,我们使用python客户端docker-py作为如下提案的基础。

接下来是TOSCA规划的代码片段,用来描述基于Docker的MongoDB服务器--更大的应用拓扑的一部分。映射按照最新的TOSCA规范中的YAML格式和Docker容器建议的模型工具来使用TOSCA。

mongod:
    type: docker_container
    properties:
      image: dockerfile/mongodb
      command: mongod --rest --httpinterface --smallfiles
      exported_ports:
        - 27017
        - 28017
      port_bindings:
        - 27017: 27017
        - 28017: 28017
     volumes:
         - ~/my-host-dir, container-dir, rw

TOSCA格式非常类似其他类型的依赖注入,主要的不同是基于YAML并且更特定于编排领域。因此,其中包含了生命周期、关系、策略和计划,还描述了应用服务的运作方面的定义。

使用TOSCA运行简单的Docker示例

我将使用Cloudify上的开源编排工具、一个简单的TOSCA命令行分析器让你感受基于TOSCA的编排工具是如何工作的。

我们将使用基于NodeJS的web应用nodecellar示例,后台数据库使用MongoDB。每个服务将运行在独立的Docker容器中,如下图所示。

从DockerHub下载nodecellar TOSCA规划的Docker镜像,该镜像可以重用于后续的安装和卸载。从镜像启动整个应用的镜像启动约10秒左右!

示例逐步指导

示例在12.04作为底层的操作系统的环境中测试过。示例可以有两种规划实现,一种是单一主机部署,另一种是OpenStack上的集群部署。简单起见,本文重点放在单一主机部署的示例上。

通过如下步骤运行示例

搭建环境  
安装Docker |> curl -sSL https://get.docker.com/ubuntu/ \| sudo sh
使用如下命令检查安装是否正确:
> sudo docker ps
安装Cloudify |> pip install cloudify
使用如下命令检查安装是否正确:
> cfy --version
也可以使用vagrant-box获取cloudify的预配置镜像或者其他安装选项如这里所述
安装TOSCA/Docker示例  
下载示例 此处下载和解压缩示例
将当前TOSCA规划指向示例规划文件 |>cfy local init -p blueprint/docker-singlehost-blueprint.yaml -i blueprint/cfy-local-inputs.json --install-plugins
执行安装流程 |>sudo cfy local execute -w install
这个命令将在规划上执行上一步设置好的安装流程。
安装/卸载流程是每个规划的隐式工作流程之一。安装流程将遍历TOSCA依赖关系图,并按照指定的关系和依赖定义的顺序,在每个节点上执行生命周期命令。卸载流程是类似的逆操作。
在这份规划中,在第一次运行时将下载Docker镜像(这将耗时几分钟),然后运行两个Docker实例,一个是mongod实例,另一个是nodejs实例,应用和数据库会安装到对应的实例上。
检查输出 > cfy local outputs
输出应当打印出nodecellar应用的主机:端口号
打开应用 使用上一步的主机名和端口号在浏览器中打开如下链接:
http://输出的主机名:输出的端口号
注意,如果运行在vagrant-box上,应当替换默认的host_ip属性值localhost为vagrant虚拟机主机IP

写在最后

以当前IT基础设施的演进速度,可以假设我们将继续拥有多家容器供应商和编排引擎。照此观点,定义和管理容器集群的规范将会标准化,并由多家容器或编排工具的供应商支持,否则容器作为可移植的搬运单位将受到质疑。

此外,我们必须假设许多公司将全部应用都运行于容器之内的期待是不切实际的,更可能的情况是运行混合的应用。为每种应用类型设计编排引擎很容易出现运作上的噩梦,这是存在多种既支持不同容器又支持混合环境(包括基于Chef、 Puppet、SaltStack等等的非容器化服务)的独立编排引擎另一个原因。

TOSCA当前编排规范的先进性使其成为容器标准蓝图的定义的理想候选者。

拥有标准的编排格式并非考虑选择TOSCA的唯一因素,不像大多数当下基于容器的编排工具几乎完全处理初试设置和安装阶段的事情,TOSCA覆盖了整个应用的生命周期,包括部署后的事情,如监控、额外的工作流程(持续部署、水平扩展、订正)以及自动触发这些工作流程的策略,从而提供了更全面的编排定义。

这项工作的目的是为了说明使用标准的TOSCA YAML编排Docker的应用是多么简单。我希望这篇文章能为社区的讨论和头脑风暴提供良好的基础。

时间: 2024-12-02 23:34:54

简单的Docker编排工具TOSCA的相关文章

Docker编排工具Fig介绍

本文讲的是Docker编排工具Fig介绍,[编者的话]Fig是一个基于Docker的用于快速搭建开发环境的工具,目前Fig团队已经加入Docker公司.Fig通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景.Fig可以和Docker一起来构建基于Docker的复杂应用.本文详细介绍了Fig的安装以及使用. 什么是编排? 编排(译者注:Orchestration,翻译为编排)是指同时管理多个容器的行为.当你刚开始玩Docker的时候,你只需要操作一个容器.紧接着你

内置编排工具且适用于生产环境的Docker 1.12 GA了!

本文讲的是内置编排工具且适用于生产环境的Docker 1.12 GA了![编者的话]对于Docker来说,内置适用于生产环境的编排工具是件大事情.本文介绍了该内嵌编排工具的拓扑机构以及管理节点与工作节点之间通信的协议,并对该版本的内容进行总结,分别为容错.规模与性能.安全. 我们感谢社区的每一位成员帮助我们顺利到达Docker1.12这个里程碑,这个版本已经为生产环境做好了准备.1.12版本是自Docker项目开始以来特性增加最大也是最先进的一个版本.包括Docker员工和外部贡献者在内的数十位

Docker Workflow(三):编排工具

本文讲的是Docker Workflow(三):编排工具,[编者的话]要在生产环境中发挥Docker的威力,离不开编排工具的支持,否则将深陷容器监控与管理困难的泥沼.目前市面上有不少此类工具,如何选择最合适的一个,本文给出了一些参考. 这是关于我们如何在IIIEPE的生产环境中使用Docker的系列文章的第三部分.如果你还没看过第一(译文)和第二(译文)部分,请先前往阅读再继续.本文中,我将讨论我们测试过的编排工具,我们的选择及原因.我也会说明我们如何使用Jenkins来处理繁重的工作,以及它的

Docker 1.6发布:Engine与编排工具更新、Registry 2.0及Windows客户端预览

本文讲的是Docker 1.6发布:Engine与编排工具更新.Registry 2.0及Windows客户端预览,[编者的话]Docker 1.6版本发布了,一同发布新版本的还有Registry 2.0.Compose.Swarm.Machine以及Docker Windows客户端,这次的变更很赞,值得一试! 我们很高兴来宣布对Docker Engine.Registry.Compose.Swarm和Machine的更新.我们将它们同时发布,因此你可以一起测试,同时可以承载多个跨工具的特性.

Docker 1.8:可信镜像、Toolbox、Registry 以及编排工具大更新

本文讲的是Docker 1.8:可信镜像.Toolbox.Registry 以及编排工具大更新,[编者的话]1.7 发布不到一个月 1.8 就重磅来袭.生产.生产还是生产,Docker 为了让自己能更适应生产环境进行了加速奔跑,我们也需要紧随技术的步伐不断前进. 我们很高兴的宣布 Docker 1.8 的发布,最新的版本包含了对镜像签名的支持,新的安装器以及 Engine.Compose.Swarm.Machine 以及 Registry 的多项改进. 你们过去总是和我们说想要一个扩展性更好的

Docker 开源集群管理和容器编排工具 SwarmKit

最近Docker公司开源了Docker集群管理和容器编排工具SwarmKit,其主要功能包括节点发现.基于raft算法的一致性和任务调度等. 基本概念 服务器上运行SwarmKit工具的swarmd命令后,即可将其加入到服务器集群中,该服务器就成为集群中的一个节点.SwarmKit将节点分为两类: 工作节点负责通过执行器运行任务.SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor); 管理节点负责接收和响应用户的请求,将集群状态调节成最终状态

Docker 管理工具的选择:Kubernetes 还是 Swarm?

本文讲的是Docker 管理工具的选择:Kubernetes 还是 Swarm?[编者的话]选择Kubernetes 或者 Swarm 就像在将 Linux 桌面发行版的范围缩小到两个后选出一个最喜欢的.哪个更满足你的需要如何才是决定因素. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览:持续集成系统介绍:客户端与服务端的 CI/CD 实践:开发流程中引入 CI.CD:Gitl

Swarm、Fleet、Kubernetes、Mesos - 编排工具的对比分析

本文讲的是Swarm.Fleet.Kubernetes.Mesos - 编排工具的对比分析,[编者的话]此篇文章是<Using Docker>一书的作者 Adrian Mouat 编写,详细对比分析了Swarm.Fleet.K8s以及Mesos的区别. 大部分软件系统是随时间演进的,新旧功能会交替,不断变化的用户需求意味着一个高效的系统必须能够迅速扩展或收缩资源.为了达到接近零宕机的需求,一个单独的数据中心需要自动地将故障转移到预设的备份系统. 在此之上,一些大型企业经常会运行多个这样的系统或

容器集群部署 选好编排工具是关键

本文讲的是容器集群部署 选好编排工具是关键[IT168 评论]容器技术提供了组件化的环境,可以帮助业务应用在云之间轻松迁移而无需显著的返工.随着容器在企业持续获得发展,厂商将增加新的功能让用户可以创建可扩展的基于容器的环境.然而,大范围控制容器部署也会有一些并发症.容器肯定是跟资源相匹配的.这些挑战会导致集群管理和编排的并发需求. 集群管理工具是一个通过图形界面或者通过命令行来帮助你管理一组集群的软件程序.有了这个工具,你就可以监控集群里的节点,配置services,管理整个集群服务器.集群管理