一、多集群管理概述
多集群管理是云原生扩展的关键:
使用场景:
- 多地域部署
- 多环境隔离
- 灾备恢复
- 混合云
二、Karmada架构
1. 架构图
┌─────────────────────────────────────────────────────────────┐
│ Karmada API Server │
└─────────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────────┼───────────────────────────────┐
│ Karmada Controller │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Push │ │ Pull │ │ Policy │ │
│ │ Controller│ │ Controller│ │ Controller│ │
│ └────────────┘ └────────────┘ └────────────┘ │
└─────────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────────┼───────────────────────────────┐
│ Member Clusters │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Cluster1 │ │ Cluster2 │ │ Cluster3 │ │ Cluster4 │ │
│ │ (北京) │ │ (上海) │ │ (广州) │ │ (深圳) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
2. 安装Karmada
bash
# 安装Karmada
kubectl rollout status deployment/karmada-apiserver -n karmada-system
kubectl rollout status deployment/karmada-controller-manager -n karmada-system
# 添加集群
kubectl get clusters
3. 跨集群调度
yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: myapp-propagation
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
namespace: default
name: myapp
placement:
clusterAffinity:
clusterNames:
- cluster-beijing
- cluster-shanghai
replicaScheduling:
replicaSchedulingType: Divided
weightPreference:
staticWeightList:
- clusterName: cluster-beijing
weight: 1
- clusterName: cluster-shanghai
weight: 1
三、Rancher Fleet架构
1. 架构
┌─────────────────────────────────────────────────────────────┐
│ Fleet Manager │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ GitRepo │ │ Cluster │ │ Bundle │ │
│ │ Watcher │ │ Manager │ │ Deployer │ │
│ └────────────┘ └────────────┘ └────────────┘ │
└─────────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────────┼───────────────────────────────┐
│ Registered Clusters │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ RKE1 │ │ RKE2 │ │ K3s │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
2. 配置示例
yaml
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: myapp
namespace: fleet-default
spec:
repo: https://github.com/myorg/myapp
branch: main
paths:
- /deploy
targets:
- name: prod
clusterSelector:
matchLabels:
env: prod
四、多集群策略
1. 流量分发
yaml
apiVersion: networking.karmada.io/v1alpha1
kind: MultiClusterIngress
metadata:
name: myapp-ingress
spec:
ingressClassName: nginx
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80
gateways:
- clusterNames:
- cluster-beijing
- cluster-shanghai
2. 灾难恢复
yaml
apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
name: critical-app
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: critical-app
placement:
clusterAffinity:
clusterNames:
- primary-cluster
failover:
applicationFailover: true
gracePeriodSeconds: 10
五、总结
多集群管理核心要点:
- Karmada:K8s原生,K8s SIG项目
- Fleet:Rancher生态,简洁
- 跨集群调度:统一管理
- 灾备:故障转移
个人观点,仅供参考