云原生是当今技术中最流行的术语之一,而且它只会越来越流行。事实上,根据谷歌趋势,“云原生”一词在 2019 年 10 月刚刚达到最高关注度。部分流行可以归因于营销热议,但云原生令人兴奋的是草根支持。如此多的开发人员和组织正在接受云原生的承诺并帮助开发生态系统。因此,今天有各种各样的工具构成了云原生景观。在他们的交互式地图中,云原生计算基金会 (CNCF) 将这些工具分为几类。
在这里,我们将仔细研究其中一个类别:云原生应用程序定义和映像构建。这些工具提供“黄金图像”和权威的应用程序定义,以简化定义和扩展云原生应用程序的过程。为了满足云原生空间的需求,这些工具需要轻量级、可扩展且敏捷。到本文结束时,您将了解什么是云原生应用程序定义和映像构建、它们的优势以及该类别中一些最流行工具的详细信息。
什么是云原生应用定义和镜像构建?
云原生应用定义和镜像构建是自动化应用交付的重要部分。图像和应用程序定义为您提供了部署和扩展云原生微服务的来源。镜像是为容器和虚拟设备部署提供权威来源的二进制文件。应用程序定义定义了应用程序所需的所有资源。因此,开发人员可以从以编程方式进行的可重复部署中获益。这些图像和应用程序定义的描述可能有点抽象,所以让我们分别仔细看看。
应用程序定义速成班
正如 Puppet 在其文档中所描述的那样,应用程序定义有两部分:应用程序组件和服务资源。应用程序组件是在您的云原生应用程序中启用特定功能的代码块。如果您正在创建 LAMP/LEMP 堆栈,您可以为数据库、Web 服务器、CMS(内容管理系统)和负载平衡器创建离散组件。
另一方面,服务资源抽象出模块依赖性并支持应用程序内节点之间的数据传输。例如,如果您创建云原生 LAMP/LEMP 应用程序,服务资源使您的数据库和应用程序能够进行通信。应用程序定义是一种以编程方式定义这两个部分之间的数据流和依赖关系的方法。因此,它们允许您抽象出复杂性并轻松扩展配置。
了解机器映像和容器映像
CNCF 的 Cloud Native Landscape 包括用于构建机器映像和容器映像的工具。如果您曾经使用过虚拟设备,您应该熟悉机器映像的概念。与应用程序定义一样,机器映像支持部署预配置资源。但是,他们这样做的方式不同。机器映像将操作系统、程序包和服务捆绑在一起作为一个映像。OVA、Amazon 机器映像和 VMDK 是您可能熟悉的机器映像的常见示例。容器镜像类似,但不需要操作系统。打个比方:容器镜像之于容器,就像 OVA 之于虚拟设备。例如,当您使用 docker run 命令时,您是从运行在底层操作系统内核之上的 Docker 映像创建一个容器。
云原生应用定义和镜像构建的好处
您现在应该了解什么是云原生应用程序定义和映像构建。现在,让我们探讨一下为什么它是 Cloud Native Landscape 的重要组成部分。在本节中,我们将探讨云原生应用程序定义和映像构建工具的优势。
可扩展的部署
使用云原生应用程序,您需要快速启动微服务。您还必须能够迭代和重复地执行此操作。一般来说,微服务可以帮助您实现这些目标。但是,您需要明确定义的权威参考,以可靠的方式以编程方式部署微服务。云原生应用程序定义和镜像构建工具可帮助您解决该问题。使用正确的工具,您可以定义多容器应用程序并大规模部署它。
改进的 CI/CD
快速实例化图像的能力大大改进了测试和开发工作流程。应用程序定义和映像构建类别中的工具有助于确保向测试人员和其他开发人员部署相同的应用程序。因此,整体 CI/CD 管道得到改善。例如,您可以显着减少创建隔离开发环境所需的时间。同样,像 Docker Compose 这样的工具可以帮助您快速启动图像、测试它并在需要时终止它。
松耦合
松散耦合是使微服务具有弹性和可扩展性的重要组成部分。云原生应用程序定义有助于松耦合离散服务。假设您使用 MySQL 作为应用程序的数据库组件。假设您的 CMS 和数据库使用“Sql”服务资源进行通信。现在,假设您的团队决定从 MySQL 切换到 Postgres 数据库。由于服务资源提供的抽象,您可以这样做而不必担心对 CMS 组件的修改。
降低复杂性
云原生应用程序定义和图像构建工具为您的图像和应用程序定义创建“单一真实来源”。因此,您可以消除与大规模管理微服务相关的大部分复杂性。版本控制、更新和回滚变得更易于管理。
部署到多个环境
为云原生构建的图像通常可以在多个公共和私有云平台以及裸机上实例化。这种独立于平台的映像构建方法提高了灵活性并减少了供应商锁定。它还允许您快速为客户创建演示,并在您最初没有考虑的环境中使用您的图像。
流行的云原生应用定义和镜像构建服务
我们无法推荐一种放之四海而皆准的云原生应用程序定义和映像构建工具。您需要了解您的环境需求并为工作选择合适的工具。CNCF的交互式云原生景观页面是您研究的一个很好的起点。但是,要整理的内容可能很多。为了帮助您进行搜索,我们仔细研究了列表中一些最受欢迎的项目。
舵
Helm已经成为云原生界的热门项目。它得到了开发者社区的支持,包括来自 Microsoft、Google 和 Samsung SDS 等公司的开发者。此外,Helm 由 CNCF 自己维护。Helm 可帮助您简化定义、安装和升级 Kubernetes 的过程。Charts是精选的应用程序定义,是使 Helm 如此强大的重要组成部分。Charts 允许您对复杂的云原生应用程序拥有单一的授权点。他们还提供大规模可重复的应用程序安装。如果您想深入了解图表主题,请查看Helm 文档中的此页面。
码头工人组成
Docker Compose是云原生应用程序定义和镜像构建类别中最受欢迎的工具之一。借助 Compose,您可以使用 YAML 文件配置多容器应用程序。然后,您只需执行 docker-compose up 命令即可启动并运行您的应用程序。传统上,Compose 在测试自动化和开发环境中很有用。但是,它的功能集正在发展,以至于单主机部署已成为其常见用例列表的一部分。
人居经理
Chef Habitat是一个独立于平台的应用程序生命周期管理工具,构建时考虑到了云原生。借助 Habitat,您的应用程序以一种允许您轻松部署、更新和扩展它们的方式进行编码。
Habitat 将应用程序及其依赖项捆绑到轻量级和便携式单元中。从那里,您可以跨各种平台部署这些单元,从容器到裸机服务器。如果您正在寻找一种云原生应用程序定义和映像构建工具来简化遗留应用程序向云的迁移,Habitat 是一个不错的选择。
封隔器
Packer是云原生镜像构建领域中最令人兴奋的工具之一。Packer 使用单一基本配置自动执行创建相同机器映像的过程。然后,您可以将这些机器映像部署到多个平台。因此,持续交付、维护一致的开发/QA/staging/prod 环境以及创建虚拟设备是Packer 的示例用例。
当然,这些听起来都不太具有开创性。虚拟设备已经存在了一段时间。是什么让 Packer 与众不同?速度和便携性。当然,您可以使用 OVA 创建虚拟设备。但是,使用 Packer,过去需要数小时的配置过程可以减少到几秒钟。同样,传统虚拟设备的可移植性有限。使用 Packer,您可以在从 VirtualBox 到 AWS 再到 OpenStack 的任何地方进行部署。
脚手架
Skaffold是来自 Google 的开源 CLI 工具。前提很简单:您处理代码,Skaffold 会自动执行构建、推送和部署过程。Skaffold 监控您的源代码并在发生更改时启动工作流。当然,您定义什么是“可同步的”以及它的部署位置。该项目仍处于测试阶段,但前景广阔。Skaffold 可以让您更多地关注开发,而不是构建和部署过程。
最后的想法
我们希望您喜欢我们深入探讨 CNCF 的云原生景观的云原生应用程序定义和图像构建类别。该类别涵盖范围广泛的工具和功能,但您不需要列出的所有工具。重要的部分是了解哪些工具和实践对您的用例有益。