首页/开发/CI/CD 与发布速查/配置漂移(Drift)
环境与配置管理60 条

配置漂移(Drift)

实际运行状态与声明配置不一致:手工热修、临时扩容、紧急改配置都会产生漂移,需要检测与收敛机制。

CI/CD 与发布速查开发更新于 2026-10-13

配置漂移是什么

配置漂移指实际运行状态与声明配置不一致:手工编辑、控制台点击、紧急热修都会产生漂移。危害是「声明不再是事实」:按文件推演环境会得出错误结论,故障排查与环境重建都会撞上意外。治理闭环是检测、判定、记录三步:IaC 的 plan 与 GitOps 对比负责检测,回写声明或强制收敛需要明确决策规则,每次漂移都要有归属。

基本信息

适用平台Terraform 与 Kubernetes、云控制台混合管理的环境
来源手工 kubectl edit、控制台点击、脚本临时改动
检测IaC 的 plan 与 refresh 比对;GitOps 控制器自动对比声明与实际
处置回写声明(视为新常态)或强制收敛(恢复声明状态)

典型使用场景

  • 混合管理环境:一部分资源在 IaC 里,一部分被手工改过
  • 紧急变更之后:热修生效后需要回流声明,否则下次部署被覆盖
  • 审计与合规:证明实际状态与获批配置一致
  • 重建演练:漂移未收敛时重建环境会丢配置
  • 多环境盘点:对比发现环境之间意料之外的差异

检测思路

检测思路
terraform plan -refresh-only  # 只刷新状态、看真实差异,不动资源
kubectl diff -f manifests/  # 集群现状与清单逐项对比
# GitOps 控制器:周期性对比声明与实际,漂移可告警也可自动收敛
漂移要分清良性与否:副本数等动态字段属正常波动,配置项与权限项的漂移应优先处理。
漂移告警要有归属:先记录问题来源(谁在何时改的),再决定回写还是收敛,避免无人认领的长期红灯。

漂移类型与处置

类型例子默认策略
动态字段自动伸缩改副本数忽略或按策略纳管
手工热修编辑镜像或环境变量回写声明
权限变更控制台加角色与策略强制收敛并追查来源
跨环境差异两台环境配置不一致评审后统一
对比要排除噪声字段:时间戳、状态字段、平台自动注入项会让差异永远非空,过滤规则集中维护并随版本更新。

易错点

  • 每次漂移都直接覆盖:可能抹掉应急修复,先评估再收敛
  • 长期不检测:漂移累积成「声明是摆设」,团队成员对 IaC 失去信任
  • 热修不回写声明:下次流水线部署覆盖应急修复,故障原样复发
  • 检测出来没有处置规则:人工每次开会讨论,效率低且结论不一致,把规则写进文档
  • 状态文件与真实资源失联:导入或手工操作后状态错位,检测结果全面失真,先修复状态再谈漂移

数据来源与参考

  • Terraform 文档《Refresh-only planning》
  • Argo CD 文档《Diffing》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌