一切皆代码 (EaC) 的兴起
近年来,一种名为“一切皆代码”(Everything as Code, EaC) 的新兴理念,因多种相互关联的因素汇聚而迅速发展。
随着“基础设施即代码”(Infrastructure as Code, IaC)的出现和 DevOps 运动的兴起,“一切皆代码”成为一个热门术语。 这标志着 IT 运维/系统管理员开始协同工作,使用可复用的代码来自动化修改 IT 环境。随后,这些代码像开发人员管理应用程序代码变更一样,进行版本控制。
为何推崇一切皆代码?
如今,大多数组织都高度依赖复杂的系统。 单台服务器已无法满足需求,必须应对法规、全球化和共享硬件等挑战。
IT 堆栈的许多部分都外包给了“即服务”的公司。 微服务与连接众多系统的 API 变得越来越普及。
为了满足不同国家/地区的需求并确保合规性,基础设施管理至关重要。 然而,这种复杂性使得手动管理 IT 变得困难。
我们需要一种方法来管理日益增长的技术堆栈,以维持组织的正常运转。 我们借鉴了开发人员的方法论,它涉及编程、工具和自动化,统称为“代码”。
什么是“一切皆代码”?
“一切皆代码”指的是将系统的所有组件都视为代码。 这意味着可以将源代码和配置存储在 Git 或 SVN 等代码仓库中。
此外,配置可以自上而下存储(例如,通信交换机、裸机服务器、操作系统、构建配置、应用程序属性、部署配置等),所有这些都可以追踪并方便地重建。
“一切皆代码” (EaC) 还包括以代码形式存储的系统设计。 在传统的 IT 世界中,基础设施是必不可少的。 它需要特殊的技能、物理硬件和电缆才能正确安装。 这些系统要么价值极高,要么很少像负责人当初设计的那样进行更新。
云计算和云原生应用程序使得创建虚拟基础设施变得简单且经济实惠。 配置虚拟环境的代码可以存储在代码中,从而可以随时重复使用。
对于开发人员和 IT 工程师而言,EaC 是一种强大的工具。它允许以可重复且可扩展的方式处理任务,例如管理应用程序部署或供应基础设施,而这些任务如果手动完成则会非常繁琐。
EaC 不仅能使开发人员和 IT 工程师更高效地工作,对他们也有益。 他们还可以使用相同的工具和配置文件在多个环境中扩展其操作。 此外,使用“一切皆代码”方法可以降低人为错误的风险。
当所有工作流程都以代码形式定义时,工程师不再需要担心遗漏某些内容或意外点击错误的按钮。 EaC 还使审计变得更加容易,因为可以使用 EaC 配置来确定对系统所做的操作。
“一切皆代码”如何流行起来?
“一切皆代码” (EaC) 近年来兴起,得益于多种相关因素的融合。 其中一个原因是工具供应商更倾向于支持所有内容都以代码的形式呈现。
因此,如果开发人员或 IT 工程师更喜欢使用代码文件来管理所有内容,他们就会采用一种“EaC 优先”的工具配置和部署方法。 Kubernetes 就是一个很好的例子。
Kubernetes 虽然可以通过 Web 界面进行管理,但其设计初衷是通过代码文件进行管理。 大多数公共云服务和 CI 服务器也是如此。 它们可能具有可选的图形前端,但在通过代码管理时效果最佳。
许多管理和开发工具在通用配置格式上达成了一致,这也推动了 EaC 的发展。 几乎所有与 EaC 兼容的工具都使用 YAML 和 JSON 作为其配置语言。
由于格式的标准化,从业人员可以使用相同的配置文件格式和方法来管理他们所有的工具。 EaC 管理和构建整个应用程序交付网络的能力有助于提高其知名度。
过去,EaC 仅能处理 CI/CD 工作流程中的部分工具,而现在 EaC 的应用呈指数级增长,可以通过代码管理所有工具。 这样可以消除其他工具和流程,使用单一方法集中所有操作。
EaC 的核心概念并不新颖,它已经以孤立的形式存在了一段时间。 现在,它被广泛用作某些 DevOps 工作流程的解决方案。
“一切皆代码”的优势
技术团队在 IT 运维中采用“一切皆代码”方法的原因有很多:
一致性
管理员可以在各种环境中使用统一的配置。 无论是配置基础设施、CI/CD 工具还是云访问控制策略,工程师都可以通过将所有内容都视为代码来避免配置不一致的问题。
版本控制
管理员可以监控配置如何随时间变化,并确保它们受版本控制。 这类似于源代码。 可以查看在问题发生之前做了哪些更改,或者在需要时恢复到早期版本。
可扩展性
管理员可以根据需要将配置应用于任意数量的进程或资源。 这对于随着时间的推移而扩展的运维来说是一个优势。 IT 团队可以使用代码创建配置,允许他们添加特定资源或流程的实例,而无需重新配置每个实例。
可审计性
管理员可以通过审核代码文件来自动检查配置资源,这比手动验证每个资源高效得多。
可移植性
将所有内容都视为代码的 IT 团队会发现,使用与供应商无关的代码来定义他们的配置,比使用不同供应商的配置工具管理它们更容易。
例如,Selenium 是一个开源的测试自动化框架,可用于创建软件测试脚本。 因此,管理员可以快速地将测试环境从本地迁移到云端,而无需更新或学习新的工具。
如何应用“一切皆代码”?
以下是将所有内容都视为代码的不同方法:
基础设施即代码
“基础设施即代码”是运维和开发人员使用代码为其基础设施定义所需状态的方法。 这意味着可以定义需要配置的基础设施,然后可以根据需要修改基础设施。
安全即代码
“安全即代码”可以带来更安全的系统。 这在自动扫描安全漏洞并在必要时自动更新方面尤其明显。 此方法可用于管理 IT 部门的安全性。
这也适用于管理不同的合规/监管要求。 例如,可能需要向欧洲用户展示与美国用户不同的内容,这可以通过“代码化”的方法自动完成。
架构即代码
“架构即代码”(AaC) 允许定义运行业务应用程序所需的所有组件,并将其部署到不同的环境(开发/测试、生产)。 这是一种代码命令式方法,允许版本控制、审查、修改和修订。
测试即代码
“测试即代码”是测试自动化的完美示例。 可以通过使用测试脚本来自动化业务逻辑操作和 UI 交互。
部署即代码
现代部署管道就是一个很好的例子。 这里的“现代”指的是可以被视为代码的管道,它们作为软件组件进行管理、更新和维护。 代码用于创建高级 CI/CD 管道,包括基本的和高级的。
计划实现“一切皆代码”时需要注意的事项
- 它使 IT 工程师和软件开发人员更容易、更高效地工作。
- 要将公司中的所有内容都视为代码,必须转变思维模式。
- 团队的努力对成功至关重要。
- 最具吸引力的功能之一是能够遵循高质量的程序和流程。
- 测试基础设施代码具有一定难度,需要自动化测试。
- 不能在一个文件中为所有环境(开发、阶段和生产)定义所有基础设施。
结论
“一切皆代码” (EaC) 是一种使用代码来管理 IT 资源的软件开发和 DevOps 方法。 EaC 在“基础设施即代码”、“配置即代码”和其他 IT 领域有广泛的应用。
尽管对许多组织而言,“一切皆代码”可能是一个有希望的最终目标,但将平台的部分内容转换为 EaC 存在机会成本,需要权衡利弊。 平台中总会存在一些从 EaC 方法中获益的部分,关键在于识别这些区域,以便合理分配资源。