一、什么是 GitOps?
GitOps 是一种基于 Git 的 持续交付(Continuous Delivery)运维模式。
核心思想是:
“一切基础设施与应用状态都以代码形式存放在 Git 仓库中。”
系统的真实运行状态(如 Kubernetes 集群)应始终与 Git 中声明的状态保持同步。
当有人提交变更(如修改 YAML 或 Helm Chart),自动触发更新流程,使集群自动“对齐”到最新声明。
🎯 GitOps 的四大核心原则:
- 声明式(Declarative) —— 所有部署定义均为声明式配置(如 YAML)。
- 版本化(Versioned) —— 所有配置存放在 Git,具备历史可追溯性。
- 自动化(Automated) —— 系统自动检测变更并应用。
- 可审计(Auditable) —— Git 记录了完整的变更历史。
二、核心工具:ArgoCD + Tekton
工具 | 角色 | 功能 |
---|---|---|
Tekton | CI | 构建镜像、运行测试、推送制品 |
ArgoCD | CD | 自动部署 Kubernetes 资源,实现 GitOps 同步 |
GitHub/GitLab | 版本仓库 | 存放代码与配置 |
Kubernetes | 运行环境 | 容器编排与服务部署 |
三、整体架构流程图
┌────────────────────────────────────────────┐
│ Git 仓库 │
│ ┌────────────────────────────────────┐ │
│ │ 1. 应用源代码 (app repo) │ │
│ │ 2. 部署配置文件 (infra repo) │ │
└──┴────────────────────────────────────┘───┘
│ Push (触发 Tekton Pipeline)
▼
┌────────────────────────────────────────────┐
│ Tekton CI 阶段 │
│ 构建 → 测试 → 镜像推送 (Harbor / DockerHub)│
└────────────────────────────────────────────┘
│ GitOps 同步触发
▼
┌────────────────────────────────────────────┐
│ ArgoCD CD 阶段 │
│ 从 Git 仓库拉取最新 YAML → 应用到 K8s 集群 │
└────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────┐
│ Kubernetes (生产/测试集群) │
│ 部署新版本 → 健康检查 → 滚动更新 │
└────────────────────────────────────────────┘
四、Tekton 实战:构建 CI 流水线
Tekton 是 Kubernetes 原生的 CI 框架,每个任务(Task)和流水线(Pipeline)都以 YAML 定义。
1️⃣ 安装 Tekton
kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
2️⃣ 定义 Task(例如构建 Docker 镜像)
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: build-docker-image
spec:
params:
- name: IMAGE
type: string
steps:
- name: build
image: gcr.io/kaniko-project/executor:latest
args:
- "--destination=$(params.IMAGE)"
- "--context=."
3️⃣ 定义 Pipeline
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: ci-pipeline
spec:
params:
- name: IMAGE
type: string
tasks:
- name: build
taskRef:
name: build-docker-image
params:
- name: IMAGE
value: $(params.IMAGE)
4️⃣ 运行 PipelineRun
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: ci-pipeline-run
spec:
pipelineRef:
name: ci-pipeline
params:
- name: IMAGE
value: docker.io/ajie/app:latest
执行:
kubectl apply -f pipeline-run.yaml
成功后镜像会被构建并推送至镜像仓库。
五、ArgoCD 实战:实现持续部署(CD)
1️⃣ 安装 ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
2️⃣ 暴露 ArgoCD 控制台(NodePort)
kubectl patch svc argocd-server -n argocd \
-p '{"spec": {"type": "NodePort"}}'
然后访问:
https://<NodeIP>:<NodePort>
初始登录密码:
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d && echo
3️⃣ 创建 ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo-app
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
source:
repoURL: https://github.com/ajie/demo-deploy.git
targetRevision: main
path: k8s
syncPolicy:
automated:
prune: true
selfHeal: true
部署:
kubectl apply -f app.yaml
ArgoCD 会自动检测 Git 仓库变更,并同步至集群,实现真正的 Git 驱动部署。
六、整合 Tekton + ArgoCD
最终目标:CI/CD 完整闭环
- 开发者提交代码 → GitLab CI webhook → 触发 Tekton Pipeline。
- Tekton 构建镜像并推送 → 更新部署仓库 YAML。
- ArgoCD 监控部署仓库 → 自动同步更新至 K8s。
- 新版本上线,无需手动操作。
七、优势总结
特性 | 描述 |
---|---|
云原生 | Tekton 和 ArgoCD 都是 Kubernetes 原生组件 |
可追溯 | 所有变更记录在 Git |
自动化 | 提交即触发构建与部署 |
高可用 | 可集成多集群部署、蓝绿/金丝雀发布 |
安全合规 | Git 审计 + RBAC 控制 |
八、延伸与优化
- 🔧 监控集成:结合 Prometheus + Grafana 监控流水线与部署状态
- 🧩 多环境分支策略:
dev
、staging
、prod
三仓分层 GitOps - 🧠 智能发布:集成 Argo Rollouts 实现金丝雀 / 蓝绿发布
- 🛡 安全扫描:结合 Trivy / Clair 扫描镜像漏洞
📘 九、实战笔记总结
模块 | 工具 | 作用 |
---|---|---|
构建 | Tekton | 构建容器镜像 |
部署 | ArgoCD | 持续部署与同步 |
配置存储 | Git | 单一可信源 |
环境 | Kubernetes | 承载应用 |
优化 | Prometheus / Rollouts | 监控与智能发布 |
发表回复