3. 基础设施即代码(IaC)概述
基础设施即代码(Infrastructure as Code, IaC)是云原生时代运维与交付的核心实践。它将传统手工配置服务器、网络、存储等基础设施的操作,转变为通过代码定义、版本管理和自动化执行的过程。在《服务画像建模驱动基础设施即代码SLI口径映射方法》课程中,IaC 是连接服务画像与 SLI 口径的桥梁——只有通过 IaC 精确描述基础设施状态,才能确保 SLI 采集口径与实际运行环境一致。
3.1 IaC 的核心原则
IaC 的实践建立在三个核心原则之上,这些原则直接决定了 SLI 口径映射的可靠性与可重复性。
| 原则 | 定义 | 对 SLI 口径映射的意义 |
|---|---|---|
| 声明式(Declarative) | 用户描述期望的最终状态,工具自动计算并执行达到该状态所需的操作。 | SLI 口径对应的基础设施状态(如实例规格、网络拓扑)由代码明确声明,避免因执行顺序差异导致口径漂移。 |
| 幂等性(Idempotent) | 无论执行一次还是多次,最终状态始终与代码定义一致。 | SLI 采集依赖的基础设施配置不会因重复部署或故障恢复而改变,确保口径长期稳定。 |
| 版本控制(Version Control) | 所有基础设施代码纳入 Git 等版本控制系统,记录每一次变更。 | SLI 口径的变更历史可追溯,支持回滚到已知正确的口径版本,便于审计与复盘。 |
关键提示: 声明式是 IaC 区别于脚本式运维的核心。在 SLI 口径映射场景中,声明式 IaC 保证“基础设施状态 = 代码定义 = SLI 采集基准”,三者严格一致。
3.2 主流 IaC 工具对比
当前业界主流的 IaC 工具包括 Terraform、Pulumi 和 Ansible。它们在设计哲学、语言支持和适用场景上存在显著差异,选择合适的工具直接影响 SLI 口径映射的工程效率。
| 维度 | Terraform | Pulumi | Ansible |
|---|---|---|---|
| 设计范式 | 声明式 + 状态文件(.tfstate) | 声明式 + 通用编程语言 | 声明式(Playbook)+ 过程式(Task) |
| 配置语言 | HCL(HashiCorp Configuration Language) | TypeScript、Python、Go、C#、Java 等 | YAML(Playbook)+ Jinja2 模板 |
| 状态管理 | 远程状态后端(S3、Consul、Terraform Cloud) | 自动化状态管理(Pulumi Cloud / 自托管) | 无中心状态(每次从目标节点收集事实) |
| 执行模型 | 客户端执行(CLI / 自动化流水线) | 客户端执行(CLI / SDK / 自动化流水线) | 推模式(Push)或拉模式(Pull) |
| 资源覆盖 | 多云 + 云原生(Provider 生态) | 多云 + 云原生(Provider 生态) | 配置管理为主 + 部分云资源编排 |
| 适用场景 | 基础设施全生命周期管理(网络、计算、存储) | 需要编程语言表达复杂逻辑的基础设施 | 配置管理、应用部署、合规检查 |
选型建议: 如果 SLI 口径映射需要频繁处理条件逻辑、循环或外部 API 调用,Pulumi 的通用编程语言优势明显;如果团队以运维为主且基础设施状态一致性要求极高,Terraform 的成熟状态管理机制更可靠;如果 SLI 口径涉及大量操作系统级配置(如内核参数、日志采集 Agent),Ansible 的配置管理能力不可或缺。
3.3 IaC 在云原生时代的演进
云原生架构的普及推动了 IaC 从“资源编排”向“应用与基础设施统一管理”演进。下图展示了 IaC 在云原生时代的关键能力层次。
上图展示了 IaC 在云原生时代的四个关键演进层次。其中 L4(可观测性与策略即代码)与本课程直接相关——SLI 口径映射正是将服务画像中的可观测性需求,通过 IaC 代码化地定义到基础设施中。
3.4 IaC 与 SLI 口径映射的关联
在《服务画像建模驱动基础设施即代码SLI口径映射方法》课程中,IaC 承担以下关键角色:
- 口径载体: SLI 采集所需的基础设施资源(如 Prometheus 实例、日志采集器、网络探针)全部通过 IaC 代码定义,确保口径可重复、可审计。
- 状态锚点: IaC 的幂等性保证每次部署后基础设施状态一致,SLI 口径不会因环境差异而失效。
- 变更追溯: 版本控制下的 IaC 代码记录了每一次口径调整,支持快速回滚到已知正确的口径版本。
常见误区: 不要将 IaC 仅视为“自动化部署工具”。在 SLI 口径映射场景中,IaC 的核心价值是建立“服务画像 → 基础设施状态 → SLI 采集口径”之间的确定性映射关系。缺少 IaC 的口径管理,本质上仍是手工运维,无法满足云原生环境下的可观测性一致性要求。