【架构实战】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友好

个人观点,仅供参考

相关推荐
2501_948114242 小时前
大模型API调用成本优化的工程路径:星链4SAPI聚合网关的技术实践
大数据·开发语言·人工智能·架构·php
easy_coder2 小时前
Agent:原理、架构与工程实践(终篇)
架构·云计算
张忠琳2 小时前
【vllm】(三)vLLM v1 Core — 模块超深度逐行分析之二
ai·架构·vllm
青槿吖2 小时前
Feign 微服务远程调用指南:告别手写 RestTemplate
java·redis·后端·spring·微服务·云原生·架构
张忠琳2 小时前
【openclaw】OpenClaw Cron 模块超深度架构分析之三
ai·架构·openclaw
heimeiyingwang3 小时前
【架构实战】多集群管理架构设计(Karmada/Fleet)
架构
SamDeepThinking3 小时前
从DDD的仓储层反向依赖,理解DIP、IOC和DI
java·后端·架构
wanhengidc3 小时前
云主机的核心原理与架构
运维·服务器·科技·游戏·智能手机·架构
张忠琳3 小时前
【vllm】(三)vLLM v1 Core — 模块超深度逐行分析之三
ai·架构·vllm