1. 漂移概念

1.1 什么是基础设施漂移

基础设施漂移(Infrastructure Drift)是指云资源的实际运行状态与代码/模板中定义的期望状态之间逐渐产生偏差的现象。在 Pulumi 等 IaC 工具中,堆栈状态文件记录了资源的期望配置,而云平台上的真实资源可能因手动操作、外部流程或自动修复机制而发生改变,导致两者不一致。

核心定义:漂移 = 实际状态 ≠ 期望状态。当偏差累积到一定程度,基础设施将不再受 IaC 代码的完整管控。
基础设施漂移概念示意图 期望状态 Pulumi 代码/状态文件 (Desired State) 实际状态 云平台真实资源 (Actual State) 漂移 Drift 偏差累积 漂移的本质 当实际状态偏离期望状态,且未被 IaC 工作流检测和纠正时, 基础设施即进入“漂移”状态,IaC 的声明式管控能力被削弱。

1.2 漂移产生的原因

漂移并非单一因素导致,而是多种运维场景共同作用的结果。下表归纳了最常见的漂移诱因及其典型表现:

原因分类 具体场景 典型表现 影响程度
手动运维操作 工程师通过云控制台修改安全组规则、调整实例规格、手动扩缩容 Pulumi 下次部署时检测到资源属性变更,触发漂移告警 高
自动化修复/自愈 Auto Scaling 自动替换故障实例、K8s 控制器重建 Pod、健康检查重启服务 资源 ID 或配置被自动更改,状态文件与实际资源失配 中
外部工具/脚本 CI/CD 流水线、配置管理工具(Ansible/Chef)、监控脚本直接修改云资源 资源标签、网络 ACL、存储策略被非 IaC 工具覆盖 高
云平台自身变更 云服务商升级 API、废弃功能、自动迁移底层硬件 资源属性被平台侧隐式修改,状态文件未同步 低~中
多人协作冲突 多个团队同时管理同一堆栈,未使用统一 IaC 工作流 状态文件被覆盖或部分资源脱离管控 高
IaC 代码回退/合并错误 Git 合并冲突导致资源定义被错误还原或遗漏 部署后资源状态与预期不符,产生隐性漂移 中
经验提示:在大型生产环境中,手动运维操作和外部工具/脚本是漂移的两大首要来源。建议在组织内推行“一切皆代码”原则,任何资源变更都必须通过 IaC 管道执行。

1.3 漂移对生产环境的危害

漂移如果得不到及时检测和纠正,会从轻微偏差逐步演变为系统性风险。以下是漂移对生产环境的主要危害:

  • 部署失败与回滚困难:Pulumi 执行 pulumi up 时,因实际状态与期望状态冲突,可能导致部署中断、资源重建或意外删除。回滚时因漂移存在,无法恢复到已知正确状态。
  • 安全合规漏洞:手动修改的安全组规则可能开放了不必要的端口,或关闭了审计日志,导致合规检查失败。漂移使安全基线无法被 IaC 持续保障。
  • 配置漂移放大故障:当生产环境出现故障时,漂移使根因分析复杂化——运维人员无法确定当前配置是否与代码一致,排障时间大幅延长。
  • 资源失控与成本浪费:漂移可能导致未被 IaC 管理的“孤儿资源”持续运行,产生不必要的云支出。同时,手动创建的临时资源可能被遗忘,长期占用配额。
  • 团队信任度下降:频繁的漂移告警和部署异常会削弱团队对 IaC 流程的信心,促使更多人绕过 IaC 直接操作控制台,形成恶性循环。
漂移危害层级图 部署失败 & 回滚困难 安全合规漏洞 配置漂移放大故障 资源失控 & 成本浪费 团队信任度下降 → 恶性循环 漂移危害从底层向上逐级传导,最终破坏整个 IaC 治理体系
生产环境警示:漂移不是“偶尔发生的小问题”,而是 IaC 治理失效的前兆。根据行业统计,超过 60% 的生产环境故障与未检测到的漂移直接或间接相关。建立自动化的漂移检测与复核流程,是保障生产环境稳定性的必要手段。

1.4 漂移检测的必要性