GitOps持续部署实战:ArgoCD与Flux多集群同步策略配置

GitOps将Git仓库作为基础设施和应用配置的唯一真实来源,通过控制器自动同步Git声明与集群实际状态。ArgoCD和Flux是CNCF收录的两个主流GitOps工具,均支持多集群部署、Kustomize/Helm模板和漂移检测。GitOps持续部署的核心优势在于审计追踪、回滚能力和配置版本化。

ArgoCD架构与Application资源定义

ArgoCD采用声明式模型,通过CRD定义Application资源,指定Git仓库、目标集群和同步策略。控制器持续对比Git仓库中的清单与集群实际状态,检测到漂移时触发同步或告警。

ArgoCD安装与Application配置:

# 安装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

Application定义文件application.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: web-frontend
  namespace: argocd
spec:
  source:
    repoURL: https://github.com/yunthe/k8s-manifests
    targetRevision: main
    path: apps/web-frontend/overlays/production
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

syncPolicy.automated.prune设为true时,Git中删除的资源在集群中也会被删除。selfHeal为true时,手动修改集群资源会被自动还原为Git声明的状态。syncOptions中CreateNamespace=true允许自动创建目标命名空间。

FluxCD多集群同步与Kustomize集成

Flux采用source-controller和kustomize-controller分离架构,GitRepository资源定义源,Kustomization资源定义同步动作。Flux的多租户支持通过ServiceAccount和RBAC实现命名空间隔离。

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

# 引导Flux到集群
flux bootstrap github \
  --owner=yunthe \
  --repository=fleet-infra \
  --branch=main \
  --path=clusters/production

GitRepository和Kustomization定义:

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: app-manifests
  namespace: flux-system
spec:
  interval: 1m
  url: https://github.com/yunthe/k8s-manifests
  ref:
    branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: web-frontend
  namespace: flux-system
spec:
  interval: 5m
  path: ./apps/web-frontend/overlays/production
  sourceRef:
    kind: GitRepository
    name: app-manifests
  prune: true
  healthChecks:
    - apiVersion: apps/v1
      kind: Deployment
      name: web-frontend
      namespace: production

interval控制同步检查频率。healthChecks指定同步后健康检查的资源,只有健康检查通过才认为同步成功。Flux的Notification Controller支持发送同步事件到Slack、钉钉等IM平台。

漂移检测与回滚机制对比

漂移检测是GitOps的核心能力。ArgoCD默认每3分钟对比一次Git与集群状态,检测到漂移后在UI面板中标记Out of Sync状态。可通过argocd app diff命令查看具体差异:

argocd app diff web-frontend --revision HEAD
# 输出显示集群中镜像版本与Git声明不一致
===== apps/Deployment/web-frontend =====
- image: registry.example.com/web:v1.2.3
+ image: registry.example.com/web:v1.3.0

Flux通过kustomize-controller的dry-run模式检测漂移,漂移事件记录在Kustomization资源的status.conditions字段中。Flux默认不自动修复漂移,需手动触发reconciliation或设置prune: true。

回滚操作在GitOps中即为Git revert。ArgoCD支持通过CLI回滚到历史版本:

# 查看部署历史
argocd app history web-frontend
# 回滚到指定版本
argocd app rollback web-frontend 5

ArgoCD与Flux选型建议

ArgoCD提供Web UI和API,可视化能力强,适合需要操作面板和RBAC管理的团队。Flux纯CLI驱动,配置全部通过Git管理,更符合GitOps声明式理念。多集群管理方面,ArgoCD通过ApplicationSet实现跨集群模板化部署,Flux通过每个集群独立的fleet-infra仓库实现分层管理。CI/CD流水线集成方面,ArgoCD支持PreSync、Sync、PostSync三个Hook阶段,可在同步前后触发自定义任务。Flux支持webhook接收CI完成通知后立即触发reconciliation。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/gitops-chi-xu-bu-shu-shi-zhan-argocd-yu-flux-duo-ji-qun/

(0)
小编小编
上一篇 1小时前
下一篇 1小时前

相关推荐