Kurator实战指南:从零构建企业级分布式云原生平台
Kurator:多云K8s集群管理的开源解决方案 Kurator是一个开源的分布式云原生管理平台,旨在解决企业多云Kubernetes集群管理中的痛点。它整合了Karmada、Istio、KubeEdge等优秀开源项目,提供了统一的管理层,简化了多云环境下的集群管理。 核心功能包括: Fleet抽象:可将多个集群组成舰队统一管理 跨集群应用分发:支持差异化配置部署 统一监控:集成Prometheu
写在前面
最近半年一直在折腾多云管理的事情,公司业务分散在阿里云、AWS和华为云三个平台,20多个K8s集群管理起来简直要命。每次发布新版本都要准备好几套配置文件,在不同的kubectl context之间切换,稍不注意就会把生产环境的配置应用到测试集群上。后来偶然接触到Kurator这个项目,试用了几个月下来,感觉确实解决了不少实际问题。
今天想系统地聊聊Kurator的技术架构、实战应用,以及我对分布式云原生未来发展的一些思考。这篇文章会包含不少代码和配置示例,如果你也在为多云管理头疼,希望能给你一些启发。

一、为什么需要Kurator?先看看痛点
1.1 多云管理的真实困境
让我先用一个表格总结下当前企业面临的核心问题:
| 痛点 | 具体表现 | 影响 |
|---|---|---|
| 管理碎片化 | 需要登录多个云平台控制台,学习不同的操作界面 | 效率低下,容易出错 |
| 配置不一致 | 各集群配置版本不同,难以保证一致性 | 故障排查困难 |
| 应用部署复杂 | 同一应用需要在多个集群重复部署 | 发布周期长 |
| 监控数据孤岛 | 各集群监控系统独立,缺乏全局视图 | 无法整体把控 |
传统的做法是写一堆脚本来自动化这些操作,但脚本维护成本很高,而且缺乏统一的抽象。Kurator的价值就在于提供了一套开箱即用的分布式云原生解决方案。
1.2 Kurator的核心理念
Kurator不是要重新发明轮子,而是整合业界最优秀的开源项目:Karmada做多集群编排、Istio做服务网格、KubeEdge做边缘计算、Volcano做批量调度、Prometheus做监控。它在这些组件之上提供了统一的管理层,让复杂的技术栈变得简单易用。
最关键的是Fleet(舰队)这个概念。你可以把多个集群组成一个Fleet,然后对整个Fleet进行统一管理。这种抽象很符合业务思维,比如可以按环境划分(生产Fleet、测试Fleet),也可以按地域划分(中国Fleet、海外Fleet)。
二、Kurator技术架构深度解析
2.1 整体架构
Kurator主要由两个核心组件构成:
Fleet Manager(舰队管理器)
-
负责Fleet资源的抽象与管理
-
处理多集群策略编排
-
控制应用分发策略
Cluster Operator(集群操作器)
-
基于Cluster API管理集群生命周期
-
提供声明式的集群配置
-
自动化集群运维操作

2.2 快速开始:部署你的第一个Kurator环境
下面我用一个实际的部署示例来说明,首先安装Kurator的CLI工具:
# 下载并安装kurator CLI
curl -Lo kurator https://github.com/kurator-dev/kurator/releases/latest/download/kurator-linux-amd64
chmod +x kurator
sudo mv kurator /usr/local/bin/
# 验证安装
kurator version
然后在宿主集群上部署Kurator控制平面:
# 创建kurator命名空间
kubectl create namespace kurator-system
# 安装Kurator operator
kurator install --kurator-version=v0.4.0
# 检查安装状态
kubectl get pods -n kurator-system
输出应该类似这样:
NAME READY STATUS RESTARTS AGE
kurator-fleet-manager-6d8b7c5f9c-x7k2m 1/1 Running 0 2m
kurator-cluster-operator-5b9c8d7f6d-p8n4q 1/1 Running 0 2m
2.3 创建第一个Fleet
接下来创建一个Fleet来管理我们的集群。假设我们有三个K8s集群,分别部署在阿里云、AWS和华为云:
apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
name: production-fleet
namespace: default
spec:
clusters:
- name: aliyun-prod-01
# 集群的kubeconfig secret
secretRef:
name: aliyun-prod-01-kubeconfig
- name: aws-prod-01
secretRef:
name: aws-prod-01-kubeconfig
- name: huawei-prod-01
secretRef:
name: huawei-prod-01-kubeconfig
# Fleet级别的策略配置
plugin:
# 启用统一监控
monitoring:
enabled: true
prometheus:
version: v2.45.0
# 启用流量治理
trafficManagement:
enabled: true
istio:
version: 1.18.0
应用这个配置:
kubectl apply -f fleet.yaml
# 查看Fleet状态
kubectl get fleet production-fleet -o yaml
2.4 跨集群应用分发实战
现在我们有了Fleet,可以尝试部署一个跨集群的应用。这里用一个简单的nginx服务作为示例:
apiVersion: apps.kurator.dev/v1alpha1
kind: Application
metadata:
name: nginx-demo
namespace: default
spec:
source:
gitRepository:
url: https://github.com/your-org/nginx-manifests
branch: main
path: ./deploy
syncPolicies:
- destination:
fleet: production-fleet
# 在所有集群部署3个副本
kustomization:
replicas: 3
images:
- name: nginx
newTag: 1.25.0
Kurator会自动将这个应用同步到Fleet中的所有集群。如果你想针对不同集群做差异化配置,可以使用override策略:
apiVersion: apps.kurator.dev/v1alpha1
kind: Application
metadata:
name: nginx-demo
namespace: default
spec:
source:
gitRepository:
url: https://github.com/your-org/nginx-manifests
branch: main
path: ./deploy
syncPolicies:
- destination:
fleet: production-fleet
kustomization:
replicas: 3
# 针对特定集群的覆盖策略
overrides:
# AWS集群需要更多副本
- clusterSelector:
matchLabels:
provider: aws
patches:
- op: replace
path: /spec/replicas
value: 5
# 华为云集群使用特定的镜像仓库
- clusterSelector:
matchLabels:
provider: huawei
patches:
- op: replace
path: /spec/template/spec/containers/0/image
value: swr.cn-north-4.myhuaweicloud.com/my-org/nginx:1.25.0
三、核心能力深度实践
3.1 多集群监控:统一视图的价值
Kurator集成了Prometheus、Thanos和Grafana,提供开箱即用的多集群监控方案。架构思路是:
-
每个成员集群运行一个Prometheus采集本地指标
-
Thanos Sidecar将数据推送到对象存储
-
宿主集群的Thanos Query聚合全局数据
-
Grafana连接Thanos Query展示统一视图
启用监控功能:
apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
name: production-fleet
spec:
clusters:
- name: aliyun-prod-01
secretRef:
name: aliyun-prod-01-kubeconfig
- name: aws-prod-01
secretRef:
name: aws-prod-01-kubeconfig
plugin:
monitoring:
enabled: true
# Thanos对象存储配置
thanos:
objectStorage:
type: s3
config:
bucket: kurator-metrics
endpoint: s3.amazonaws.com
access_key: ${AWS_ACCESS_KEY}
secret_key: ${AWS_SECRET_KEY}
# Grafana配置
grafana:
enabled: true
adminPassword: ${GRAFANA_ADMIN_PASSWORD}
部署后,你可以访问Grafana查看全局指标。我写了一个简单的PromQL查询来展示跨集群的Pod总数:
# 按集群统计Pod数量
sum by (cluster) (kube_pod_info)
# 按Fleet统计总CPU使用率
sum(rate(container_cpu_usage_seconds_total{fleet="production-fleet"}[5m]))
/ sum(kube_node_status_allocatable{resource="cpu"}) * 100
实际使用中,这种统一监控视图帮了大忙。有一次我们发现某个服务响应变慢,通过Grafana一眼就看出是AWS那边的集群负载突然飙升,及时做了流量切换,避免了更大的影响。
3.2 边缘计算:KubeEdge实战
我们公司有个IoT项目,在全国200多个门店部署了边缘设备做客流分析。之前边缘设备管理很头疼,每次模型更新都要运维同学出差去现场。用了Kurator+KubeEdge之后,真的省心多了。
首先在云端集群安装KubeEdge云端组件:
# 使用Kurator安装KubeEdge
kurator install kubeedge-cloudcore --version=v1.14.0
# 生成边缘节点接入token
kurator edge token create --fleet=production-fleet
然后在边缘设备上安装EdgeCore:
# 在边缘设备执行
wget https://github.com/kubeedge/kubeedge/releases/download/v1.14.0/keadm-v1.14.0-linux-amd64.tar.gz
tar -zxvf keadm-v1.14.0-linux-amd64.tar.gz
cd keadm-v1.14.0-linux-amd64/keadm/
# 加入集群
sudo ./keadm join \
--cloudcore-ipport=cloudcore.example.com:10000 \
--token=${EDGE_TOKEN} \
--edgenode-name=store-beijing-01
部署边缘AI推理应用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: face-detection
namespace: edge-apps
spec:
replicas: 1
selector:
matchLabels:
app: face-detection
template:
metadata:
labels:
app: face-detection
spec:
# 指定调度到边缘节点
nodeSelector:
node-role.kubernetes.io/edge: ""
containers:
- name: detector
image: my-registry/face-detector:v2.0
resources:
limits:
# 使用边缘设备的GPU
nvidia.com/gpu: 1
volumeMounts:
- name: model
mountPath: /models
- name: video
mountPath: /dev/video0
volumes:
- name: model
# 模型存储在边缘本地
hostPath:
path: /data/models
- name: video
hostPath:
path: /dev/video0
关键的是,边缘节点即使断网了也能继续工作。我们测试过,网络中断后边缘应用依然正常运行,重新联网后会自动同步状态。这对于实际部署来说太重要了。
3.3 AI工作负载:Volcano批量调度
我们有个机器学习团队,经常需要跑大规模的模型训练任务。传统的K8s调度器在这种场景下有个大问题:分布式训练需要多个Pod同时启动,但默认调度器可能只调度成功一部分,导致任务卡住。
Volcano的Gang Scheduling完美解决了这个问题。先启用Volcano:
apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
name: ai-training-fleet
spec:
clusters:
- name: gpu-cluster-01
secretRef:
name: gpu-cluster-01-kubeconfig
plugin:
batchScheduling:
enabled: true
volcano:
version: v1.8.0
然后提交一个分布式训练任务:
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
name: pytorch-distributed-training
spec:
# 最小成功数,必须全部Pod就绪才开始训练
minAvailable: 16
schedulerName: volcano
queue: ai-training
tasks:
- replicas: 1
name: master
template:
spec:
containers:
- name: pytorch
image: pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime
command: ["python", "train.py"]
args:
- --master-addr=pytorch-distributed-training-master-0
- --master-port=23456
- --world-size=16
- --rank=0
resources:
limits:
nvidia.com/gpu: 1
- replicas: 15
name: worker
template:
spec:
containers:
- name: pytorch
image: pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime
command: ["python", "train.py"]
args:
- --master-addr=pytorch-distributed-training-master-0
- --master-port=23456
- --world-size=16
resources:
limits:
nvidia.com/gpu: 1
Volcano会确保所有16个Pod都调度成功后,才真正启动训练任务。这样避免了资源浪费,也提高了GPU利用率。我们测试下来,GPU利用率从之前的60%提升到了85%以上。
还可以配置队列和优先级:
apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
name: ai-training
spec:
# 队列权重,高权重队列优先获得资源
weight: 100
# 资源配额
capability:
cpu: 200
memory: 1000Gi
nvidia.com/gpu: 32
---
apiVersion: scheduling.volcano.sh/v1beta1
kind: PriorityClass
metadata:
name: high-priority
value: 1000
globalDefault: false
这样不同团队的训练任务可以按优先级和配额合理分配资源,既保证了公平性,又提高了资源利用率。
四、与其他方案的对比
很多人会问,市面上多云管理方案这么多,为什么选Kurator?我简单对比下几个主流方案:
| 方案 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| Kurator | 开箱即用、组件整合好、Fleet抽象清晰 | 社区相对较新 | 中大型企业多云管理 |
| Rancher | UI友好、生态完整 | 商业化、有一定厂商锁定 | 需要UI操作的场景 |
| 原生Karmada | 功能强大、性能好 | 需要自己集成其他组件 | 技术能力强的团队 |
从实际使用体验来说,Kurator最大的优势是省心。你不需要自己去研究Prometheus怎么做多集群监控、Istio怎么跨集群通信,这些Kurator都帮你配好了。对于中小团队来说,这个价值是巨大的。
五、对分布式云原生未来的思考
5.1 标准化是大势所趋
云原生生态现在太碎片化了,CNCF Landscape图虽然看起来很繁荣,但对普通用户来说就是噩梦。未来一定会出现更多像Kurator这样的"整合者",把最佳实践固化下来,降低使用门槛。
我觉得Kubernetes已经成为了云原生的"操作系统",接下来需要的是在它之上构建更高层次的抽象。就像当年Java有了Spring框架一样,云原生也需要类似的统一框架。
5.2 边缘计算将成为标配
5G都普及了,边缘算力会越来越丰富。但如果缺乏好的管理工具,这些算力就是一座座孤岛。KubeEdge的云边协同思路是对的,但还需要继续优化:
-
更轻量化:边缘设备资源有限,运行时占用要降到最低
-
更智能的调度:根据网络质量、算力情况动态调度
-
安全增强:边缘设备直接暴露在外网,安全风险更高
Kurator通过整合KubeEdge,为边缘场景提供了一个不错的起点。我期待后续版本能进一步优化边缘体验。
5.3 可观测性需要全链路打通
现在监控、日志、追踪往往是分离的系统。未来应该实现真正的"一栈式"可观测性:
-
统一的数据模型(OpenTelemetry在做这个事)
-
智能化的异常检测(结合AIOps)
-
自动化的根因分析
Kurator目前在监控这块做得不错,但日志和追踪还需要用户自己集成。希望后续能提供更完整的可观测性方案。
5.4 成本优化会越来越重要
多云管理不只是为了高可用,还有个重要目的是省钱。云厂商的定价差异很大,智能调度可以显著降低成本:
# 伪代码:智能选择最便宜的云平台
def schedule_workload(workload):
# 获取各云平台当前价格
prices = {
'aliyun': get_aliyun_price(workload.resources),
'aws': get_aws_price(workload.resources),
'huawei': get_huawei_price(workload.resources)
}
# 考虑数据传输成本
for cloud in prices.keys():
prices[cloud] += calculate_egress_cost(cloud, workload.data_size)
# 选择最便宜的
cheapest_cloud = min(prices, key=prices.get)
# 考虑可用性要求
if workload.ha_required and prices[cheapest_cloud] < prices[second_cheapest] * 0.8:
return [cheapest_cloud, second_cheapest] # 多云部署
else:
return [cheapest_cloud]
Kurator可以在Fleet策略中内置这种成本优化逻辑,自动选择最经济的部署方案。
5.5 安全合规必须内置
随着数据保护法规越来越严格(GDPR、数据安全法等),云原生平台必须内置合规能力:
# 未来Kurator可以支持这样的策略配置
apiVersion: policy.kurator.dev/v1alpha1
kind: CompliancePolicy
metadata:
name: gdpr-policy
spec:
# 数据不能出境
dataResidency:
- region: eu-west-1
allowedRegions: [eu-west-1, eu-central-1]
deniedRegions: [us-*, cn-*]
# 数据加密要求
encryption:
atRest: required
inTransit: required
keyRotation: 90d
# 审计日志
audit:
enabled: true
retention: 7y # GDPR要求
immutable: true
六、给新手的建议
如果你也想尝试Kurator,我有几个建议:
第一步:打好Kubernetes基础
Kurator是建立在K8s之上的,如果连Pod、Service这些基本概念都不清楚,直接上手会很吃力。建议先用Minikube在本地玩玩K8s,熟悉基本操作。
第二步:从简单场景开始
不要一开始就搞个20个集群的大型Fleet。先用两三个测试集群试试水,部署个简单的应用,感受一下多集群管理的流程。
第三步:逐步添加功能
Kurator集成了很多组件,但不需要一次性全部启用。先把基本的应用分发跑通,再考虑监控、服务网格这些高级功能。
第四步:多看文档和案例
Kurator的官方文档写得还算清楚,GitHub上也有一些示例。遇到问题先查文档,实在解决不了再去社区提Issue。
相关资源:
-
Kurator官方文档:https://kurator.dev/docs/
-
GitCode镜像:https://gitcode.com/kurator-dev
-
介绍视频:https://bbs.huaweicloud.com/live/DTT_live/202308161630.html
结语
云原生技术发展到今天,已经过了"野蛮生长"的阶段。现在需要的不是更多新工具,而是把现有的优秀工具整合起来,让更多人能够享受到云原生的红利。
Kurator在这方面做了一个很好的尝试。它不完美,也还在快速演进中,但方向是对的。作为一个普通开发者,我很高兴看到有这样的开源项目出现,也期待它能够发展得更好。
如果你也在为多云管理头疼,不妨试试Kurator。也许它就是你一直在寻找的那个答案。
更多推荐


所有评论(0)