1.4.1 自动化
自动化是云原生的核心原则。其思想是将重复的手动任务自动化,以加快云原生应用程序的交付和部署。可以自动化执行许多不同的任务,从构建应用程序到部署应用程序,从基础架构资源调配到配置管理。自动化最重要的优点是它使流程和任务可重复,整体系统更稳定可靠。手动执行一项任务容易出错,而且成本较高。通过使其自动化,您可以更可靠和更高效地得到结果。
云计算模型的特点是,提供的计算资源都在自动化的自助服务模式中,并具有弹性地增加或减少计算资源的能力。云基础设施的两大自动化类别:资源调配和配置管理。我们把它们称为: 架构即代码(infrastructure as code)
和 配置即代码(configuration as code)
。
Martin Fowler 将 架构即代码
定义为:“像任何软件系统的代码一样,通过源代码定义计算和网络基础设施的方法”。
云服务商提供方便的 API 来创建和配置服务器、网络和存储。通过使用 Terraform
之类的工具自动化这些任务,将代码置于源代码控制中,使用与应用程序开发相同的测试和交付实践,您可以获得更多可靠的基础设施,可再生、更高效、风险更低。一个简单的例子:一个自动化的任务可能是创建一个新的虚拟机,它有 8 个 CPU,64GB 内存和 Ubuntu 20.04 LTS 操作系统。
配置计算资源后,您可以管理它们并自动配置它们。套用前面的定义,配置即代码
是像任何软件系统的代码那样,通过代码定义配置资源。
使用 Ansible
等工具,您可以用声明的方式编写服务器或网络的配置。例如,在上面设置 Ubuntu 服务器之后,您可以自动完成安装 Java 运行时环境(JRE)16.0.1、Python 3.7、在防火墙打开端口 8080 和 8443。这也适用于应用程序的配置。
通过自动化所有任务,来处理与基础架构资源调配和配置管理相关的工作,您可以避免不稳定、不可靠的 雪花服务器(snowflake server)
(每一片雪花都是独一无二的,参考 SnowflakeServer )。如果手动配置、管理每个服务器,结果将是一个独一无二的 雪花
:一个脆弱的、独特的服务器,无法复制,任何更改都有风险。自动化有助于避免这种情况,有利于生成 凤凰服务器(phoenix servers)
(凤凰涅槃,浴火重生,参考 PhoenixServer):在这些服务器上执行的所有任务都是自动化的,每个更改都可以在源服务器中跟踪控制、降低风险,并且每个设置都是可复制的。将这一概念发挥到极致,实现所谓的 不可变服务器
(参考 ImmutableServer),CNCF 在其云原生中也提到了这一点,来定义不可变的基础设施。
初始资源调配和配置后,不可变服务器
不再更改:它们是不变的。如果需要任何更改,则修改其定代码并提交。一个新的服务器最终根据新代码进行设置和配置,而上一个服务器被销毁。
在下一节中,我将讨论构建和部署应用程序的自动化。