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

个人观点,仅供参考

目录
相关文章
|
安全 前端开发 Java
SpringSecurity如何放行资源
SpringSecurity如何放行资源
958 2
|
存储 分布式计算 Hadoop
基于docker的Hadoop环境搭建与应用实践(脚本部署)
本文介绍了Hadoop环境的搭建与应用实践。对Hadoop的概念和原理进行了简要说明,包括HDFS分布式文件系统和MapReduce计算模型等,主要通过脚本的方式进行快捷部署,在部署完成后对HDFS和mapreduce进行了测试,确保其功能正常。
|
6月前
|
运维 Kubernetes 监控
3分钟从0到1搭建OpenClaw专属智能运维助手 ClawHub 20大运维skills库实现全流程自动化实战指南
在AIOps技术飞速发展的今天,OpenClaw凭借强大的技能扩展机制,成为运维领域的效率神器。ClawHub作为其官方技能市场,收录了数千个高质量运维相关技能,彻底改变了传统运维“手动操作多、流程繁琐、故障定位慢”的痛点。本文整理了ClawHub中20个最实用的运维技能,结合阿里云零门槛部署步骤、实战代码命令与场景化用法,帮助运维人员从0到1搭建专属智能运维助手,实现K8s管理、监控告警、数据库运维等全流程自动化。
3194 6
|
29天前
|
人工智能 数据可视化 数据挖掘
阿里云百炼 Harness 工具全解:联网 / 代码解释 / 识图,Qwen 内置增强组件使用指南
Harness是阿里云百炼Token Plan为Qwen3.8-Max-Preview等旗舰模型内置的增强工具集,支持联网搜索、代码解释器、网页抓取、文搜图、图搜图等多模态能力,开箱即用、按调用计费,助力AI编程与智能体高效执行复杂任务。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
3月前
|
Kubernetes 数据安全/隐私保护 容器
【架构实战】Helm Chart应用部署最佳实践
Helm是Kubernetes的包管理器: 核心概念: Chart:应用包 Repository:Chart仓库 Release:部署实例
159 2
|
3月前
|
Kubernetes Cloud Native 调度
【架构实战】多集群管理架构设计(Karmada/Fleet)
多集群管理核心要点: Karmada:K8s原生,K8s SIG项目 Fleet:Rancher生态,简洁 跨集群调度:统一管理 灾备:故障转移
133 0
|
3月前
|
存储 JSON Kubernetes
【架构实战】Kubernetes日志收集:EFK/Loki架构
Kubernetes日志是排查问题的关键: 日志类型: 容器日志(stdout/stderr) 宿主机日志 应用日志 K8s组件日志
191 0
|
6月前
|
机器学习/深度学习 数据可视化 安全
大模型应用:从交易行为到实时反欺诈:向量数据库驱动的智能风控实践.33
本文介绍基于向量数据库的实时交易反欺诈方案:将用户、交易、环境等多维特征转化为行为向量,存入向量库后通过毫秒级相似度检索识别异常。相比传统规则引擎,该方案响应更快、适应性更强、误报率更低,并附ChromaDB完整实现与可视化分析。
419 1
大模型应用:从交易行为到实时反欺诈:向量数据库驱动的智能风控实践.33
|
人工智能 API Docker
智能文档检索和简便集成的开源 AI 问答工具:Danswer
当你使用 Danswer 时,只需以自然的方式提出问题,就像与朋友交谈一样简单,它会自动搜索公司内部的文件和资料,然后给你一个可靠的答案,并附上来源。
2148 2
|
文字识别 计算机视觉 开发者
基于QT的OCR和opencv融合框架FastOCRLearn实战
本文介绍了在Qt环境下结合OpenCV库构建OCR识别系统的实战方法,通过FastOCRLearn项目,读者可以学习Tesseract OCR的编译配置和在Windows平台下的实践步骤,文章提供了技术资源链接,帮助开发者理解并实现OCR技术。
1021 9
基于QT的OCR和opencv融合框架FastOCRLearn实战

热门文章

最新文章