
在数字化转型的浪潮中,我的团队很早就拥抱了云原生。然而,随着业务规模的扩张,我们不可避免地陷入了“混合多云”的常态:核心业务部署在私有云,弹性业务运行在公有云A,而为了满足数据合规要求,部分业务又必须部署在公有云B。这种分布式的云环境,在带来灵活性和韧性的同时,也为我们带来了巨大的运维挑战,其中最核心的痛点便是——应用如何高效、一致、可靠地分发到遍布各地的集群中?

Kurator的安装过程堪称简洁,其核心思想是使用一个“主集群”来管理一个或多个“成员集群”,从而形成一个“舰队”。
简单步骤:
准备集群:我们首先准备了一个运行在私有云中的Kubernetes集群作为主集群,并准备了另外两个分别位于阿里云和腾讯云的集群作为待接入的成员集群。
安装Kurator CLI:从Github Release页面下载对应版本的kurator CLI工具,简单放置到PATH路径即可。
创建舰队配置:编写一个Fleet YAML文件,这是整个搭建过程的核心。
apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
name: production-fleet
namespace: default
spec:
clusters:
- name: private-k8s
kubeconfig: {{ private-kubeconfig-secret }}
- name: aliyun-k8s
kubeconfig: {{ aliyun-kubeconfig-secret }}
- name: tencent-k8s
kubeconfig: {{ tencent-kubeconfig-secret }}部署舰队:使用kubectl apply -f fleet.yaml,Kurator便会自动在主集群中创建必要的控制器,并将指定的成员集群逐一接入。
安装过程中的小插曲及解决:
在接入一个公有云集群时,我们遇到了网络连通性问题。Kurator主集群无法直接访问该成员集群的API Server端点。这其实是混合云场景下的典型问题。
解决办法: Kurator提供了灵活的连接方式。我们转而使用“反连”模式。具体做法是:在成员集群中安装一个agent(通过Kurator提供的Manifest),由该agent主动向主集群建立连接。这样就完美绕过了网络边界限制。文档中关于Tunnel的配置部分清晰地指导了我们如何操作,整个过程非常顺畅。
当三个集群的状态在kubectl get fleet命令下都变为“Ready”时,我们第一次拥有了一个真正统一的控制平面,激动之情溢于言表。
搭建好舰队只是第一步,真正让我们感到震撼的是其“统一应用分发”功能。
使用体验:
Kurator通过Distribution这个CRD(自定义资源)来实现应用分发。我们以一个通用的微服务应用user-service为例,它需要部署到上述三个集群中,但在公有云集群上需要配置不同的外部数据库地址。
定义应用源:我们使用Helm Chart来打包user-service,并将其存放于内部的Git仓库中。
创建分发策略:编写一个Distribution资源。
apiVersion: distribution.kurator.dev/v1alpha1
kind: Distribution
metadata:
name: user-service-distribution
namespace: default
spec:
source:
helm:
chart: user-service
repoURL: https://our-gitlab.com/charts/
version: 1.2.0
targets:
- fleet: production-fleet # 分发到整个舰队
overrides:
- name: aliyun-k8s
value: |
config:
databaseHost: aliyun-db.prod.svc
- name: tencent-k8s
value: |
config:
databaseHost: tencent-db.prod.svc一键分发:执行kubectl apply -f distribution.yaml。
在短短几十秒内,我们通过主集群的Kubernetes API,便完成了将一个应用及其差异化配置,精准、同步地部署到了三个分散在不同云上的集群中。通过kubectl get distribution,我们可以清晰地看到应用在每个集群中的同步状态(Synced/Syncing/Failed),实现了部署过程的可观测。
对云原生平台运维的作用分析:
Overrides功能优雅地解决了多环境配置难题。我们无需为每个环境维护一个独立的Chart值文件,而是在一个统一的资源中声明差异,管理起来一目了然。Distribution资源也纳入Git管理。任何应用的变更,都通过提交PR、合并代码的方式来触发,实现了应用分发的版本化、可追溯和自动化,完美契合了GitOps理念。Distribution资源,就能安全地进行全球部署。

技术选型与适配攻坚:
在技术选型阶段,我们对比了Argo CD的ApplicationSet、Flux的Multi-Tenancy等方案。Kurator最终胜出的原因在于其“原生性”和“完整性”。它并非一个拼凑的工具,而是从一开始就为“舰队”和“分发”而设计,API直观,与Kubernetes生态无缝集成。
在适配过程中,最大的攻坚点在于安全策略的统一。我们希望在应用分发的同时,也能为每个应用自动注入相应的NetworkPolicy。Kurator的路线图中与Istio、Kyverno的深度集成给了我们信心。我们通过编写一个Admission Controller,监听Distribution资源的创建,并自动生成对应的Policy资源,再结合Kurator的策略分发能力,巧妙地解决了这一问题。
场景落地与生态协同:
我们的核心电商业务采用了“中心-边缘”架构。主站点和核心数据层部署在私有云,而为了提升全球用户的访问速度,CDN、前端页面和商品图片服务等需要部署在多个公有云的边缘节点上。
Kurator完美地支撑了这一场景:
frontend-fleet,包含所有公有云边缘集群。Distribution资源,将前端应用的版本更新在几分钟内灰度发布到全球所有边缘节点。用户反馈与价值体现:
Kurator的统一应用分发功能,对于我们而言,不仅仅是一个工具,更是一种运维范式的升级。它将我们从繁琐、易错的跨云应用部署工作中解放出来,让我们能真正像管理一个集群一样去管理一个分布全球的“舰队”。虽然Kurator作为一个新兴项目,在UI界面、生态插件丰富度上仍有成长空间,但其设计理念和核心功能已经足够强大和稳定。如果你也正深陷混合多云带来的应用分发泥潭,Kurator无疑是一个值得你深入探索和投资的未来之星。