【前瞻创想】Kurator云原生大揭秘:搞定多集群管理与边缘计算的终极杀器

说实话,现在的云原生圈子,单集群玩得溜已经不稀奇了,真正的狠活儿都在多集群和边缘计算上。咱们今天不整那些虚头巴脑的概念,直接聊聊 Kurator 这个项目。这玩意儿就像是一个云原生的“总管大太监”,把下面那些 Karmada、Istio、Volcano 啥的都收拾得服服帖帖。如果你被多云环境折磨得掉头发,那 Kurator 绝对是你的救星。咱们今天就把它拆开了揉碎了讲讲,顺便带你把环境搭起来。

一、 啥是 Kurator?这架构到底是咋回事?

分布式云原生架构是个啥

咱们先聊聊大背景。现在的业务早就不是跑在一个机房里那么简单了。你可能有阿里的云、腾讯的云,还有自家地下室的机房,甚至还有那一堆分布在全国各地的边缘设备。这就叫分布式云原生架构。以前咱们管这叫“异地多活”或者“混合云”,但现在更进一步,是要把这些散落在天涯海角 computing power 统一管理起来,就像管理一台大电脑一样。Kurator 就是干这个的,它不是重新造轮子,而是把现有的轮子组装成了一辆跑车。

Kurator 架构拆解

这张Kurator架构图挺清晰的,Kurator 架构分为 Fleet Manager 统一管理集群、插件、应用与策略,Operator 负责流量与同步,底层集成多云与观测组件:在这里插入图片描述

Kurator 的架构最底下是各种基础设施,云也好、边缘节点也好。中间这层就是 Kurator 的核心,它把 Karmada(管多集群编排的)、KubeEdge(管边缘的)、Volcano(管批量计算的)、Istio(管流量的)这些开源界的大佬都集成进来了。最上面就是咱们的统一管理平面。
简单说,Kurator 就是个“胶水层”加“大脑”。它不光是把这些组件装上,更重要的是它定义了一套统一的 API。你不用分别去学怎么配置 Karmada 和 Istio,在 Kurator 里,一套路子全搞定。

Kurator 开源项目的 GitHub 主页

这项目是开源的,这点最良心。你现在去 GitHub 上搜 kurator-dev/kurator 就能看到。主页上东西挺全,从代码到文档都有。咱们搞技术的,遇到问题别老百度,直接去 Issue 区看看,或者看它的源码,那才是原汁原味的真理。上面的 Star 数也在蹭蹭涨,说明社区活跃度还可以,不用担心是个烂尾楼。
这是Kurator开源项目的GitHub主页概览,展示了其统一分布式云管理的核心定位、活跃的开发动态及社区贡献情况:在这里插入图片描述

二、 搞定多集群的大脑:Karmada 与 Fleet

Karmada 多集群管理平台的核心架构

在 Kurator 里,管多集群调度的核心其实是 Karmada。这玩意儿的架构特别有意思,它把 Kubernetes 的那套控制面逻辑给“通过膨胀”了。它有一个独立的控制面(Control Plane),里面也有 API Server、Controller Manager 这些东西,但它不直接管 Pod,它管的是“成员集群”(Member Clusters)。
你可以把它想象成一个“集群的集群”。你把任务发给 Karmada,Karmada 再根据你定的策略,把任务分发到下面的子集群去。它的核心就是那个 Scheduler,特别聪明,能根据资源余量、地理位置甚至网络状况来决定把 Pod 扔哪儿。

这是Karmada多集群管理平台的总体架构图,展示了其控制平面如何通过各类控制器实现策略分发与跨集群资源协同:在这里插入图片描述

Karmada 跨集群弹性伸缩策略

这是Karmada跨集群弹性伸缩策略参考图,展示了其如何通过FederatedHPA策略在多个成员集群间协调Pod副本数实现统一伸缩:在这里插入图片描述

这个功能简直是刚需。以前我们在单集群里用 HPA(自动伸缩),CPU 高了就加 Pod。但在多集群环境下,A 集群爆满了,B 集群还空着呢,咋办?Karmada 支持跨集群的弹性伸缩(FederatedHPA)。
这东西能监控所有集群的负载。如果主集群扛不住了,它能自动把新扩容出来的 Pod 调度到备用集群去。这就相当于你有一个无限大的资源池,根本不用担心单点被打爆。

Fleet 队列中身份相同性

这是Fleet队列中身份相同性的官方示意图,直观展示了跨集群的命名空间与部署服务间关联映射关系:在这里插入图片描述

在 Kurator 的概念里,一组集群被划分为一个 Fleet(舰队)。这里面有个特别头疼的问题,叫“身份相同性”(Identity Sameness)。你想啊,你在集群 A 里叫 user-1,在集群 B 里也叫 user-1,但这俩在 K8s 眼里默认是俩人。这就麻烦了,权限不好管。
Kurator 通过 Fleet 管理,保证了 Namespace、ServiceAccount 和 Service 在整个舰队里的“相同性”。也就是说,你在 Fleet 级别定义了一个服务,它在所有子集群里都是一样的名字、一样的解析地址(如果是跨集群服务发现的话)。这就把多集群变成了一个逻辑上的大集群,开发人员根本不用关心代码跑在哪个物理集群上。

三、 安全与策略:不但要管,还要管得严

Kurator 的统一策略管理架构

这张图展示了Kurator的统一策略管理架构,用户只需要在一处定义策略,就能通过Fleet和FluxCD自动同步到多个集群,配合Kyverno实现跨集群的一致性治理,真正做到“一次配置,全栈生效”:在这里插入图片描述

多集群最怕啥?怕乱!张三在 A 集群开了个特权容器,李四在 B 集群把镜像策略关了。Kurator 搞了个统一策略管理。你只需要在总控制面上写一次策略,它就能自动分发到所有关联的集群里去。这就像是秦始皇统一度量衡,不管你在哪个山沟沟集群里,都得遵守这一套规矩。

Fleet 基于 Kyverno 的多集群策略管理架构

这是Fleet基于Kyverno的多集群策略管理架构图,展示了策略配置如何通过Fleet分发到各集群执行引擎:在这里插入图片描述

具体到底层,Kurator 是用 Kyverno 来做策略引擎的。Kyverno 这东西比 OPA 好在它是 K8s Native 的,不用学那种怪怪的 Rego 语言,直接写 YAML 就行。
在 Fleet 模式下,Kurator 会把 Kyverno 的 Policy 变成一种“联邦策略”。你在 Fleet Manager 上定一个“禁止使用 latest 标签镜像”的规则,Kurator 就会把这个规则同步到 Fleet 里的每一个集群,并且监控违规情况。

来看个手搓的策略配置代码

这块我经常写,大概长这样。注意啊,这不是那种自动生成的完美代码,是我平时测试时候随手写的,能用就行。

apiVersion: policies.kurator.dev/v1alpha1
kind: ClusterPolicy
metadata:
  name: disallow-root-user-test
  # 加上这个注解,让它自动同步到所有 fleet 里的集群
  annotations:
    kurator.dev/fleet-sync: "true" 
spec:
  validationFailureAction: enforce
  background: true
  rules:
    - name: check-run-as-non-root
      match:
        resources:
          kinds:
            - Pod
      validate:
        message: "哥们,这容器不能用 root 跑,不安全!"
        pattern:
          spec:
            securityContext:
              runAsNonRoot: true
            containers:
              - name: "*"
                securityContext:
                  runAsNonRoot: true

四、 流量与调度:让数据跑得更顺畅

Istio 服务网格

这是Istio服务网格的参考架构图,展示了服务间通过Envoy代理进行通信,并由统一控制平面提供发现、配置与安全策略:在这里插入图片描述

搞微服务离不开 Istio,但在多集群里搞 Istio 简直是噩梦。Kurator 把它简化了。它支持那种“主从模式”或者“多主模式”的 Istio 部署。
最爽的是它帮你打通了跨集群的网络。你在 A 集群的服务想要调 B 集群的服务,在 Kurator 的管理下,你就像调本地服务一样简单。它底层帮你搞定了证书互信、Gateway 的对连。这就是 Unified Traffic Management 的含金量。

Volcano 分组调度

对于搞 AI 或者大数据训练的兄弟,K8s 原生的调度器太弱鸡了。它是一个个 Pod 调度的,但咱们训练任务通常是一组 Pod(Gang Scheduling),要是资源不够,这就死锁了。
Kurator 集成了 Volcano。Volcano 支持分组调度,要么这组 Pod 一起跑,要么都别跑,省得占着茅坑不拉屎。在 Kurator 里,你可以在分发任务的时候直接指定 Volcano 的调度策略,让昂贵的 GPU 资源利用率最大化。

五、 分发与边缘:从中心到边缘的流动

GitOps 边缘计算

这是GitOps边缘计算的官方参考图,展示了从应用到基础设施如何在从远边缘到云的多层级实现统一声明式管理:在这里插入图片描述

边缘计算最麻烦的是节点经常断网,而且节点特别多,成千上万个。你不可能一个个 SSH 上去操作。Kurator 结合了 GitOps 的理念(主要是用 FluxCD)。
你把边缘节点的配置写在 Git 仓库里。边缘节点上的 Agent 会自己去拉取配置。就算断网了,它也保持最后一次的状态继续跑,网一来,自动同步。这种“声明式”的管理方式,简直是边缘计算的神器。

Kurator 分发流程的状态机

这是一个比较抽象但很核心的概念。当你在 Kurator 里定义一个 Application 要分发时,它内部其实有个状态机在转。
大概流程是这样:Pending(等待处理) -> Syncing(正在从 Git 拉取或正在往子集群同步) -> Progressing(子集群正在应用资源) -> Succeeded(完事儿)或者 Failed(出错了)。
这个状态机保证了分发的可靠性。它会不断地重试(Reconcile),直到目标状态和实际状态一致。你平时看 Log 的时候,满屏的 Reconciling... 其实就是这个状态机在干活。

六、 动手时间:环境搭建

怎么搭建环境

搭建 Kurator 环境其实不难,但前提是你得有个像样的 Linux 环境,Docker 啥的都装好。
最关键的一步,代码得拉下来。

既然要玩,那没项目怎么玩嘛,所以我们第一步先来把项目下载到本地,这一步非常简单,可以直接下载或者clone

在这里插入图片描述

我们本地若没有安装Git插件的,那我们直接就下载zip即可。当然,我们这里直接选择通过git远程克隆吧,会高级一些~~

在这里插入图片描述

接着,我们输入clone 指令。

git clone https://gitcode.com/kurator-dev/kurator.git

在这里插入图片描述

clone之后,我们便成功拿到了完整的Kurator项目源码:

在这里插入图片描述

Kurator 分发流程模拟配置

最后,再给个分发应用的配置,这玩意儿看上去就像是 Karmada 的 PropagationPolicy 和 Flux 的合体。

apiVersion: apps.kurator.dev/v1alpha1
kind: Application
metadata:
  name: my-nginx-app
  namespace: default
spec:
  source:
    # 这里的 git 地址换成你自己的
    gitRepository:
      url: https://github.com/my-user/my-configs.git
      ref:
        branch: main
  syncPolicies:
    - destination:
        # 这里指定发给哪个 Fleet
        fleet: production-fleet
      plugin:
        policy:
          # 这是一个模拟的分发策略,告诉它怎么铺开
          propagation:
            resourceSelectors:
              - apiVersion: v1
                kind: Service
              - apiVersion: apps/v1
                kind: Deployment
            placement:
              clusterAffinity:
                clusterNames:
                  - cluster-shanghai
                  - cluster-beijing

好了,关于 Kurator 的东西今天就聊这么多。这东西确实是解决当下多云、边缘复杂环境的一把好手。虽然文档有时候看得人头大,但只要你把那个“统一管理”的逻辑理顺了,用起来还是挺爽的。赶紧去 clone 代码试试吧!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐