一、什么是 GitOps?

GitOps 是一种基于 Git 的 持续交付(Continuous Delivery)运维模式
核心思想是:

“一切基础设施与应用状态都以代码形式存放在 Git 仓库中。”

系统的真实运行状态(如 Kubernetes 集群)应始终与 Git 中声明的状态保持同步。
当有人提交变更(如修改 YAML 或 Helm Chart),自动触发更新流程,使集群自动“对齐”到最新声明。

🎯 GitOps 的四大核心原则:

  1. 声明式(Declarative) —— 所有部署定义均为声明式配置(如 YAML)。
  2. 版本化(Versioned) —— 所有配置存放在 Git,具备历史可追溯性。
  3. 自动化(Automated) —— 系统自动检测变更并应用。
  4. 可审计(Auditable) —— Git 记录了完整的变更历史。

二、核心工具:ArgoCD + Tekton

工具角色功能
TektonCI构建镜像、运行测试、推送制品
ArgoCDCD自动部署 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 完整闭环

  1. 开发者提交代码 → GitLab CI webhook → 触发 Tekton Pipeline。
  2. Tekton 构建镜像并推送 → 更新部署仓库 YAML。
  3. ArgoCD 监控部署仓库 → 自动同步更新至 K8s。
  4. 新版本上线,无需手动操作。

七、优势总结

特性描述
云原生Tekton 和 ArgoCD 都是 Kubernetes 原生组件
可追溯所有变更记录在 Git
自动化提交即触发构建与部署
高可用可集成多集群部署、蓝绿/金丝雀发布
安全合规Git 审计 + RBAC 控制

八、延伸与优化

  • 🔧 监控集成:结合 Prometheus + Grafana 监控流水线与部署状态
  • 🧩 多环境分支策略devstagingprod 三仓分层 GitOps
  • 🧠 智能发布:集成 Argo Rollouts 实现金丝雀 / 蓝绿发布
  • 🛡 安全扫描:结合 Trivy / Clair 扫描镜像漏洞

📘 九、实战笔记总结

模块工具作用
构建Tekton构建容器镜像
部署ArgoCD持续部署与同步
配置存储Git单一可信源
环境Kubernetes承载应用
优化Prometheus / Rollouts监控与智能发布