“一切皆代码”,即“Everything as Code”,又称为“X as Code”,是一个将所有配置项代码化描述的理念。
配置项代码化后,可以很容易地与源码共同管理,并使用同一个版本控制系统软件,从而减少配置管理的复杂性。
Infrastructure as Code(IaC)
要从DevOps开始说起。从持续集成到持续部署再到开发运维一体化,贯穿的一个核心理念就是尽可能地自动化,让自动化成为开发人员的得力助手。
于是,从最初的自动化编译构建,逐渐延伸到自动化部署环境、自动化测试。
这就需要通过工具能够自动化地创建和配置基础设施环境。
这些工具如 Ansible、Puppet、Chef 等,就践行了“基础设施即代码”(Infrastructure as Code,IaC)的理念。将环境的最终状态使用代码化的方式进行描述,由工具来保证一致性。
这个阶段大约是 2010 年前后。
X as Code
受到上述实践的启发以及更高的自动化流水线理想,数据库、软件配置参数、流水线、文档、环境监控等方面都开始尝试代码化描述。统称为“X as Code”,又称为“一切皆代码”(Everything as Code)。
这其中,容器化与 K8s 的流行也起到了助推作用。
代码化的最显著好处是可以使用一套版本控制软件来管理所有的配置项,从而减少配置管理的复杂性。
- 统一了基线管理方法;
- 可以文字化比较差异;
- 可以使用文本编辑器编辑。
小结
- EaC 是伴随 DevOps 而生的理念,旨在通过代码化的方式解决配置管理的复杂性问题,同时方便自动化。
2 EaC的目标是配置项即源码,可不是任意代码,随意保存一个不可识读或编辑的文本不能算作是真的做到代码化
- EaC 理念是好的,但本质上是工作量的转移。要小心巨量的杂乱配置代码冲击配置管理,产生新的“屎山”。(这篇文章中提到了相同的观点)