一、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友好
个人观点,仅供参考