多集群工具与架构选型
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read643 words

多集群工具与架构选型

核心问题:什么时候需要多个 Kubernetes 集群?常见的多集群管理工具有哪些?


为什么需要多集群

原因 说明
环境隔离 dev/staging/production 完全隔离,防止测试影响生产
故障隔离 单集群故障不影响其他地区服务
合规要求 数据必须留在特定国家/地区(欧盟 GDPR、中国数据法)
规模限制 单集群节点数 < 5000,超过需要拆分
多云策略 分散到 AWS / GCP / Azure 避免云厂商锁定

多集群架构模式

graph TB subgraph "方案 A:独立集群(简单)" DEV_A["Dev 集群"] STG_A["Staging 集群"] PRD_A["Production 集群"] end subgraph "方案 B:联邦集群(复杂)" HUB_B["Hub 集群
(中央管理面)"] SP1_B["Spoke 集群 1
Asia"] SP2_B["Spoke 集群 2
US"] HUB_B --> SP1_B HUB_B --> SP2_B end

工具对比

工具 定位 优点 缺点 推荐场景
Rancher 完整多集群管理平台 UI 友好、开箱即用 重量级,引入额外组件 10+ 集群、非 K8s 原生团队
Cluster API (CAPI) 声明式集群生命周期管理 K8s 原生、可扩展 学习曲线陡 需要标准化创建/升级集群
vCluster 在 K8s 中运行虚拟 K8s 成本低、隔离好 功能有限制 开发/测试环境多租户
Fleet (Rancher) 大规模 GitOps 管理 1000+ 集群 仅 Rancher 生态 超大规模
ArgoCD GitOps 应用部署 专注应用同步 不管集群生命周期 所有场景(应用层)

Cluster API:声明式集群管理

Cluster API 把 Kubernetes 集群本身当作 K8s 资源来管理:

# AWS 上创建 EKS 集群(Cluster API + CAPA Provider)
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: prod-cluster
namespace: clusters
spec:
clusterNetwork:
pods:
cidrBlocks: ["192.168.0.0/16"]
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSManagedCluster
name: prod-cluster
controlPlaneRef:
apiVersion: controlplane.cluster.x-k8s.io/v1beta2
kind: AWSManagedControlPlane
name: prod-cluster
---
apiVersion: controlplane.cluster.x-k8s.io/v1beta2
kind: AWSManagedControlPlane
metadata:
name: prod-cluster
namespace: clusters
spec:
region: ap-southeast-1
version: "v1.29"
eksClusterName: prod-cluster
iamAuthenticatorConfig:
mapRoles:
- roleARN: arn:aws:iam::123456789:role/developers
username: developers:{{SessionName}}
groups: [developer]

vCluster:虚拟集群

vCluster 在现有集群的 Namespace 中运行完整的 K8s 控制面,每个虚拟集群完全隔离:

# 安装 vcluster CLI
curl -L -o vcluster \
"https://github.com/loft-sh/vcluster/releases/download/v0.19.0/vcluster-linux-amd64"
chmod +x vcluster && mv vcluster /usr/local/bin/
# 为开发者 alice 创建虚拟集群
vcluster create alice-dev \
--namespace team-alice \
--chart-version 0.19.0
# 连接到虚拟集群
vcluster connect alice-dev -n team-alice
# 虚拟集群内创建资源(完全隔离,不会影响宿主集群)
kubectl create deployment nginx --image=nginx
# 退出虚拟集群连接
vcluster disconnect

适用场景: - 给每个开发者独立的 K8s 环境(CI 并行测试) - 隔离不同客户的工作负载(SaaS 多租户) - 测试 K8s 升级(在 1.28 集群上运行 1.29 vCluster)


Rancher:多集群管理平台

# 使用 Helm 安装 Rancher
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm upgrade --install rancher rancher-stable/rancher \
--namespace cattle-system \
--create-namespace \
--set hostname=rancher.example.com \
--set bootstrapPassword=admin \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=admin@example.com \
--wait

Rancher 提供: - 统一 UI 管理所有集群(EKS / GKE / AKS / 自建) - 多集群 RBAC(User 跨集群统一身份) - 内置 Fleet(大规模 GitOps) - 集群监控、告警汇总


多集群 kubeconfig 管理

# 合并多个集群的 kubeconfig
KUBECONFIG=~/.kube/prod:~/.kube/staging kubectl config view --merge --flatten \
> ~/.kube/config
# 切换集群上下文
kubectl config get-contexts
kubectl config use-context prod-cluster
kubectl config use-context staging-cluster
# kubectx:更快的上下文切换工具
brew install kubectx
kubectx staging    # 切换到 staging
kubens production  # 切换到 production namespace

最佳实践

实践 说明
生产集群独立 绝不与非生产共享,独立网络和账号
集群 Terraform 化 用 CAPI 或 EKS Terraform Module 管理集群生命周期
统一身份认证 接入 OIDC(GitHub / Okta / Keycloak),不用本地 kubeconfig
GitOps 统一部署 所有集群通过 ArgoCD/Flux 管理,禁止手动 kubectl apply
跨集群服务发现 使用 Submariner / Istio 多集群实现跨集群服务互通

下一节环境提升流水线设计