【架构实战】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# 安装ArgoCDkubectl create namespace argocd kubectl apply-nargocd-fhttps://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml# 获取密码kubectl-nargocd get secret argocd-initial-admin-secret-ojsonpath{data.password}|base64-d# 访问UIkubectl port-forward svc/argocd-server-nargocd8080:4433. 应用配置apiVersion:argoproj.io/v1alpha1kind:Applicationmetadata:name:myappnamespace:argocdspec:project:defaultsource:repoURL:https://github.com/myorg/myapp-manifeststargetRevision:HEADpath:overlays/proddestination:server:https://kubernetes.default.svcnamespace:productionsyncPolicy:automated:prune:trueselfHeal:true三、Flux架构1. 架构Git Repository │ │ reconcile ▼ ┌──────────────┐ │ Flux CLI │ └──────┬───────┘ │ │ watch ▼ ┌────────────────────────────────────────────┐ │ Source Controller │ │ ┌──────────────┐ ┌──────────────────┐ │ │ │ GitRepository│ │ HelmRepository │ │ │ └──────────────┘ └──────────────────┘ │ └──────────────────────┬───────────────────┘ │ │ reconcile ▼ ┌────────────────────────────────────────────┐ │ Kustomize Controller │ │ ┌──────────────────────────────────────┐ │ │ │ Kustomization │ │ │ └──────────────────────────────────────┘ │ └──────────────────────┬─────────────────────┘ │ │ apply ▼ ┌────────────────────────────────────────────┐ │ Helm Controller │ │ ┌──────────────────────────────────────┐ │ │ │ HelmRelease │ │ │ └──────────────────────────────────────┘ │ └────────────────────────────────────────────┘2. 安装Flux# 安装Flux CLIcurl-shttps://fluxcd.io/install.sh|bash# 初始化flux bootstrapgit\--ownermyorg\--repositoryflux-system\--branchmain\--pathclusters/prod3. 配置示例apiVersion:source.toolkit.fluxcd.io/v1beta1kind:GitRepositorymetadata:name:myappnamespace:flux-systemspec:interval:1murl:https://github.com/myorg/myappref:branch:main---apiVersion:kustomize.toolkit.fluxcd.io/v1beta1kind:Kustomizationmetadata:name:myappnamespace:flux-systemspec:interval:10msourceRef:kind:GitRepositoryname:myapppath:./deploy/prodprune:truevalidation:client四、ArgoCD vs Flux对比特性ArgoCDFlux架构Controller API多ControllerUI丰富简单社区活跃活跃Helm支持原生原生Kustomize原生原生五、GitOps工作流1. 开发流程1. 代码提交 ↓ 2. CI构建镜像 ↓ 3. 更新Git仓库镜像Tag ↓ 4. ArgoCD/Flux检测变更 ↓ 5. 自动同步到集群 ↓ 6. 验证部署状态2. 多环境管理# base/kustomization.yamlapiVersion:kustomize.config.k8s.io/v1beta1kind:Kustomizationresources:-deployment.yaml-service.yamlcommonLabels:app:myapp---# overlays/dev/kustomization.yamlapiVersion:kustomize.config.k8s.io/v1beta1kind:Kustomizationbases:-../../basepatches:-patch.yamlimages:-name:myappnewTag:dev-latest---# overlays/prod/kustomization.yamlapiVersion:kustomize.config.k8s.io/v1beta1kind:Kustomizationbases:-../../basepatches:-patch.yamlimages:-name:myappnewTag: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/v1kind:Rolemetadata:name:argocd-adminnamespace:argocdrules:-apiGroups:[*]resources:[*]verbs:[*]七、总结GitOps核心要点单一事实来源Git仓库自动同步声明式配置ArgoCD功能丰富有UIFlux轻量CLI友好个人观点仅供参考