一、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\--owner=myorg\--repository=flux-system\--branch=main\--path=clusters/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对比
| 特性 | ArgoCD | Flux |
|---|---|---|
| 架构 | Controller + API | 多Controller |
| UI | 丰富 | 简单 |
| 社区 | 活跃 | 活跃 |
| 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:功能丰富,有UI
- Flux:轻量,CLI友好
个人观点,仅供参考