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/