K8s联合集群

Kubernetes联合集群实战手册:让多集群管理像用单集群一样简单

作为同时管理过30+集群的运维老兵,今天给大家解剖一个高阶话题——如何让多个K8S集群像变形金刚合体一样协同工作。文末附赠我们趟过的坑和填坑指南,建议先收藏再看!


一、什么是联合集群?(说人话版)

想象一下:你的业务部署在阿里云、AWS、本地IDC三个集群,这时候:

  • 如何一键把应用部署到所有集群?
  • 某个集群挂了怎么自动转移流量?
  • 怎么统一查看所有集群的资源状态?

联合集群就是为解决这些问题而生的集群指挥官系统,它能让你:
✅ 跨集群调度应用(像玩战略游戏一样拖拽部署)
✅ 全局负载均衡(智能分配用户到最近的集群)
✅ 故障自动转移(某个集群挂了秒级切换)
✅ 统一配置管理(一次修改,全集群生效)

联合集群架构图


二、什么场景必须用联合集群?

场景 痛点 联合集群解决方案
多地域部署 手动同步配置效率低 配置漂移自动同步
混合云管理 不同云厂商API不兼容 统一控制平面
灾备方案 人工切换耗时过长 故障自动检测+流量切换
大规模集群 单集群达到性能瓶颈 横向扩展多个小集群

真实案例:某跨境电商平台在黑色星期五期间,通过联合集群实现:

  • 欧美用户流量自动路由到AWS集群
  • 亚太用户导向阿里云集群
  • 当AWS某个可用区故障时,5秒内将流量切到GCP备份集群

三、主流方案选型(2023最新版)

1. Karmada(华为开源)
# 安装命令
helm install karmada -n karmada-system \
  --create-namespace \
  oci://registry-1.docker.io/karmada/karmada-chart
  • 优势:原生API兼容性好,支持策略式分发
  • 适用:多云混合场景
2. Clusternet(腾讯开源)
# 子集群注册示例
apiVersion: clusters.clusternet.io/v1beta1
kind: ManagedCluster
metadata:
  name: aws-prod
spec:
  clusterType: Kubernetes
  apiServerURL: https://api.aws-prod.cluster:6443
  • 优势:支持万级集群管理
  • 适用:超大规模边缘计算场景
3. Google Anthos
  • 优势:商业产品开箱即用
  • 缺点:年费≈一个小团队工资

四、核心配置实战

1. 跨集群部署应用
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
  name: nginx-propagation
spec:
  resourceSelectors:
    - apiVersion: apps/v1
      kind: Deployment
      name: nginx
  placement:
    clusterAffinity:
      clusterNames:
        - aws-cluster
        - aliyun-cluster
    replicaScheduling:
      replicaDivisionPreference: Weighted
      replicaSchedulingType: Divided
      weightPreference:
        staticWeightList:
          - targetCluster:
              clusterNames: [aws-cluster]
            weight: 70
          - targetCluster:
              clusterNames: [aliyun-cluster]
            weight: 30
2. 全局服务发现
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceImport
metadata:
  name: global-nginx
spec:
  type: ClusterSetIP
  ports:
  - port: 80
    protocol: TCP
3. 跨集群HPA
apiVersion: autoscaling.karmada.io/v1alpha1
kind: FederatedHPA
metadata:
  name: cross-cluster-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 10
  maxReplicas: 100
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60

五、生产环境四大天坑

坑1:网络延迟导致脑裂
  • 症状:配置同步冲突,服务来回震荡
  • 解决:部署全局etcd集群 + 调整Quorum参数
坑2:配置漂移引发事故
  • 症状:部分集群配置被意外修改
  • 解决:启用配置漂移检测
karmadactl apply federated-resource-override
坑3:证书管理混乱
  • 症状:集群间TLS握手失败
  • 解决:使用cert-manager统一签发证书
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: karmada-global-issuer
spec:
  ca:
    secretName: karmada-ca-cert
坑4:监控数据爆炸
  • 症状:Prometheus被海量数据打挂
  • 解决:采用Thanos联邦集群
# thanos配置示例
storeGroups:
- name: karmada-global
  endpoints:
  - karmada-control-plane-thanos-store:10901
  - aws-cluster-thanos-store:10901
  - aliyun-cluster-thanos-store:10901

六、运维检查清单


七、成本优化技巧

  1. 智能调度省钱法
placement:
  clusterTolerations:
  - key: "cost-type"
    operator: "Equal"
    value: "spot-instance"
    effect: "NoSchedule"
  1. 自动伸缩冷集群
# 非高峰时段自动缩容备用集群
kubectl scale --replicas=0 federateddeployment/backend
  1. 流量导向最便宜区域
trafficPolicy:
  loadBalancer:
    localityAwareness:
      enabled: true
    costAwareRouting:
      regionCosts:
        us-east: 1.0
        ap-southeast: 0.7

八、安全加固必选项

  1. 集群间通信使用WireGuard加密
  2. 启用跨集群RBAC审计
  3. 定期轮换联合控制平面证书
  4. 禁止跨集群特权容器调度

最后给个灵魂建议:不要为了用联合集群而用!满足以下任意条件再考虑:

  • 集群数量≥3
  • 有多云/多地域需求
  • 单集群规模超过5k节点
  • 有严格灾备要求

(配个梗图:左边运维小哥手忙脚乱操作多个集群控制台,右边大佬喝着咖啡看联合集群面板,字幕"降维打击")

posted on 2025-03-18 09:30  Leo-Yide  阅读(27)  评论(0)    收藏  举报