multi-cluster-management

多集群注册、流量与配置分发

补充说明

多集群不是默认选择。只有在合规数据驻留、跨区高可用、强租户隔离或单集群规模上限时才引入。每多一个集群,就多一套升级、证书、监控、配额和故障域。

常见模式:GitOps 每集群一份配置、集群网格做跨集群服务发现、控制平面管理集群生命周期、虚拟集群做租户隔离。

常用示例

集群登记表(必须进 Git,不能只放在 wiki):

集群 区域 环境 用途 Git 路径 Owner
prod-sh-1 上海 prod 主集群 clusters/prod-sh-1 @sre
prod-sh-2 上海 prod 同城灾备 clusters/prod-sh-2 @sre
prod-bj-1 北京 prod 异地灾备 clusters/prod-bj-1 @sre

Argo CD ApplicationSet 按集群分发:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: platform-addons
  namespace: argocd
spec:
  generators:
    - clusters:
        selector:
          matchLabels:
            tier: prod
  template:
    metadata:
      name: '{{name}}-addons'
    spec:
      project: platform
      source:
        repoURL: https://git.example.com/platform.git
        targetRevision: main
        path: addons
      destination:
        server: '{{server}}'
        namespace: kube-system
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

Cilium Cluster Mesh 跨集群连通:

cilium clustermesh enable --context prod-sh-1
cilium clustermesh enable --context prod-sh-2
cilium clustermesh connect --context prod-sh-1 --destination-context prod-sh-2

方案选择:

需求 首选方案 不建议
合规数据驻留 独立集群 + 本地存储 单集群多命名空间
跨区高可用 多集群 + 全局负载均衡 未验证的单集群多可用区
统一发布 ApplicationSet 或 Fleet 手工逐集群 kubectl

决策规则:

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. 什么情况下不应该引入多集群?
  2. ApplicationSet 的 clusters generator 解决什么问题?
  3. 多集群环境为什么必须做故障转移演练?
答案
  1. 单集群通过多可用区、命名空间和配额已经能满足可用性、隔离和规模要求时。
  2. 它从 Argo CD 的集群注册信息生成 Application,把同一套配置自动分发到匹配的集群。
  3. 配置存在不等于链路可用;DNS、网络、证书、容量和负载均衡都可能在切换时失败。

相关条目