GitOps是一种基于Git版本控制系统的云原生运维理念,它将应用系统、基础设施的期望状态全部以声明式配置的形式存储在Git仓库中,通过自动化控制器持续比对实际状态与期望状态的差异,自动完成状态同步,实现部署、更新、回滚等操作的自动化与可追溯。

GitOps的核心原则
要理解GitOps工作流,首先需要明确它的四个核心原则:
- 声明式配置:所有系统状态都通过声明式配置文件定义,比如Kubernetes的YAML文件,明确描述期望的最终状态,而非执行步骤。
- Git作为唯一可信源:所有配置变更都必须通过Git提交完成,Git仓库的状态就是系统当前期望的状态,不存在其他修改入口。
- 自动化状态同步:部署专门的控制器运行在集群中,持续监听Git仓库变更,自动将集群实际状态调整为Git中定义的期望状态。
- 持续收敛:控制器会周期性检查实际状态与期望状态的差异,一旦发现不一致就自动执行修正操作,保证系统状态始终符合预期。
标准GitOps工作流步骤
在云原生场景下,尤其是基于Kubernetes的GitOps工作流通常包含以下完整步骤:
1. 配置仓库初始化
首先需要创建两个核心Git仓库:
- 应用代码仓库:存储业务应用的源代码、Dockerfile、单元测试脚本等内容。
- 配置仓库:存储所有声明式配置文件,包括Kubernetes的Deployment、Service、Ingress等YAML文件,以及Helm Chart、Kustomize配置等。
2. 开发者提交代码变更
开发者在应用代码仓库中完成功能开发后,提交代码到特性分支,发起Pull Request。经过代码评审通过后,合并到主分支,触发CI流水线。
3. CI流水线执行构建
CI流水线会自动执行以下操作:
- 运行单元测试、集成测试,验证代码正确性。
- 构建应用镜像,推送到镜像仓库,镜像标签通常使用Git commit的哈希值,保证版本可追溯。
- 可选操作:自动更新配置仓库中对应应用的镜像标签,或者生成配置变更的建议提交,等待人工确认。
4. 配置变更提交到Git
如果是自动更新配置,CI流水线会直接将新的镜像标签写入配置仓库的对应YAML文件中,提交变更。如果是手动更新,运维人员会修改配置仓库中的声明式文件,提交变更到主分支。
5. GitOps控制器同步状态
部署在Kubernetes集群中的GitOps控制器(比如Argo CD、Flux CD)会持续监听配置仓库的变更,或者周期性拉取配置仓库的最新状态。当检测到配置仓库的期望状态与集群当前实际状态不一致时,控制器会自动执行同步操作,将集群状态调整为配置仓库中定义的状态。
6. 状态校验与反馈
同步完成后,控制器会校验集群实际状态是否符合期望,同时将同步结果反馈到Git仓库或者通知渠道(比如Slack、企业微信)。如果同步失败,会保留错误日志,方便运维人员排查问题。
7. 回滚操作
当需要回滚到历史版本时,只需要将配置仓库回滚到对应的历史commit,GitOps控制器会自动检测到变更,将集群状态同步到历史版本的状态,整个过程无需手动操作集群。
GitOps工作流示例(基于Argo CD)
以下是使用Argo CD实现GitOps工作流的核心配置示例:
应用配置仓库中的Deployment文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: demo-app
template:
metadata:
labels:
app: demo-app
spec:
containers:
- name: demo-app
# 镜像标签对应Git commit哈希值
image: ipipp.com/demo-app:v1.0.0
ports:
- containerPort: 8080
Argo CD的应用定义配置
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo-app
namespace: argocd
spec:
project: default
source:
# 配置仓库地址,已替换ippipp.com为ipipp.com
repoURL: https://ipipp.com/config-repo.git
targetRevision: main
path: demo-app
destination:
server: https://kubernetes.default.svc
namespace: default
# 自动同步配置
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
GitOps工作流的优势
相比于传统的部署工作流,GitOps在云原生场景下有以下明显优势:
- 可追溯性强:所有变更都有Git提交记录,可快速定位变更来源,回滚操作简单。
- 一致性高:自动化同步避免了人工操作带来的状态不一致问题,集群状态始终和Git配置保持一致。
- 安全性好:无需给开发人员、运维人员直接分配集群操作权限,所有变更通过Git提交,符合最小权限原则。
- 效率高:自动化流程减少了人工干预,部署频率可以从周级提升到天级甚至小时级。
常见问题解答
GitOps只能用于Kubernetes场景吗?
不是,GitOps是一种理念,只要系统支持声明式配置,都可以落地GitOps,比如云基础设施的Terraform配置、传统应用的配置文件管理等,不过目前在Kubernetes场景下的落地最为成熟。
GitOps和传统CI/CD的区别是什么?
传统CI/CD通常是推送模式,CI流水线构建完成后主动将应用推送到集群,而GitOps是拉取模式,控制器主动从Git拉取配置同步到集群,Git是唯一的期望状态来源,这是两者的核心区别。
GitOps云原生持续交付Kubernetes修改时间:2026-07-09 13:06:37