如何通过Docker 进行容器编排

或许最佳方式是将它们看成饲养宠物与饲养牛。人们会想许多额外措施让他们的宠物活着并保持健康,这与管理员想尽办法认真照看高端服务器一样。但是在农场里,死牛只是被视为生意成本中的一部分,在当今的云世界中也是一样,应用被设计可以容错,一台服务器发生故障并没有什么大不了的。

如何通过Docker 进行容器编排_第1张图片

现代应用编排工具的一个作用是监视虚拟服务器和/或容器情况,确保它们正在正常运行中。当一台服务器出现故障,它们会迅速实例化一台新虚拟机,甚至是一台新容器。整个过程不需要系统管事员介入,因为整个程序是自动化运行的。我们甚至不知道是哪台服务器或是容器(或是两者的组合)在运行我们的应用。

自动化IT长期以来一直是一个梦想,但是如今的工具化正在将这一梦想变为现实。如果我们正在使用云级应用,尤其是扩展后的微服务进行工作,那么这种工具化将十分关键。

针对数据中心的操作系统

这是数据中心操作系统理念发挥作用的地方。单个服务器不再重要,除非它们是计算、存储或网络组件。应用开始依赖于虚拟机或是容器,并成为了主要的管理组件。

我们正在通过管理整个数据中心来替代管理单个服务器,并将它们分解成支持不同应用的必须条件,用以创建开发、测试和部署环境,同时不再需要了解底层硬件情况。这与我们以前用于管理服务器和应用的方式有着很大的变化。它们标志着一个新时代的开始,为特定工作负载配置硬件已经过时了。

编排的一个重要理念是动态部署应用和服务,以利用可用的计算资源。对于分布式自动化计算来说,编排是一个重要的工具。它们通过应用定义和清单来决定主机和工作负载的部署位置,通过管理扩展和确定故障服务器,以让服务能够被正确处理。

谷歌的Kubernetes和Apache的Mesos项目或许是最知名的编排解决方案,但是它们距离那些可用的解决方案还有很大的差距。它们都属于综合性工具,需要我们在技能和资源方面投入大量资金,它们最适合于大规模部署的情况。

作为一种选择,小型企业开始向私有云[注]转型,这些私有云包含了由微软OpenStack和VMware提供的编排功能。尽管如此,目前大量机构仍在测试这种用于交付下一代应用的程序和工具。

通过Docker进行管理

这些工作需要一套工具。这些工具要能够从一台或是两台服务器扩展至一个机架或是两个机架,直至整个数据中心。在这种方案中,Docker将包含Machine、Swarm和Compose等容器自动化工具。

Machine是Docker自动化工具的核心,因为它们能够让安装和配置主机服务器的程序实现自动化。通过Docker的API,我们只需要使用一个命令即可建立一个主机服务器,配置底层Docker Engine,以及安装客户端工具。它们还可以将主机附加至现在的Swarm集群中或是从零开始创建一个新的集群。此外,我们还能够使用由不同云服务提供商提供的容器,通过命令行将主机安装在选定的云环境中。

一旦我们实现了创建容器主机的自动化,开始使用Docker Engine(+微信关注网络世界),那么我们就能够将这些主机整合至使用Docker集群工具的计算框架中。Swarm被设计为通过与标准Docker Engine实例相同的API向容器提供一个可扩展性环境。如果我们已经在开发环境中运行Docker,那么我们就可以通过安装Swarm进行快速扩展,并继续使用现在的开发工具和程序。嵌入式的调度器将把容器分配给单个Docker Engine节点,以支持有助于优化部署的多个不同策略。

创建一个Swarm很容易,就如同在现有集群中增加一个新引擎一样。我们可以使用Machine实现新引擎的自动创建或是与Docker API协作提供一个关于可用节点的索引。由于Swarm可以识别和管理注册过的主机,因此我们的一个选项是通过Docker Hub注册表以简化发现过程。

Compose是一个较为复杂的工具。它们可与YAML协作创建应用摘要,显示一个应用中的多个容器彼此之间的联系。YAML具有重要意义,因为当我们为API查找Swagger 时,它们可让我们访问相同的工具以描述我们的应用。一旦我们为应用创建了一个摘要以及它们的创建方式,我们只需要一行脚本即可启动应用。

保持简洁

Docker编排工具最有意思的地方可能是它们非常简洁。这三个工具都只需要非常简单的命令。通过Jenkins等工具,我们可以很容易地为它们编写脚本,或是在Puppet 或Chef等环境中管理它们。如果以现有的Docker API为基础进行创建,那么它们还可以很容易地管理和控制分布式环境,简化由开发向生产的转型过程。

Docker工具可与Kubernetes等数据中心管理工具及公有云[注]提供的工具协同工作。通过综合运用Machine、Swarm和Compose,在应用由从在单个服务器上进行开发和测试到在Azure或AWS上完整运行云服务的过程中,我们都能够可以与这些应用进行协作。

开发者不需要知道他们正在向哪些东西提供容器。它们看起来像是一个Swarm,即便它们运行在一个云规模的Mesos部署上也是如此,而这种抽象就是云的精髓之所在。


本文作者:范范

来源:51CTO

你可能感兴趣的:(如何通过Docker 进行容器编排)