GitOps 漂移检测:集群里改了配置,Git 还以为一切正常

GitOps 漂移检测:集群里改了配置,Git 还以为一切正常

GitOps 的理念是 Git 作为事实来源。但生产里总会有人临时改集群配置:手动 scale、临时 patch、紧急改 ConfigMap。如果没有漂移检测,Git 里看起来一切正常,集群里已经变了。

GitOps 不是只会同步,也要能发现现实偏离声明。

一、什么是配置漂移

flowchart TD A[Git Desired State] --> C[Drift Detection] B[Cluster Actual State] --> C C --> D[Diff] D --> E[Sync Or Alert]

漂移就是实际状态和声明状态不一致。它可能来自人工操作,也可能来自控制器动态修改。

二、漂移要分类

yaml 复制代码
drift_types:
  expected:
    - status
    - managed_fields
  suspicious:
    - image_tag_changed
    - replicas_changed
    - env_changed
    - resource_limit_removed

不是所有 diff 都要告警。status 字段变化正常,镜像和环境变量变化就要小心。

三、自动修复要谨慎

有些 GitOps 工具可以自动 sync,把集群拉回 Git 状态。但紧急修复期间,自动覆盖可能制造二次事故。

text 复制代码
auto_sync_policy:
  dev: enabled
  staging: enabled
  prod: manual_approval

生产环境是否自动修复,要结合团队值班和变更流程决定。

四、漂移也要进审计

发现漂移时,要记录资源、字段、发现时间、处理人和处理结果。

json 复制代码
{
  "resource": "deployment/api",
  "field": "spec.replicas",
  "desired": 4,
  "actual": 8
}

这类记录能帮助复盘:为什么有人绕过 Git 改集群?

漂移检测也要和紧急变更流程配合。生产事故中,值班人员可能必须临时 patch 集群。此时应该有 break-glass 流程:记录原因、设置过期时间、事后补 PR。

yaml 复制代码
break_glass:
  reason_required: true
  expires_in: "2h"
  follow_up_pr_required: true

这样既保留紧急处理能力,又不会让临时改动长期漂在集群里。

漂移报告最好按风险排序。镜像、环境变量、资源限制、权限相关字段优先级高;副本数变化次之;status 类字段直接忽略。否则值班人员会被大量无意义 diff 淹没。

五、总结

GitOps 漂移检测要比较 Git 声明状态和集群实际状态,区分正常差异和危险差异,并谨慎处理自动修复。

Git 是事实来源,但集群才是正在运行的现实。两边不一致时,系统必须知道。

GitOps 的成熟度,不在于永远没人手改,而在于手改发生后能被发现、解释、收敛回 Git。

漂移检测还可以作为发布前检查。新版本发布前,先确认目标命名空间没有未解释漂移。否则你以为发布覆盖的是 Git 状态,实际覆盖的是一堆临时改动。

text 复制代码
pre_deploy_check:
  drift_detected: false
  break_glass_expired: false
  pending_manual_patch: false

如果存在漂移,就先决定:把集群状态回写 Git,还是把集群恢复到 Git。不要带着不明差异继续发布。

相关推荐
喵了几个咪16 小时前
GoWind Admin 拆解:一个 Sender 接口接 39 个通知渠道
微服务·golang·go·1024程序员节·admin·gowind
fb_1234521 小时前
K8s存储与配置核心实战
云原生·容器·kubernetes
RuoyiOffice21 小时前
Flowable 状态通知设计:单体用本地事件,微服务如何回写业务状态?
spring boot·微服务·vue3·flowable·ruoyi office·redis stream·流程状态通知
bigbig_ben1 天前
yearning安装docker
运维·docker·容器
GlobalInfo1 天前
上新 | 全球及中国起重机摄像系统行业研究报告(2026版):市场现状、行业前景与占有率分析
大数据·分布式·微服务·ai·相机
IT小小猪1 天前
从零搭建K8s 集群
云原生·容器·kubernetes
吴声子夜歌2 天前
Docker入门与实战——热门镜像介绍
运维·docker·容器
方便面不加香菜2 天前
容器虚拟化基础--CGroups资源控制
运维·docker·容器
吴声子夜歌2 天前
Docker入门与实战——Docker命令查询
docker·容器
利威尔xu2 天前
Go IM 源码实战(2):WebSocket 握手 11 步,少 1 个参数连不上
后端·websocket·微服务·面试·golang