【架构实战】GitOps持续交付架构(ArgoCD/Flux)

一、GitOps概述

GitOps是以Git为单一事实来源的运维模式:

核心原则:

  • 声明式配置
  • Git为唯一真理
  • 自动同步
  • 可追溯

二、ArgoCD架构

1. 架构图

复制代码
┌─────────────────────────────────────────────────────────────┐
│                        Git Repository                         │
│  ┌─────────────────┐  ┌─────────────────┐  ┌───────────────┐ │
│  │ deployments/   │  │   services/    │  │  configmaps/ │ │
│  │  deployment.yaml│  │  service.yaml  │  │  config.yaml  │ │
│  └─────────────────┘  └─────────────────┘  └───────────────┘ │
└─────────────────────────────────────────────────────────────┘
                              │
                              │ Pull
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      ArgoCD Server                           │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────────┐   │
│  │   Web UI     │  │    API       │  │   Controller  │   │
│  └──────────────┘  └──────────────┘  └───────┬───────┘   │
└───────────────────────────────────────────────┼─────────────┘
                                                │
                                                │ Sync
                                                ▼
┌─────────────────────────────────────────────────────────────┐
│                     Kubernetes Cluster                       │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐    │
│  │   Deploy    │  │   Service   │  │   ConfigMap    │    │
│  └─────────────┘  └─────────────┘  └─────────────────┘    │
└─────────────────────────────────────────────────────────────┘

2. 安装ArgoCD

bash 复制代码
# 安装ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 获取密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{data.password}" | base64 -d

# 访问UI
kubectl port-forward svc/argocd-server -n argocd 8080:443

3. 应用配置

yaml 复制代码
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/myorg/myapp-manifests
    targetRevision: HEAD
    path: overlays/prod
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

三、Flux架构

1. 架构

复制代码
Git Repository
      │
      │ reconcile
      ▼
┌──────────────┐
│   Flux CLI   │
└──────┬───────┘
       │
       │ watch
       ▼
┌────────────────────────────────────────────┐
│              Source Controller              │
│  ┌──────────────┐  ┌──────────────────┐  │
│  │ GitRepository│  │  HelmRepository  │  │
│  └──────────────┘  └──────────────────┘  │
└──────────────────────┬───────────────────┘
                       │
                       │ reconcile
                       ▼
┌────────────────────────────────────────────┐
│             Kustomize Controller            │
│  ┌──────────────────────────────────────┐ │
│  │   Kustomization                      │ │
│  └──────────────────────────────────────┘ │
└──────────────────────┬─────────────────────┘
                       │
                       │ apply
                       ▼
┌────────────────────────────────────────────┐
│              Helm Controller               │
│  ┌──────────────────────────────────────┐ │
│  │   HelmRelease                        │ │
│  └──────────────────────────────────────┘ │
└────────────────────────────────────────────┘

2. 安装Flux

bash 复制代码
# 安装Flux CLI
curl -s https://fluxcd.io/install.sh | bash

# 初始化
flux bootstrap git \
  --owner=myorg \
  --repository=flux-system \
  --branch=main \
  --path=clusters/prod

3. 配置示例

yaml 复制代码
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
  name: myapp
  namespace: flux-system
spec:
  interval: 1m
  url: https://github.com/myorg/myapp
  ref:
    branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
  name: myapp
  namespace: flux-system
spec:
  interval: 10m
  sourceRef:
    kind: GitRepository
    name: myapp
  path: ./deploy/prod
  prune: true
  validation: client

四、ArgoCD vs Flux对比

特性 ArgoCD Flux
架构 Controller + API 多Controller
UI 丰富 简单
社区 活跃 活跃
Helm支持 原生 原生
Kustomize 原生 原生

五、GitOps工作流

1. 开发流程

复制代码
1. 代码提交
   ↓
2. CI构建镜像
   ↓
3. 更新Git仓库镜像Tag
   ↓
4. ArgoCD/Flux检测变更
   ↓
5. 自动同步到集群
   ↓
6. 验证部署状态

2. 多环境管理

yaml 复制代码
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml

commonLabels:
  app: myapp
---
# overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

bases:
  - ../../base

patches:
  - patch.yaml

images:
  - name: myapp
    newTag: dev-latest
---
# overlays/prod/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

bases:
  - ../../base

patches:
  - patch.yaml

images:
  - name: myapp
    newTag: v1.2.3

六、最佳实践

1. 仓库结构

复制代码
├── apps/
│   ├── myapp/
│   │   ├── base/
│   │   │   ├── deployment.yaml
│   │   │   └── service.yaml
│   │   ├── overlays/
│   │   │   ├── dev/
│   │   │   └── prod/
│   │   └── kustomization.yaml
│   └── other-app/
└── infrastructure/
    ├── argo-cd/
    ├── sealed-secrets/
    └── monitoring/

2. 访问控制

yaml 复制代码
# RBAC配置
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: argocd-admin
  namespace: argocd
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]

七、总结

GitOps核心要点:

  • 单一事实来源:Git仓库
  • 自动同步:声明式配置
  • ArgoCD:功能丰富,有UI
  • Flux:轻量,CLI友好

个人观点,仅供参考

相关推荐
耿公子和编程9 分钟前
Android 指纹浏览器开发教程一:先把整体架构拆清楚
android·架构
Gofarlic_OMS18 分钟前
CONVERGE CFD许可不够用?自动回收闲置,燃烧仿真随时跑
java·大数据·开发语言·架构·制造
小短腿的代码世界29 分钟前
颠覆QWidget与QML?QSkinny轻量级UI框架的架构革命与嵌入式场景实战
qt·ui·架构
小程故事多_801 小时前
深度解析Claude Code,AI编码助手的底层架构与工作原理
java·人工智能·架构·智能体
亚空间仓鼠1 小时前
Docker容器化高可用架构部署方案(五)
docker·容器·架构
Gc9umsbL11 小时前
Istio 架构全景解析:控制面 vs 数据面、核心组件与流量路径深度拆解
云原生·架构·istio
aXin_ya2 小时前
微服务面试篇1
微服务·面试·架构
SZLSDH2 小时前
从“端渲染”到“流渲染”的融合与平衡——数字孪生项目渲染架构的演进逻辑
ai·架构·数字孪生·数据可视化·智能体
Q_4582838682 小时前
基于 JTT1078MediaServer 的集群方案实践(Nginx + 溯源模式)轻量级车联网音视频集群
运维·服务器·nginx·架构·音视频·交通物流
星梦清河2 小时前
微服务-Elasticsearch02
微服务·架构·jenkins