在短短几年中,容器戏剧性地改变了软件组织构建、发布和维护应用程序的方式。

集装箱平台,引领着看似无处不在的潮流码头工人,现在被用于打包应用程序,以便它们可以访问物理或虚拟主机操作系统上的特定资源集。在微服务体系结构中,应用程序被进一步分解为不同的离散服务,每个服务都打包在单独的容器中。这样做的好处,特别是对于坚持持续集成和持续交付(CI/CD)实践的组织来说,就是容器是可伸缩的和短暂的——托管在容器中的应用程序或服务的实例,可以根据需要来去。

但是可伸缩性是一个操作上的挑战。

如果您有10个容器和4个应用程序,那么管理容器的部署和维护并不困难。另一方面,如果您有1000个容器和400个服务,管理就会变得复杂得多。当您进行大规模操作时,容器编排(自动化容器的部署、管理、扩展、联网和可用性)就变得至关重要。

那么,什么是容器编排?

容器编排是关于管理容器的生命周期的,特别是在大型的动态环境中。软件团队使用容器编排来控制和自动化许多任务:

  • 容器的供应和部署
  • 容器的冗余性和可用性
  • 扩展或删除容器,以便在主机基础架构中均匀地分布应用程序负载
  • 容器从一个主机移动到另一个主机,如果一个主机资源短缺,或如果一个主机死亡
  • 在容器之间分配资源
  • 与外部世界一起在容器中运行的服务的外部公开
  • 容器之间服务发现的负载平衡
  • 容器和主机的运行状况监视
  • 应用程序与运行它的容器之间的配置

容器编排如何工作?

当您使用容器编排工具时,例如Kubernetes.或者码头工人群(更短暂的),您通常在yaml或JSON文件中描述应用程序的配置,具体取决于Orchestration工具。这些配置文件(例如,docker-compose.yml)是您告诉Orchestration工具在其中收集容器图像(例如,来自码头工人中心),如何建立容器之间的网络,如何挂载存储卷,以及在哪里存储日志的容器。通常,团队将对这些配置文件进行分支和版本控制,以便在将相同的应用程序部署到生产集群之前,能够跨不同的开发和测试环境部署相同的应用程序。

容器部署到主机上,通常在复制组中。当它是时候将新容器部署到群集中时,容器编排工具会调度部署并查找最合适的主机以基于预定义的约束(例如,CPU或内存可用性)放置容器。您甚至可以根据标签或元数据将容器放置,或根据其与其他主机相关的邻近 - 可以使用各种约束。

一旦容器在主机上运行,业务流程工具将根据容器定义文件(例如its)中列出的规范管理其生命周期dockerfile.)。

容器编排工具的美妙之处在于,您可以在任何可以运行容器的环境中使用它们。容器现在几乎在任何环境中都得到支持,从传统的内部服务器到运行在其中的公共云实例亚马逊网络服务(AWS),谷歌云平台(GCP),或微软Azure。此外,大多数容器编排工具都是基于Docker容器构建的。

Kubernetes:金本位

最初由谷歌作为its的一个分支开发Borg项目, Kubernetes已经将自己确立为事实上的容器编排标准。这是我们的旗舰项目云本地计算基础它得到了谷歌、亚马逊网络服务(AWS)、微软(Microsoft)、IBM、英特尔(Intel)、思科(Cisco)和红帽(RedHat)等关键参与者的支持。

Kubernetes继续受到DevOps实践者的欢迎,因为它允许他们交付为开发团队创建硬件层抽象的自助平台即服务(PaaS)。Kubernetes也非常便携。它运行在亚马逊网络服务(AWS),微软Azure,谷歌云平台(GCP),或在现场安装。您可以移动工作负载,而不必重新设计应用程序或完全重新考虑基础设施——这有助于在平台上标准化并避免供应商锁定。

Kubernetes的主要架构组件包括:

集群。集群是一组节点,至少有一个主节点和几个工作节点(有时称为助手),这些节点可以是虚拟机或物理机。

Kubernetes主人。主节点管理跨节点的应用程序实例的调度和部署,主节点运行的全部服务集合称为控制平面。主节点通过Kubernetes API服务器。调度程序根据您定义的资源和策略约束分配给Pods(一个或多个容器)的节点。

Kubelet。每个Kubernetes节点运行一个称为kubelet的代理进程,该进程负责管理节点的状态:根据来自控制平面的指令启动、停止和维护应用程序容器。kubelet从Kubernetes API服务器接收所有信息。

豆荚。基本调度单元,由一个或多个容器组成,保证在主机上共存并能够共享资源。每个pod在集群中被分配一个唯一的IP地址,允许应用程序不冲突地使用端口。您可以通过YAML或JSON描述pod中容器的理想状态对象称为PodSpec。这些对象通过API服务器传递给kubelet

部署,副本和复制品。部署是一个YAML对象,它为每个pod定义pods和称为replicas的容器实例的数量。您可以通过部署对象的一部分ReplicaSet定义希望在集群中运行的副本的数量。因此,例如,如果运行pod的节点死亡,复制集将确保在另一个可用节点上调度另一个pod。

Docker Swarm:一个勇敢的小玩家

尽管Docker完全接受了Kubernetes作为集装箱编配引擎的首选,公司还提供自己的完全集成的集装箱编配工具Swarm。与Kubernetes相比,它的可扩展性和复杂性略低,但对于希望通过更简单、更快的方式实现容器部署的Docker爱好者来说,它是一个不错的选择。事实上,Docker将Swarm和Kubernetes都捆绑在了其中企业版希望它们能成为互补的工具。

Swarm的主要架构组件包括:

群。像Kubernetes中的集群一样,集群是至少有一个主节点和几个工作节点的节点集,这些节点可以是虚拟机或物理机。

服务。服务是集群管理员定义的管理节点或代理节点必须在集群上执行的任务。服务定义了集群应该使用哪些容器映像,以及集群将在每个容器中运行哪些命令。这种情况下的服务类似于微服务;例如,您可以在这里定义配置参数nginxweb服务器在你的集群中运行。您还可以在服务定义中为副本定义参数。

管理器节点。当您将应用程序部署到集群中时,管理器节点提供了几个功能:它将工作(以任务的形式)交付给工作节点,并且它还管理它所属的集群的状态。管理器节点可以运行与工作器节点相同的服务,但是您也可以将它们配置为只运行与管理器节点相关的服务。

工作者节点。这些节点运行由集群中的管理节点分配的任务。每个工作节点运行一个代理,该代理向主节点报告分配给它的任务的状态,因此管理节点可以跟踪集群中运行的服务和任务。

任务。任务是Docker容器,它执行你在服务中定义的命令。管理器节点向工作节点分配任务,在此分配之后,任务不能移动到另一个工作节点。如果任务在副本集中失败,管理器将把该任务的新版本分配给集群中的另一个可用节点。

Apache Mesos(和Marathon):复杂但灵活

Apache便,比Kubernetes稍早一些,它是一个开源软件项目,最初在the加州大学伯克利分校,但现在广泛采用的组织,如推特,优步和贝宝。Mesos的轻量级接口让它可以轻松扩展到10,000个节点(或更多),并允许在其上运行的框架独立发展。它的api支持Java、c++和Python等流行语言,还支持开箱即用的高可用性。然而,与Swarm或Kubernetes不同的是,Mesos只提供集群管理,因此许多框架都建立在Mesos之上,包括马拉松,一个“生产级”的容器编排平台。

Mesos的主要架构组件包括:

主守护进程。管理代理守护进程的主节点的一部分。与Apache管理员时,可以创建Mesos主仲裁(至少由三个主节点组成),以实现高可用性目的。

代理守护进程。执行框架发送的任务的主节点的另一部分(在这种情况下,马拉松)。

框架。Mesos不运行应用程序编排工作负载;相反,Marathon从Mesos master接收资源(以offer的形式),而Marathon根据资源offer发送任务给执行者,执行者在代理上启动任务。

提供。Mesos master收集有关代理节点CPU和内存可用性的信息,并将这些信息发送给Marathon,以便Marathon知道有哪些资源可用。

任务。这些是基本单位的工作,马拉松时间表基于资源提供从Mesos大师。任务由代理节点上的executor执行。

然后,Marathon提供必要的服务发现、负载平衡(使用HAproxy)、集群资源管理、应用程序(即容器)部署和用于管理工作负载的api。

容器编排平台:让其他人为您管理Kubernetes

如前所述,Kubernetes是当前容器编排工具的明确标准。因此,主流云服务提供商提供大量Kubernetes-as-a-Service也就不足为奇了:

Amazon Elastic Container Service for Kubernetes (Amazon EKS)

亚马逊的完全抽象了Kubernetes集群的管理、可伸缩性和安全性,甚至跨多个区域,这样您就可以严格地专注于应用程序和微服务。EKS集成了流行的开源Kubernetes工具和大量的AWS工具,包括Route 53、AWS应用程序负载均衡器和自动伸缩。管理Amazon EKS的团队是Kubernetes项目的定期贡献者。

谷歌云Kubernetes引擎

像亚马逊这样的,Kubernetes引擎管理你的Kubernetes基础设施,这样你就不必这么做了。谷歌作为Kubernetes的最初开发人员,对在生产环境中运行基于Kubernetes的容器有丰富的经验。Kubernetes引擎运行在谷歌的网络上,并在高可用性配置中使用例行的健康检查和自动扩展,以满足应用程序上的任何需求。

Azure Kubernetes服务(AKS)

是Azure的Kubernetes管理解决方案。通过AKS,您可以使用Azure的Active Directory保护集群,并在Azure的海量数据中心中部署应用程序。Azure还提供了自己的容器注册中心和供应门户。Kubernetes的狂热者可能已经知道,布伦丹·伯恩斯他是Kubernetes的联合创始人,正在引领Azure容器工作的潮流。

那么我该如何选择呢?

与大多数新兴的技术一样,集装箱编排工具具有他们的利弊。管理Kubernetes的平台,来自Google,Azure和AWS,提供了非常少量的开销功能。另一方面,Kubernetes,Swarm和Mesos / Marathon应根据架构,HA需求,灵活性和学习曲线等因素进行评估。

举个例子来说,Swarm拥有一个非常简单的架构,并直接嵌入到Docker生态系统中,而Kubernetes,特别是Mesos,则具有更强的可扩展性;事实上,在Mesos集群中,你可以将容器化的应用程序部署在传统虚拟机中运行的应用程序旁边。也就是说,Swarm可能适合较小规模的部署,几乎不需要扩展。另一方面,Mesos可以扩展到数万个节点,Kubernetes就紧随其后。另一方面,《Swarm》的学习曲线非常低;Mesos和Marathon都可能需要您的组织有一定程度的专业化。

最后,除了这里讨论的容器编排工具外,还有大量与Kubernetes和Mesos相关的第三方工具和软件。(例如,Kubernetes和中间层DC /操作系统便)。

艾萨克·埃尔德里奇(Isaac Eldridge)是New Relic的技术内容编辑。查看贴子

有兴趣为New Relic博客写作吗?亚搏体育登入网给我们发一份建议书!