Docker生态系统:计划和编排

介绍

Docker工具提供了构建,上传,下载,启动和停止容器所需的所有功能。 它非常适合在具有最少数量容器的单主机环境中管理这些进程。

然而,许多Docker用户正在利用该平台作为一种工具,轻松地在许多不同的主机上扩展大量的容器。 集群Docker主机提出了特殊的管理挑战,需要不同的工具集。

在本指南中,我们将讨论Docker调度程序和编排工具。 这些代表了分布式部署管理员的主要容器管理接口。

计划容器,协调和集群管理

当应用程序在多个主机系统上扩展时,管理每个主机系统并抽象出底层平台的复杂性的能力变得有吸引力。 编排是一个广义术语,指容器调度,群集管理,以及可能还有其他主机的配置。

在此环境中,“调度”是指管理员将服务文件加载到建立如何运行特定容器的主机系统上的能力。 虽然调度是指加载服务定义的特定动作,但是在更一般的意义上,调度程序负责挂接到主机的init系统中,以便以所需的任何容量管理服务。

集群管理是控制一组主机的过程。 这可能涉及从群集中添加和删除主机,获取有关主机和容器的当前状态的信息,以及启动和停止进程。 集群管理与调度密切相关,因为调度程序必须能够访问集群中的每个主机,以便调度服务。 出于这个原因,相同的工具经常用于这两个目的。

为了在整个集群中的主机上运行和管理容器,调度程序必须与每个主机的各个init系统进行交互。 同时,为了便于管理,调度程序提供了整个集群中服务状态的统一视图。 这最终像集群范围的初始化系统一样运行。 为此,许多调度程序镜像它们正在抽象的init系统的命令结构。

调度器的最大责任之一是主机选择。 如果管理员决定在群集上运行服务(容器),则调度程序通常会自动选择主机。 管理员可以可选地根据其需要或期望提供调度约束,但是调度器最终负责在这些需求上执行。

调度程序如何进行调度决策?

调度程序通常定义默认调度策略。 这确定在没有来自管理员的输入时如何调度服务。 例如,调度器可以选择在具有最少当前活动服务的主机上放置新服务。

调度程序通常提供覆盖机制,管理员可以使用该机制微调选择过程以满足特定需求。 例如,如果两个容器应该始终在同一主机上运行,​​因为它们作为一个单元运行,那么通常可以在调度期间声明该亲和性。 同样地,如果两个容器不应放置在同一主机上,例如,以确保在同一服务的两个实例的高可用性,这也可被定义。

调度器可以注意的其他约束可以由任意元数据表示。 单个主机可以由调度器标记和定向。 这可能是必要的,例如,如果主机包含应用程序所需的数据量。 可能需要在群集中的每个单独主机上部署某些服务。 大多数调度程序允许您这样做。

调度器提供哪些群集管理功能?

调度通常与集群管理功能相关,因为这两个功能都需要能够在特定主机和整个集群上运行。

集群管理软件可用于查询有关集群成员的信息,添加或删除成员,甚至连接到单个主机以进行更细粒度的管理。 这些功能可以包括在调度器中,或者可以是另一过程的职责。

通常,集群管理也与服务发现工具或分布式键值存储相关联。 这些特别适合于存储这种类型的信息,因为信息散布在集群本身中,并且平台已经存在用于其主要功能。

因此,如果调度程序本身不提供方法,则可能必须通过使用提供的API修改配置存储中的值来完成某些集群管理操作。 例如,可能需要通过对发现服务的原始更改来处理集群成员资格更改。

键值存储通常也是可以存储有关各个主机的元数据的位置。 如前所述,标记主机允许您将个人或组定位为计划决策。

多容器部署如何适应计划?

有时,即使应用程序的每个组件已经分解为离散服务,它们应该作为一个单元进行管理。 有时,由于每个提供的功能,没有其他服务而没有部署一个服务是没有意义的。

考虑到容器分组的高级计划通过几个不同的项目可用。 用户从访问此功能获得了很多好处。

组容器管理允许管理员将容器集合作为单个应用程序处理。 运行紧密集成的组件作为一个单元简化了应用程序管理,而不会牺牲单独功能的隔离的好处。 实际上,它允许管理员保留从容器化和面向服务的架构获得的收益,同时最小化额外的管理开销。

将应用程序分组在一起可以简单地将它们调度在一起,并提供同时启动和停止它们的能力。 它还可以允许更复杂的场景,例如为每组应用程序配置单独的子网或扩展整组容器,我们以前只能在容器规模上扩展。

什么是配置?

与集群管理相关的概念是配置。 配置是使新主机联机并以基本方式配置它们以使其准备就绪的过程。 对于Docker部署,这通常意味着配置Docker并设置新主机以加入现有集群。

虽然配置主机的最终结果应该是新的系统可用于工作,但是该方法取决于所使用的工具和主机的类型而显着不同。 例如,如果主机将是一个虚拟机,像工具vagrant可用于旋转了一个新的主机。 大多数云提供商允许您使用API​​创建新的主机。 相比之下,裸硬件的供应可能需要一些手动步骤。 可能涉及配置管理工具,如Chef,Puppet,Ansible或Salt,以便负责主机的初始配置,并为其提供连接到现有群集所需的信息。

配置可以留作管理员启动的过程,或者可能将其挂接到集群管理工具中以进行自动缩放。 后一种方法涉及定义请求额外主机的过程以及自动触发该条件的条件。 例如,如果您的应用程序遇到严重负载,您可能希望您的系统启动其他主机,并横向扩展容器跨新的基础设施,以缓解拥塞。

什么是一些常见的计划表?

在基本调度和集群管理方面,一些流行的项目是:

  • Fleet :FleetCoreOS的调度和集群管理组件。 它从etcd中读取集群中每个主机的连接信息,并提供类似systemd的服务管理。
  • 马拉松 :马拉松是一个Mesosphere安装的调度和服务管理组件。 它与mesos一起使用以控制长时间运行的服务,并为进程和容器管理提供一个web UI。
  • :Docker群是宣布Docker项目2014年12月它希望提供一个强大的调度程序,可以旋转起来容器与Docker置备的主机,使用Docker母语语法调度。

作为集群管理策略的一部分,Mesosphere配置依赖于以下组件:

  • mesos:Apachemesos是一种工具,抽象和管理所有主机的资源在集群中。 它将整个集群中可用的资源集合提供给在其上构建的组件(如马拉松)。 它将自身描述为类似于集群配置的“内核”。

在高级调度和控制容器作为一个单位的方面,以下项目可用:

  • kubernetes:谷歌的高级调度,kubernetes允许对你的基础架构上运行的容器有更多的控制。 可以对容器进行标记,分组,并给定自己的子网进行通信。
  • 组成 :Docker Compose项目是创建允许使用声明的配置文件容器组管理。 它使用Docker链接来了解容器之间的依赖关系。

结论

集群管理和工作调度程序是在分布式主机上实施容器化服务的关键部分。 它们提供了实际启动和控制提供应用程序的服务的主要管理点。 通过有效地利用调度程序,您可以非常轻松地对应用程序进行大幅度更改。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏