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

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

一、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

# 安装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. 应用 配置

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

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

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

3. 配置示例

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. 多 环境管理

# 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. 访问控制

# 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友好

个人观点,仅供参考

目录
相关文章
|
6月前
|
存储 JSON Kubernetes
【架构实战】Kubernetes日志收集:EFK/Loki架构
Kubernetes日志是排查问题的关键: 日志类型: 容器日志(stdout/stderr) 宿主机日志 应用日志 K8s组件日志
279 0
|
9月前
|
运维 Kubernetes 监控
3分钟从0到1搭建OpenClaw专属智能运维助手 ClawHub 20大运维skills库实现全流程自动化实战指南
在AIOps技术飞速发展的今天,OpenClaw凭借强大的技能扩展机制,成为运维领域的效率神器。ClawHub作为其官方技能市场,收录了数千个高质量运维相关技能,彻底改变了传统运维“手动操作多、流程繁琐、故障定位慢”的痛点。本文整理了ClawHub中20个最实用的运维技能,结合阿里云零门槛部署步骤、实战代码命令与场景化用法,帮助运维人员从0到1搭建专属智能运维助手,实现K8s管理、监控告警、数据库运维等全流程自动化。
3322 6
|
5月前
|
机器学习/深度学习 人工智能 分布式计算
基于NSGA-III进化算法的多目标电路优化器
基于NSGA-III进化算法的多目标电路优化器
480 122
|
5月前
|
Cloud Native 应用服务中间件 API
告别 Ingress Nginx:云原生 API 网关 Gateway API 使用指引
本文重点介绍云原生 API Gateway API 能力 —— 它是什么、为什么值得关注、以及如何在网关上快速上手。
669 35
|
4月前
|
人工智能 数据可视化 数据挖掘
阿里云百炼 Harness 工具全解:联网 / 代码解释 / 识图,Qwen 内置增强组件使用指南
Harness是阿里云百炼Token Plan为Qwen3.8-Max-Preview等旗舰模型内置的增强工具集,支持联网搜索、代码解释器、网页抓取、文搜图、图搜图等多模态能力,开箱即用、按调用计费,助力AI编程与智能体高效执行复杂任务。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
5月前
|
网络协议 网络性能优化 数据安全/隐私保护
阿里云智能接入网关对接使用完全指南:从硬件部署到混合云互联
本文系统阐述阿里云智能接入网关(Smart Access Gateway)的对接使用方法。SAG是阿里云提供的SD-WAN解决方案,包含硬件CPE、软件vCPE和APP三种产品形态,可将线下分支、门店、数据中心快速接入阿里云VPC。文章从产品选型开始,详细讲解硬件设备的购买、激活、组网配置(直挂与旁挂)、静态与动态路由(OSPF/BGP)配置、云连接网与云企业网的绑定流程,以及SAG APP的移动办公接入配置。同时深入探讨SAG与VPN网关、高速通道专线的混合组网与备份方案,以及SAG vCPE实现多云互联的实践。在高级功能方面,涵盖访问控制列表、QoS策略、应用识别与带宽保障等能力。最后提供
|
6月前
|
Kubernetes 数据安全/隐私保护 容器
【架构实战】Helm Chart应用部署最佳实践
Helm是Kubernetes的包管理器: 核心概念: Chart:应用包 Repository:Chart仓库 Release:部署实例
218 2
|
人工智能 API Docker
智能文档检索和简便集成的开源 AI 问答工具:Danswer
当你使用 Danswer 时,只需以自然的方式提出问题,就像与朋友交谈一样简单,它会自动搜索公司内部的文件和资料,然后给你一个可靠的答案,并附上来源。
2225 2
|
6月前
|
Kubernetes Cloud Native 调度
【架构实战】多集群管理架构设计(Karmada/Fleet)
多集群管理核心要点: Karmada:K8s原生,K8s SIG项目 Fleet:Rancher生态,简洁 跨集群调度:统一管理 灾备:故障转移
168 0
|
8月前
|
人工智能 测试技术 API
5个AI 龙虾🦞员工自动流转!OpenClaw多Agent部署、免费大模型Coding Plan API配置、研发协作与问题排查手册
OpenClaw(原Clawdbot,昵称“小龙虾”)作为2026年主流的开源多智能体框架,其核心优势在于支持多Agent协作——通过创建不同角色的智能体,实现任务自动派发、结果回调与流程闭环。传统研发流程中,一个人需切换需求分析、开发、测试等多个角色,效率低下且易出错;而OpenClaw的多智能体系统可让AI分别扮演这些角色,从需求到代码的完整流程从1-2天缩短至15-30分钟,成本节省80%。
1487 6