Kubernetes 如何配置多集群统一管理与调度

作者:袖梨 2026-08-18

Kubernetes多集群统一管理与调度需选对架构模式、配好控制平面、打通服务发现,主流生产环境弃用停滞的KubeFed,转而采用ArgoCD+Admiralty/Liqo等灵活组合方案,结合CoreDNS+ExternalDNS实现跨集群服务发现,并通过kubeconfig整合与标签化context支持多集群kubectl操作。

Kubernetes 多集群统一管理与调度不是靠单个命令就能完成的事,核心在于选对架构模式、配好控制平面、打通服务发现。目前主流生产环境不依赖已停滞的 KubeFed,而是用更灵活、可维护的组合方案。

选准统一管理架构模式

根据业务目标决定底层架构:

  1. 统一部署+独立运维:用 ArgoCD 多集群模式 + 自定义控制器,把每个集群当独立发布目标,GitOps 流水线驱动,适合 CI/CD 成熟、需强环境隔离的团队
  2. 跨集群智能调度:用 Admiralty,它通过虚拟节点把远端集群“映射”进主控集群,调度器能实时感知各集群资源水位和拓扑标签(如 topology.kubernetes.io/region=us),自动分发 Pod
  3. 资源弹性借用:用 Liqo,不迁移应用、不改 YAML,直接把其他集群的空闲节点“投射”成本地可用资源池,适合应对突发流量或短期扩容

配置跨集群服务发现

服务要跨集群调用,光靠 .svc.cluster.local 不行,得引入外部 DNS 层:

  1. 在每个集群部署 CoreDNS,并配置 upstream 指向全局 DNS 服务器(如 Consul 或自建 Bind)
  2. 配合 ExternalDNS,将 Service 自动注册为 <service>.<namespace>.svc.cluster-ext 域名
  3. 应用内调用时使用该域名,DNS 解析会返回目标集群的 ClusterIP 或 Ingress IP,实现透明路由

打通集群访问与凭证管理

kubectl 要能同时操作多个集群,关键在 kubeconfig 整合:

  1. 每个集群生成独立 kubeconfig 文件(如 kubeconfig-uskubeconfig-eu
  2. kubectl config view --merge --flatten 合并所有配置到 ~/.kube/config
  3. 为每个 context 打上 label,例如:kubectl config set-context kind-us --user=kind-us --cluster=kind-us --namespace=default,再加标签:kubectl config set-context kind-us --env=prod --region=us
  4. 后续可通过 kubectl --context=kind-us get pod 或结合 kubectx/kubens 工具快速切换

落地一个最小可行调度闭环

以 Admiralty 为例,三步跑通:

  1. 在管理集群(cd)安装 Admiralty 控制器;在工作集群(us/eu)安装 agent 并打 region 标签
  2. 创建 VirtualNode 资源,声明每个工作集群可贡献的 CPU/Mem 容量
  3. 提交带 topologySpreadConstraintsnodeSelector: topology.kubernetes.io/region: us 的 Deployment,调度器自动选择合适集群的节点部署

相关文章

精彩推荐