当我们谈论DevOps时,我们通常指的是管理软件交付,而不是基础设施。但是,整个系统的完整性与基础设施的完整性紧密相关。您有多少次听到“但在我的系统上它可以工作”?或者,也许一个理解有偏差的管理员更改了生产服务器的配置,导致事情不再正常工作。因此,至关重要的是将基础设施纳入到经过验证的DevOps实践中,即一致性、可追溯性和自动化。
本文建立在我之前的文章《持续基础设施:另一种CI》的基础上。虽然那篇文章介绍了基础设施自动化和将基础设施作为CI流水线的一等公民,使用了基础设施即代码和不可变基础设施的原则,但本文将探讨通过自动化实现 CIi(基础设施的持续集成)流水线的工具。
镜像烘焙
实现一致性基础设施的第一步是以可读、可维护和可扩展的格式定义它。这使得从配置创建机器成为可能——这个过程被称为烘焙。下面介绍一个开源的基础设施管理和烘焙工具。
Packer 使得以人类可读的、类似 JSON 的格式定义基础设施配置成为可能。Packer 可以为多个平台烘焙镜像,包括 AWS、VMware、VirtualBox 等。借助开源插件模型,社区正在添加更多平台。
开源配置工具
烘焙之后的下一步是创建 VM(虚拟机)——这个过程被称为配置。以下是一些开源配置工具:
Heat 是 OpenStack 套件的一部分,用于管理基础设施生命周期,因此它与基于 OpenStack 的完整开源云生态系统非常契合。虽然仍在发展中,但 Heat 旨在提供人类可读的配置脚本和 REST API,同时尝试保持与 AWS 的兼容性以实现可移植性。
SparkleFormation 是一个项目,旨在为当今可用的众多云平台(包括 AWS、Azure、Google Cloud 和 OpenStack)提供通用的 API。虽然 SparkleFormation DSL 使得定义基础设施即代码 (IaC) 成为可能,但其 CLI 工具为远程编排提供了命令行界面。
Terraform 使用 Packer 烘焙的镜像在多个云平台上配置 VM。与 Packer 类似,Terraform 使用 provisioners 模型进行社区扩展。
开源配置管理工具
虚拟机创建并运行后,可能仍然需要进行补充配置,以确保没有配置漂移。以下是一些开源配置管理工具:
Ansible 是一种无代理的软件配置、配置管理和应用程序管理工具,它主要通过 SSH 将模块(要部署的软件打包为幂等模块)部署到节点(服务器)。
Chef 是一种配置管理工具,它使用以 Ruby DSL 编写的系统配置脚本(称为 recipes)来管理和配置服务器应用程序。Chef 支持客户端-服务器和独立模式。在客户端-服务器模式下,Chef 提供了一个集中管理的服务端和 API。
Puppet 是一种配置管理工具,它使用以原生声明式语言或 Ruby DSL 编写的配置文件(称为 Puppet manifests)以用户友好的高级资源术语指定系统配置。Puppet 也支持客户端-服务器和独立模式。
SaltStack 是一种配置管理软件和远程执行引擎。SaltStack 设计为动态、模块化和可扩展的。它使用 Python 模块来管理远程执行和状态管理。
这些是一些流行的开源工具,它们在程序化和配置编排方面得到了强大的个人社区支持。所有这些工具都与云平台无关。其中几个还支持客户端-服务器模式,这使得集中编排和监控服务器集群成为可能。
用于基础设施配置的技术
使用这些工具,可以设置和配置基础设施。然而,有一种不断发展的现代方法是使用容器技术。简单来说,容器是轻量级的迷你虚拟机,软件及其环境捆绑在一起。
Linux 容器是一种流行的开源技术,可以使用配置脚本以编程方式创建容器。容器已经存在相当长一段时间了,但它们真正进入人们的视野是随着开源项目 Docker 的出现。容器使得创建具有定义配置的镜像并将镜像保存到中央存储库成为可能,管理员可以按需启动和停止它们。有关 Docker 的详细介绍,请阅读《什么是 Docker?》。
值得注意的是,Docker 不仅仅是一项技术,而是一个管理容器的完整生态系统。还有许多其他工具和技术可以帮助自动化容器。Kubernetes 是最流行的容器编排工具之一。Kubernetes 提供了构建中到大型规模的容器无关基础设施的能力。您可以通过本教程学习使用 Kubernetes 的基础知识。
开源使 DevOps 基础设施成为现实。为什么不立即使用开源的力量自动化您的基础设施呢?
3 条评论