Argo CD多集群管理:GitOps发布流水线进阶实战 - 第1节

1.1 课程导学:为什么需要多集群 GitOps?

在云原生技术快速普及的今天,单一 Kubernetes 集群已无法满足企业级应用的隔离、容灾与合规需求。多集群架构成为必然选择,但随之而来的是配置碎片化、版本漂移、权限分散等运维难题。GitOps 以声明式配置和版本控制为核心,为多集群管理提供了可审计、可回滚、自动化的解决方案。

本课程以 Argo CD 为核心工具,深入讲解如何通过 GitOps 流水线统一管理多个 Kubernetes 集群的发布流程。你将掌握从单集群到多集群的进阶技巧,包括 ApplicationSet、多集群 RBAC、渐进式交付、故障自愈等实战能力。

课程核心目标

目标领域 具体能力
多集群管理 使用 Argo CD 统一纳管 3 个以上 K3s 集群,实现跨集群应用同步
GitOps 流水线 设计基于 Git 仓库的多环境发布流水线,支持灰度、蓝绿部署策略
安全与合规 配置多租户 RBAC、Sealed Secrets 加密、策略即代码(OPA/Gatekeeper)
故障自愈 利用 Argo CD 自动检测集群状态漂移并回滚至期望状态
可观测性 集成 Prometheus/Grafana 监控多集群同步状态与发布指标

适用人群

  • 已有 Kubernetes 基础,希望掌握多集群管理的运维/DevOps 工程师
  • 正在或计划实施 GitOps 流程的 SRE 与平台工程师
  • 对 Argo CD 有初步了解,需要进阶多集群与流水线编排的开发者
学习前提: 建议具备基本的 Kubernetes 操作经验(kubectl、YAML 编写),了解 Git 工作流。本课程实验环境基于 K3s,轻量且资源友好,可在个人笔记本或云主机上运行。

1.2 多集群 GitOps 架构概览

下图展示了本课程将要构建的多集群 GitOps 核心架构。Argo CD 作为控制平面,通过 Git 仓库驱动多个目标集群的应用状态同步。

多集群 GitOps 架构概览 多集群 GitOps 架构概览 Git 仓库 应用声明 + 配置 Argo CD 控制平面 ApplicationSet · 多集群 RBAC · 策略引擎 集群 A(生产) K3s · 3 节点 集群 B(预发) K3s · 2 节点 集群 C(开发) K3s · 1 节点 状态反馈 · 漂移检测 💡 所有集群的应用声明统一存储在 Git 仓库中,Argo CD 自动确保集群状态与 Git 一致。 开发/预发/生产集群通过标签或名称区分,ApplicationSet 动态生成部署配置。

1.3 实验环境搭建指南

本课程实验环境基于 K3s 轻量级 Kubernetes 发行版,你可以在单台 Linux 服务器或虚拟机中通过 multipass 或 k3d 快速创建多个集群。以下是环境清单与搭建步骤。

环境需求

组件 版本要求 说明
操作系统 Ubuntu 22.04 / CentOS 8+ 推荐 Ubuntu,包管理更友好
K3s v1.28+ 单节点即可,多节点可选
kubectl v1.28+ 与 K3s 版本匹配
Helm v3.12+ 用于安装 Argo CD 及扩展组件
Git v2.30+ 用于管理配置仓库
内存 ≥ 8GB 运行 3 个 K3s 集群 + Argo CD

步骤 1:安装 K3s 集群

使用官方脚本安装第一个 K3s 集群(命名为 cluster-dev):

# 安装 K3s 主节点
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--cluster-cidr=10.42.0.0/16 --service-cidr=10.43.0.0/16" sh -

# 获取 kubeconfig
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
export KUBECONFIG=~/.kube/config

# 验证集群状态
kubectl get nodes

步骤 2:创建多集群(k3d 方式)

使用 k3d 在单机快速创建三个独立集群,便于多集群管理实验:

# 安装 k3d
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

# 创建三个集群
k3d cluster create cluster-dev   --servers 1 --agents 1 --port 6443:30443@server:0
k3d cluster create cluster-staging --servers 1 --agents 1 --port 6444:30444@server:0
k3d cluster create cluster-prod   --servers 1 --agents 2 --port 6445:30445@server:0

# 查看集群列表
k3d cluster list
多集群 kubeconfig 合并: 使用 k3d kubeconfig merge cluster-dev cluster-staging cluster-prod --output ~/.kube/config 将三个集群的凭据合并到同一个 kubeconfig 文件中,并通过 kubectl config use-context 切换。

步骤 3:安装 Argo CD

在 cluster-dev 集群中安装 Argo CD 作为控制平面:

# 创建命名空间
kubectl create namespace argocd

# 使用 Helm 安装 Argo CD
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

helm install argocd argo/argo-cd \
  --namespace argocd \
  --set server.service.type=NodePort \
  --set server.service.nodePortHttp=30080 \
  --set configs.params."server\.insecure"=true \
  --version 6.7.0

# 等待所有 Pod 就绪
kubectl wait --for=condition=Ready pods --all -n argocd --timeout=300s

# 获取初始 admin 密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

步骤 4:验证安装

通过浏览器或 CLI 访问 Argo CD:

# 端口转发(如果使用 NodePort 则直接访问节点 IP:30080)
kubectl port-forward svc/argocd-server -n argocd 8080:80 &

# CLI 登录
argocd login localhost:8080 --username admin --password $(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d) --insecure

# 查看当前集群状态
argocd cluster list
注意: 生产环境请务必配置 HTTPS 证书并修改默认 admin 密码。本课程实验环境使用 --insecure 仅用于本地测试。

1.4 实验环境拓扑

下图展示了本课程实验环境的完整拓扑结构,包含控制平面与三个目标集群的网络关系。

实验环境拓扑 实验环境拓扑(单机多集群) 物理主机 / 虚拟机(Ubuntu 22.04 · 8GB+ 内存) Docker 容器运行时 cluster-dev Argo CD 控制平面 K3s 1 节点 NodePort: 30080 API: 6443 cluster-staging 预发环境 K3s 1 节点 API: 6444 cluster-prod 生产环境 K3s 1 节点 API: 6445 🔗 三个集群通过 Docker 网络互通,Argo CD 使用 kubeconfig context 管理各集群。

1.5 本章小结与实验检查清单

完成本章学习后,你应具备以下实验环境基础。请逐项确认:

检查项 验证命令 预期结果
K3s 集群运行中 kubectl get nodes 显示 1 个 Ready 节点
多集群 kubeconfig kubectl config get-contexts 至少 3 个 context(dev/staging/prod)
Argo CD Pod 就绪 kubectl get pods -n argocd 所有 Pod 状态为 Running
Argo CD CLI 登录 argocd account get-user-info 返回 admin 用户信息
Git 仓库初始化 git init && git remote -v 本地仓库已创建,远程仓库已关联