什么是软件容器?最流行的应用程序调度和编排工具

云原生应用程序的标志之一是它具有高度的错误恢复能力,同时提供多种可扩展性选项。这是唯一可能的,因为云环境使开发人员能够部署和管理整个容器集群。对于只有几个容器的小型应用程序,管理不是什么大问题——但随着应用程序的扩展,它们的编排和调度变得越来越重要。

什么是软件容器?最流行的应用程序调度和编排工具-南华中天

虽然我们在关于 DevOps 景观的综合指南中已经触及了这个主题,但本文将详细阐述调度和编排的工作原理。有多种工具可以帮助您编排应用程序服务器,消除部署大量容器带来的大部分复杂性。但在我们开始之前,让我们先解释一下容器在 DevOps 世界中扮演的重要角色。

什么是软件容器?

作为包括微服务和 DevOps 在内的现代软件开发的关键组成部分,如果不深入研究容器的概念,就无法理解应用程序的调度和编排。根据标准的Docker 定义:“容器是一个标准的软件单元,它将代码及其所有依赖项打包在一起,因此应用程序可以快速可靠地从一个计算环境运行到另一个计算环境。”

简而言之,容器是一个小型的独立软件包,包含运行应用程序所需的一切;代码和所有其他依赖项(例如系统工具、库和运行时等等)。它的核心优势是体积小,允许您将大量容器打包到一台计算机上,所有容器都在共享操作系统内核上运行。

在容器出现之前,同样的工作是由虚拟机完成的,它不仅将应用程序代码及其依赖项打包在一起,而且还运行一个隔离的操作系统。这意味着许多操作系统内核将在一台服务器上运行,彼此不知情。除此之外,整个过程有时由主机操作系统管理。

由于这些虚拟机在模拟服务器上运行,因此存在与该过程相关的各种困难。与容器相比,虚拟机通常是影响整体系统性能的开销,导致企业每美元的性能较低。使用容器,您只需打包应用程序代码、相关库及其依赖项。此外,唯一的操作系统是主机的操作系统,这意味着容器可以直接与操作系统通信,而不会产生不必要的开销。

容器有几个好处

容器的最大好处之一是它们为开发人员简化了软件部署。通过将基本要素与代码打包在一起,开发人员可以更轻松地知道他们的应用程序软件将执行,而不管它部署在何处。

容器也是被称为“微服务”的新应用程序开发趋势的核心部分。容器不是独立的整体应用程序,而是允许您将应用程序分解为松散耦合的微服务,这些微服务通过不可知的 API 接口相互通信。微服务架构可以带来大量好处,我们的微服务软件架构风格概述中对此进行了介绍。但是由于它们的体积小,一个全尺寸的应用程序需要大量的容器来运行——因此,有许多需要管理的移动部件。这就是应用程序调度和编排的用武之地。

应用编排和调度

应用程序编排,通常称为容器编排,是一种非常流行的技术,被世界各地的开发团队用来管理数量极其庞大的容器。Devopedia将容器编排定义为:“……一个自动化基于容器的应用程序的部署、管理、扩展、网络和可用性的过程。”容器管理涉及大量任务,例如供应、管理、扩展和网络等等。对于具有五个容器的应用程序,开发团队可能能够有效地管理这些任务;但是大型应用程序从数千个容器中获取数据。通过编排,开发人员可以自动化简化整个流程的各种工作。

值得注意的一点是,调度通常被视为整个容器管理范围的一部分,而一些专家将其视为一个单独的容器原则。根据微软的说法,“调度意味着管理员能够在集群中启动容器,因此它们也提供了一个 UI。”容器调度程序有很多职责,从最有效地利用资源到确保跨不同节点或主机的有效负载平衡。由于它们靠近集群,它们通常被同等对待。事实上,流行的容器编排工具也提供了调度能力。

它是如何工作的?

有效编排容器的第一步是确定正确的工具。著名的名字包括 Docker Swarm 和 Kubernetes,但我们稍后会谈到它们。

首先我们来分析一下应用编排和调度过程是如何工作的:

  • 一旦您确定了您的编排工具,下一步就是描述应用程序的配置。这可以在 JSON 或 YAML 文件中完成。
  • 配置文件有一个重要的用途;它将容器编排工具定向到存储图像和日志的位置。此外,它还协助工具完成如何挂载存储卷以及如何建立容器内网络的过程——这个位置通常是一个私有注册表。
  • 编排工具将在复制组中进一步将它们部署到主机服务器上。这可确保在检查预定义的先决条件(例如 CPU 内存要求)后自动安排集群内发生的任何新部署。
  • 部署到主机后,编排工具可确保使用配置文件中规定的条件和规定来管理容器的生命周期。

通常,开发团队会在将相同的应用程序部署到生产环境之前,尝试通过在各种测试环境中部署相同的应用程序来控制配置文件。借助容器编排工具,开发人员可以自由选择部署位置。这些工具可以在各种环境中运行,从本地服务器和本地机器到公共云基础设施提供商。

最流行的应用程序调度和编排工具

市场上有很多应用程序调度和编排工具,各有优缺点。以下是主导软件开发市场的前三名的概述:

库伯内斯

Kubernetes 已成为软件开发行业的基准编排工具之一。它的起源可以追溯到谷歌,最初是搜索引擎巨头“Borg 项目”的迭代。此外,它还是著名的Cloud Native Computing Foundation的核心,该基金会得到 Google、Amazon Web Services、Microsoft、IBM、Intel、Redhat 和 Cisco 等计算巨头的支持。

Kubernetes 的标志仍然是它允许开发人员交付 PaaS(平台即服务)的能力,这有助于创建硬件抽象层,而它能够跨领先的云平台和本地服务器运行是另一个加分项。这允许团队轻松地跨不同平台移动工作负载,而无需投资于应用程序重新设计。

Kubernetes 的主要组件包括:

  • 集群:一组节点,通常由一个主节点领导。其他节点(worker)可以是虚拟机也可以是物理机。
  • Kubernetes master:根据定义的策略,master 跨所有节点管理应用程序实例——从部署到调度。
  • Kubelet:每个节点都运行一个称为 Kubelet 的代理进程,它从 API 服务器获取所有相关信息。
  • Pod:最基本的单元,可能由位于同一主机上的多个容器组成;每个 pod 都有一个唯一的 IP 地址。
  • Deployments:描述 Pod 和容器实例数量的 YAML 对象
  • ReplicaSet:您希望在集群中运行的副本数量只能由 ReplicaSet 定义。如果运行 Pod 的节点发生故障,ReplicaSet 可以确保在可用节点上进行调度。

码头群

它是另一种流行的编排工具,提供与 Docker 的完全集成。它不如 Kubernetes 复杂,是刚开始使用容器编排的开发人员的绝佳选择。简而言之,Docker Swarm 由于与平台的固有集成,使工程师能够更轻松、更快速地进行容器部署。尽管如此,Dockers 提供了两者——它自己的编排工具“Swarm”和 Kubernetes——希望让它们成为免费的。

Swarm 的主要组件包括:

  • Swarm:一组节点,通常伴随着一个主节点。每个节点表示一台机器,无论是虚拟的还是物理的。
  • 服务:管理员列出的绑定在代理节点上的每个任务都是一项服务。它有助于描述节点将使用哪些容器映像以及将在每个容器中执行哪些命令。
  • 管理器节点:顾名思义,管理器会忽略集群的交付和状态。
  • 工作节点:经理分配的任务由工作人员接收。每个节点向主节点报告,而管理器只跟踪任务。
  • 任务:在 Docker 环境中,“任务”是执行服务中列出的命令的容器。一旦工人有任务,就不能重新分配。此外,如果任务在副本集中失败,则会将任务的新版本分配给下一个可用的工作人员。

阿帕奇月

Mesos 由加州大学(伯克利分校)制造,比 Kubernetes 存在的时间更长。它以为开发人员提供高级可扩展性的轻量级应用程序而闻名。一个典型的 Mesos 可以运行超过 10,000 个节点——这还不包括它允许独立发展的框架。此外,它还支持多种流行的编程语言,例如 Java、C++ 和 Python。需要注意的是,Mesos 仅提供集群管理解决方案。因此,开发人员必须构建整个框架以启用容器的编排——一个流行的例子包括Marathon。

Mesos 的关键组件包括:

  • 主守护进程:监督工作节点的主节点。
  • Agent Daemon:编排框架下发的每一个任务都由Agent完成。
  • Framework:编排平台,使其能够从集群管理器(Mesos)接收资源并发送要执行的任务。
  • Offer:与通过 Mesos 发送到编排框架的代理节点有关的信息。
  • Task:根据资源offer需要完成的工作。

应用编排工具的好处

最终,编排工具承担了许多以前会让开发人员忙得不可开交的流程;有了这些,资源就可以专用于更重要的任务。

以下是应用程序编排工具的一些好处:

可运输性

现代工具允许在不影响应用程序其余部分的情况下扩展特定的应用程序组件。

快速部署

面对增加的流量?编排工具可以帮助您快速创建新的容器化应用程序。

提高效率

通过自动执行多项核心任务,您可以减少人为错误的可能性。有了这样一个简化的安装过程,您的软件开发团队的工作效率就会提高。

高度安全

通过应用程序的容器化,这些工具允许您共享资源而不会危及数据的安全性。

结论

软件开发行业已迅速转向采用容器模型,因为它允许他们简化整个部署过程。但软件容器的成功在很大程度上得益于允许用户自动化容器管理的高级编排工具的出现。在 Kubernetes 继续主导行业的同时,还有许多其他工具也具有不同的优势。最终,适合您的选择取决于您的要求以及最能满足这些要求的工具。