ArgoCD多集群管理的架构设计
ArgoCD是Kubernetes生态中最主流的GitOps持续交付工具,其核心能力是将Git仓库中的声明式配置自动同步到目标集群。在多集群场景下,ArgoCD通过Cluster机制管理多个目标集群,控制平面部署在管理集群上,通过kubeconfig连接下游集群。
多集群架构的关键组件:ArgoCD Server(UI和API)、Repo Server(Git仓库缓存)、Application Controller(同步引擎)、Redis(状态缓存)。控制平面只需要部署在管理集群,下游集群不需要安装任何ArgoCD组件。
多集群注册与权限配置
注册下游集群需要准备下游集群的kubeconfig,然后通过argocd CLI或Secret对象完成注册。
# 登录ArgoCD
argocd login argocd.example.com --username admin --password $PASSWORD
# 注册下游集群
argocd cluster add production-cluster \
--kubeconfig /path/to/production-kubeconfig \
--name production \
--server-url https://argocd.example.com
# 验证集群注册状态
argocd cluster list
# SERVER NAME VERSION STATUS
# https://kubernetes.default.svc in-cluster v1.28 Successful
# https://prod-api.example.com production v1.28 Successful
也可以通过Secret方式注册集群,适合自动化场景:
apiVersion: v1
kind: Secret
metadata:
name: production-cluster
namespace: argocd
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
data:
name: cHJvZHVjdGlvbg==
server: aHR0cHM6Ly9wcm9kLWFwaQ==
config: |-
{ "bearerToken": "...", "tlsClientConfig": { "insecure": false } }
ApplicationSet实现自动化多集群分发
ApplicationSet是ArgoCD的自动化引擎,能根据模板动态生成多个Application资源,是多集群GitOps的核心。常用Generator包括Cluster Generator(按注册集群自动生成)和Git Directory Generator(按Git目录结构生成)。
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: webapp-multi-cluster
namespace: argocd
spec:
generators:
- clusters:
selector:
matchLabels:
env: production
template:
metadata:
name: "{{name}}-webapp"
spec:
project: default
source:
repoURL: https://git.example.com/platform/webapp-manifests.git
targetRevision: main
path: overlays/{{name}}
destination:
server: "{{server}}"
namespace: webapp
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
这段配置会自动为所有带env=production标签的集群创建Application,每个Application使用对应集群的overlay目录。新增集群只需注册并打标签,ApplicationSet自动生成Application。
集群差异化配置的Overlay模式
多集群场景下,不同集群的配置必然存在差异(副本数、资源配额、环境变量等)。推荐使用Kustomize的Overlay模式管理差异化配置。
# Git仓库结构
webapp-manifests/
base/ # 所有集群共享的基础配置
deployment.yaml
service.yaml
kustomization.yaml
overlays/
production/ # 生产集群差异配置
kustomization.yaml
replica-patch.yaml
resource-patch.yaml
staging/ # 预发集群差异配置
kustomization.yaml
replica-patch.yaml
# overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patchesStrategicMerge:
- replica-patch.yaml
- resource-patch.yaml
Sync策略与故障自愈机制
ArgoCD的Sync策略分为手动触发和自动同步两种模式。生产环境推荐selfHeal+prune组合:当Git仓库配置变更时自动同步到集群,当集群配置被意外修改时自动修复回Git声明的状态。
syncPolicy:
automated:
prune: true # 自动删除Git中不存在的资源
selfHeal: true # 自动修复偏离Git声明的集群状态
retry:
backoff:
duration: 5s
factor: 2
maxDuration: 3m
limit: 5
selfHeal的检测周期由argocd-cm中status.processors控制,默认10秒。对于关键业务,可以缩短检测间隔但需注意API Server的负载增加。
多集群可观测性与告警配置
ArgoCD原生提供了Application维度的健康状态和同步状态。在多集群场景下,推荐通过Prometheus采集ArgoCD指标,配合Alertmanager配置告警规则。
# ArgoCD核心监控指标
- argocd_app_info: Application信息
- argocd_app_sync_status: 同步状态
- argocd_app_health_status: 健康状态
- argocd_cluster_connection_status: 集群连接状态
# Prometheus告警规则示例
- alert: ArgoAppOutOfSync
expr: argocd_app_sync_status{sync_status="OutOfSync"} == 1
for: 15m
labels:
severity: warning
annotations:
summary: "App在集群状态偏离Git声明"
集群连接异常的监控同样关键。当ArgoCD与下游集群的网络中断时,Application状态会变为Unknown,此时需要检查Cluster Secret和kubeconfig的有效性,确认API Server的可达性和证书有效期。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/argocd-duo-ji-qun-gitops-bu-shu-yu-applicationset-zi-dong/