【GitOps·入门篇】四大原则:声明式、版本控制、自动应用、持续协调
前言GitOps 不是某个工具而是一套原则。OpenGitOps 社区定义了 GitOps 的四大原则任何工具只要满足这四个原则就可以称为GitOps 工具。理解这四个原则你就能判断一个工具是否真正是 GitOps也能理解为什么 GitOps 比传统 CI/CD 更安全。一、原则一声明式Declarative原则描述系统期望状态必须用声明式的方式描述——我要什么而非我要做什么。命令式 vs 声明式# 命令式Imperative——告诉系统怎么做 # kubectl create deployment myapp --imagemyapp:v1 --replicas3 # → 一步步执行命令最终结果是隐含的 # 声明式Declarative——描述期望状态 apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 # 我要3个副本 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: app image: myapp:v1 # 用这个镜像 resources: limits: cpu: 500m memory: 512Mi为什么声明式是 GitOps 的基础命令式的问题: 脚本: kubectl scale deployment myapp --replicas4 kubectl set image deployment myapp appmyapp:v2 kubectl apply configmap app-config --from-fileconfig.yaml → 三条命令执行完集群状态是什么你不确定 → 如果中间有命令失败了呢 → 如果有人又执行了别的命令呢 声明式的优势: Git 仓库中的 YAML 描述了完整的期望状态 → 集群应该有3个副本、用 v2 镜像、有这个 ConfigMap → GitOps 工具负责让集群达到这个状态 → 不管集群当前是什么状态最终都会变成期望状态实践建议应该做的: ✓ 用 YAML 声明 K8s 资源 ✓ 用 Helm Chart 声明应用 ✓ 用 Kustomize 管理多环境差异 不应该做的: ✗ 用 kubectl create/scale/set 等命令式操作 ✗ 在 CI 中写 Shell 脚本执行部署 ✗ 用 kubectl edit 直接改集群中的资源培训要点判断是否声明式的方法——如果删除工具集群状态是否会变如果会变说明是命令式工具在维持状态如果不会变说明是声明式YAML 已经描述了完整状态。二、原则二版本控制Version Controlled原则描述所有声明式配置必须存储在 Git 仓库中Git 是唯一可信源Single Source of Truth。为什么用 Git特性Git 的价值版本历史每次变更都有记录可以追溯到任意版本审计追踪谁、什么时候、改了什么、为什么改变更审批PR/MR Review 机制变更前必须审查快速回滚git revert 即可回滚到任意版本分支管理不同分支对应不同环境协作多人可以同时修改Git 处理冲突仓库策略策略一应用代码和部署清单在同一仓库myapp/ ├── src/ # 应用源码 ├── Dockerfile ├── deploy/ # 部署清单 │ ├── base/ # 基础配置 │ │ ├── deployment.yaml │ │ ├── service.yaml │ │ └── kustomization.yaml │ └── overlays/ # 环境差异 │ ├── test/ │ ├── staging/ │ └── prod/策略二应用代码和部署清单分离推荐仓库1: myapp-code/ # 应用代码 ├── src/ ├── Dockerfile └── Jenkinsfile 仓库2: myapp-deploy/ # 部署清单GitOps 仓库 ├── base/ │ ├── deployment.yaml │ └── service.yaml └── overlays/ ├── test/ ├── staging/ └── prod/培训要点推荐分离仓库策略。原因部署清单仓库可以设更严格的权限只有 DevOps 能改生产配置而应用代码仓库可以开放给所有开发人员。CI 完成镜像构建后自动更新部署清单仓库中的镜像版本。策略三统一部署仓库多服务集中管理deployments/ # 统一部署仓库 ├── services/ │ ├── user-service/ │ │ ├── base/ │ │ └── overlays/ │ ├── order-service/ │ │ ├── base/ │ │ └── overlays/ │ └── payment-service/ │ ├── base/ │ └── overlays/ └── infrastructure/ # 基础设施 ├── ingress/ ├── cert-manager/ └── monitoring/三、原则三自动应用Automated Application原则描述从 Git 仓库到集群的变更应该是自动的——不需要人手动运行kubectl apply。自动应用 vs 手动应用手动应用不满足 GitOps: 修改 Git 仓库 → 人手动执行 kubectl apply → 集群更新 问题容易遗忘、不一致、不能自动响应变更 自动应用满足 GitOps: 修改 Git 仓库 → GitOps 工具自动检测 → 自动应用到集群 优势3秒内响应、每次变更都同步、无人值守ArgoCD 自动应用配置# ArgoCD Application apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: myapp namespace: argocd spec: source: repoURL: https://github.com/myorg/myapp-deploy targetRevision: main path: overlays/prod destination: server: https://kubernetes.default.svc namespace: myapp-prod syncPolicy: automated: # ← 自动同步 prune: true # 自动删除 Git 中不存在的资源 selfHeal: true # 自动修复漂移 syncOptions: - CreateNamespacetrueFlux 自动应用配置# Flux Kustomization apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: myapp namespace: flux-system spec: interval: 30s # ← 每30秒检查一次 Git 仓库 path: ./overlays/prod sourceRef: kind: GitRepository name: myapp-deploy prune: true # 自动清理 healthChecks: - apiVersion: apps/v1 kind: Deployment name: myapp namespace: myapp-prod什么时候需要手动审批# ArgoCD 中可以配置部分自动、部分手动 spec: syncPolicy: automated: prune: true selfHeal: true # 对于生产环境可以用 Sync Window 限制自动同步时间 # 或者用 ArgoCD ApplicationSet environment 标签控制培训要点自动应用不代表全自动无人值守。测试和预发环境可以完全自动生产环境可以设置自动同步但需要审批或仅工作时间自动同步。四、原则四持续协调Continuous Reconciliation原则描述GitOps 工具持续比较 Git 仓库中的期望状态和集群中的实际状态发现差异时自动行动。协调循环持续运行的协调循环: ┌─────────────────────────────────────┐ │ 每 30 秒循环一次 │ │ │ │ 1. 从 Git 读取期望状态 │ │ Git 仓库: replicas3, imagev2 │ │ │ │ 2. 从集群读取实际状态 │ │ K8s 集群: replicas2, imagev2 │ │ │ │ 3. 比较差异 │ │ 差异: replicas 3≠2 │ │ │ │ 4. 根据策略处理 │ │ 策略A: 自动修复 → kubectl scale 3│ │ 策略B: 只告警 → 发送通知 │ │ │ │ 5. 记录结果 │ │ 状态: OutOfSync → Syncing → Synced│ └─────────────────────────────────────┘漂移Drift检测场景有人手动修改了集群 开发者 SSH 到节点: kubectl scale deployment myapp --replicas1 → 集群实际状态: replicas1 → Git 仓库状态: replicas3 GitOps 工具下一次协调: → 检测到漂移: 实际(1) ≠ 期望(3) → selfHealtrue: 自动修复 → replicas 恢复为 3 → 发送漂移告警: 检测到手动变更已自动修复 selfHealfalse: → 只告警不修复 → 需要人工确认是否要修改 Git 仓库ArgoCD 漂移检测配置spec: syncPolicy: automated: selfHeal: true # 自动修复漂移 prune: true # 自动清理 Git 中已删除的资源协调频率工具默认协调间隔配置方式ArgoCD3分钟默认argocd.argoproj.io/sync-options: ...Flux1分钟spec.interval: 30s踩坑提示协调间隔不是越短越好。太频繁的协调会给 API Server 带来压力。建议测试环境30秒生产环境1-3分钟。五、四原则的实践检查清单原则一: 声明式 □ 所有部署配置用 YAML/Helm Chart/Kustomize 描述 □ 没有使用 kubectl create/scale/set 命令式操作 □ 集群状态可以完全从 Git 仓库还原 原则二: 版本控制 □ 所有部署配置在 Git 仓库中 □ Git 仓库有分支保护main 分支不能直接 push □ 变更通过 PR/MR Review 合并 □ Git 仓库是唯一可信源 原则三: 自动应用 □ 使用 ArgoCD/Flux 等 GitOps 工具 □ Git 变更后自动同步到集群 □ 不需要人手动 kubectl apply 原则四: 持续协调 □ GitOps 工具持续运行 □ 配置了漂移检测 □ 有漂移告警通知六、本篇要点回顾声明式描述要什么而非做什么YAML 描述完整期望状态版本控制Git 是唯一可信源PR Review 审批每次变更自动应用GitOps 工具自动将 Git 变更同步到集群持续协调持续比较期望与实际发现漂移自动修复或告警四个原则缺一不可——满足全部才是真正的 GitOps下一篇预告《推模型 vs 拉模型GitOps 与传统 CI/CD 的核心差异》——用两条具体的流水线对比推模型和拉模型的差异。

相关新闻

轻量化部署·实时监控·持久稳定 知影-API风险监测系统赋能政务API安全最佳实践

轻量化部署·实时监控·持久稳定 知影-API风险监测系统赋能政务API安全最佳实践

一、方案概要:全维度落地的政务API安全实效体系【本节提示】本节整合数字政府API运行现状、核心技术特性与落地成效,客观阐释轻量化、实时监控、长效闭环架构在政务API全生命周期治理中的合规与实战价值。数字政府超80%的跨部门便民数据流转依托API承载&…

2026/9/30 16:24:51 阅读更多 →
一人公司如何用AI技能蒸馏法构建自动化Excel处理助手

一人公司如何用AI技能蒸馏法构建自动化Excel处理助手

1. 项目缘起:当“一人公司”的精力被琐事榨干最近半年,我一直在运营一个“一人公司”,听起来很酷,时间自由,自己说了算。但实际情况是,我每天80%的时间,都花在了处理那些重复、琐碎但又不得不做…

2026/9/27 8:04:52 阅读更多 →
慕课-手把手教你掌握新一代AI工具(已完结)

慕课-手把手教你掌握新一代AI工具(已完结)

教育视角:新一代 AI 工具重塑学习方式——从“知识搬运”到“思维共生”的实操革命 随着“新一代 AI 工具重塑学习方式”全套实操教程的圆满完结,我们不仅见证了一套教学内容的更新迭代,更标志着一个全新教育时代的正式启幕。这并非简单的工具…

2026/10/11 17:50:40 阅读更多 →

最新新闻

JSTL 标签库实战:从脚本片段到标签封装的核心技巧

JSTL 标签库实战:从脚本片段到标签封装的核心技巧

1. 从脚本片段到标签封装&#xff1a;JSTL 到底解决了什么问题很多人第一次接触 JSTL&#xff0c;是在维护一个老项目的时候。打开 JSP 文件&#xff0c;满屏的<% for(...) { %>、<% if(...) { %>和<% request.getAttribute("xxx") %>&#xff0c;…

2026/10/12 17:55:23 阅读更多 →
告别API依赖!GitHub上那些可以完全本地运行的优质开源AI项目盘点:用TaoToken统一Key打通本地与云端

告别API依赖!GitHub上那些可以完全本地运行的优质开源AI项目盘点:用TaoToken统一Key打通本地与云端

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 17:55:23 阅读更多 →
共享单车数据集VOC格式实战:从标注解析到YOLO训练全流程

共享单车数据集VOC格式实战:从标注解析到YOLO训练全流程

简介&#xff1a;这份共享单车数据集采用VOC格式整理&#xff0c;面向从事目标检测算法练习、课程设计或毕业设计的学生与开发者&#xff0c;可用于训练和验证单车识别模型&#xff0c;解决真实街景中共享单车标注样本不足的问题。压缩包共272个文件&#xff0c;包含136张jpg实…

2026/10/12 17:55:23 阅读更多 →
Python机器学习预测电影首周票房实战指南

Python机器学习预测电影首周票房实战指南

简介&#xff1a;这是一套面向计算机专业本科生的机器学习实战项目资源&#xff0c;聚焦电影票房预测这一典型回归建模任务&#xff0c;适用于毕业设计、课程设计及期末大作业场景。资源包含完整可运行的Python源码、清洗后的TMDB 5000电影数据集&#xff08;含credits与movies…

2026/10/12 17:55:23 阅读更多 →
Jupyter Notebook虚拟环境配置指南:Kernel与conda/venv绑定方法

Jupyter Notebook虚拟环境配置指南:Kernel与conda/venv绑定方法

1. 先搞清楚&#xff1a;为什么 Notebook 老是"用错环境"我最初接触这个问题&#xff0c;是因为在同一个项目里同时跑了两个不同版本的深度学习框架&#xff0c;一个依赖 Python 3.8&#xff0c;一个依赖 Python 3.10。Jupyter Notebook 默认启动时用的是系统 PATH 里…

2026/10/12 17:55:23 阅读更多 →
Tesseract OCR中文识别实战:安装、调优与避坑指南

Tesseract OCR中文识别实战:安装、调优与避坑指南

简介&#xff1a;Tesseract OCR 安装包与中文语言包面向需要在本地完成图片文字识别的开发者、测试人员及自动化办公用户&#xff0c;尤其适合用 Python 调用 OCR 引擎处理中文文档、票据或截图的人群。压缩包共 723 个文件&#xff0c;约 36.01MB&#xff0c;以 C 源码&#x…

2026/10/12 17:54:23 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →