配置漂移是什么
配置漂移指实际运行状态与声明配置不一致:手工编辑、控制台点击、紧急热修都会产生漂移。危害是「声明不再是事实」:按文件推演环境会得出错误结论,故障排查与环境重建都会撞上意外。治理闭环是检测、判定、记录三步:IaC 的 plan 与 GitOps 对比负责检测,回写声明或强制收敛需要明确决策规则,每次漂移都要有归属。
基本信息
| 适用平台 | Terraform 与 Kubernetes、云控制台混合管理的环境 |
|---|---|
| 来源 | 手工 kubectl edit、控制台点击、脚本临时改动 |
| 检测 | IaC 的 plan 与 refresh 比对;GitOps 控制器自动对比声明与实际 |
| 处置 | 回写声明(视为新常态)或强制收敛(恢复声明状态) |
典型使用场景
- 混合管理环境:一部分资源在 IaC 里,一部分被手工改过
- 紧急变更之后:热修生效后需要回流声明,否则下次部署被覆盖
- 审计与合规:证明实际状态与获批配置一致
- 重建演练:漂移未收敛时重建环境会丢配置
- 多环境盘点:对比发现环境之间意料之外的差异
检测思路
检测思路
terraform plan -refresh-only # 只刷新状态、看真实差异,不动资源
kubectl diff -f manifests/ # 集群现状与清单逐项对比
# GitOps 控制器:周期性对比声明与实际,漂移可告警也可自动收敛漂移要分清良性与否:副本数等动态字段属正常波动,配置项与权限项的漂移应优先处理。
漂移告警要有归属:先记录问题来源(谁在何时改的),再决定回写还是收敛,避免无人认领的长期红灯。
漂移类型与处置
| 类型 | 例子 | 默认策略 |
|---|---|---|
| 动态字段 | 自动伸缩改副本数 | 忽略或按策略纳管 |
| 手工热修 | 编辑镜像或环境变量 | 回写声明 |
| 权限变更 | 控制台加角色与策略 | 强制收敛并追查来源 |
| 跨环境差异 | 两台环境配置不一致 | 评审后统一 |
对比要排除噪声字段:时间戳、状态字段、平台自动注入项会让差异永远非空,过滤规则集中维护并随版本更新。