Logo
Section 1 / 7

基础设施即代码简介

讨论基础设施即代码的原因及演进过程。

导入

基础设施即代码简介

讨论基础设施即代码的原因及演进过程。

朝着基础设施即代码迈进

使用供应商提供的浏览器控制台创建集群,而不是使用 Terraform 这类能让基础设施以代码形式管理的工具,是否存在问题?我们认为是有问题的。下面我们来详细探讨这一点。

UI 与 CLI 的对比使用

我们来讨论一下用户界面(UI)和命令行界面(CLI)在管理集群时的使用方式,以及它们各自存在的问题。

...
UI vs. CLI

使用 UI 创建集群

在浏览器中点击按钮、填写表单,容易导致流程未被记录且无法复现。相比之下,我们更希望将所做的操作文档化,以便日后查阅。同时,我们也希望同事能了解我们的操作,从而实现协作。此外,我们还希望整个过程尽可能高效。

在基于网页的控制台中进行临时操作,完全无法满足上述需求。若要记录步骤,我们可能需要编写 Wiki 页面。但很快就会发现,写一条如“执行 aws …”这样的命令,远比撰写包含“前往某页面”、“在此字段填入某值”、“点击该按钮”等繁琐描述的文档更简单,而这些文档往往还附带截图。

我们真正想要的是:将创建和管理基础设施的指令定义为代码(IaC),使其可执行、存储在 Git 中,并能在每次提交变更时自动运行。

从 UI 到 CLI

既然网页 UI 不适合管理基础设施,那使用命令行呢?确实,CLI 可以完成我们所需的所有任务。我们可以用 gcloud 处理所有与 GCP 相关的操作,用 aws 处理 AWS 任务,Azure 也能通过 az CLI 完全覆盖。虽然这些方案比反复点击鼠标要好得多,但在本章中我们会看到,它们同样不是理想的选择。

...
从基于网页的控制台迈向 CLI

使用 CLI 创建集群

初看之下,使用 CLI 似乎是个不错的选择。例如,我们可以仅通过执行以下命令就创建一个完整的 Google Kubernetes Engine(GKE)集群:

1gcloud container clusters create

但问题是,这个命令不具备幂等性。下次需要升级集群时,命令会完全不同。此外,CLI 通常缺乏依赖管理功能,我们必须确保命令按正确的顺序执行。它们也没有状态管理机制,难以判断哪些操作已完成、哪些尚未执行。更重要的是,它们无法在执行前展示将要应用的变更内容。

CLI 命令常常做不到的事情还有很多。如果我们的唯一选择只有在 UI 中点点点,或者手动输入 CLI 命令,那么后者显然更好。但事实上,我们还有其他更好的选择。

开始之前

过去的难题