【探索实战】把多集群运维变成声明式:Kurator分布式云原生从0到1深度实战指南

【探索实战】把多集群运维变成声明式:Kurator分布式云原生从0到1深度实战指南

在这里插入图片描述

以“Kurator·云原生实战派”为主线,我会先把 Kurator 的能力拼图讲清楚,再给出一套可复刻的本地三集群实验环境,最后用集群生命周期治理 + 统一应用分发 + 统一流量治理 + 统一监控与统一策略串成一条完整的工程化闭环。
说明:文中命令与示例主要参考 Kurator 官方文档与仓库示例(例如文档中出现的 0.6.0 相关安装方式);不同版本细节可能会变化,落地时以你实际使用的版本与文档为准。


一、Kurator 到底在管什么:把“分布式云原生”讲透

1.1 分布式云原生的“真痛点”:不是多集群,而是多套标准

很多团队第一次接触“分布式云原生”时,关注点会落在“我有很多集群、很多云、还有边缘节点”。但真正的复杂度通常来自三类不一致:

  • 资源与应用标准不一致:A 集群用 Helm,B 集群用 Kustomize,C 集群直接 kubectl apply;上线流程、回滚策略、审计路径都不一致,运维越做越像“手工艺”。
  • 治理能力不一致:安全基线在生产集群做了,测试集群没做;指标在核心集群有,边缘集群没有;流量治理更是“各自为战”。
  • 生命周期与责任边界不一致:谁来创建集群?谁来升级?谁能删?出了事怎么追溯?这些问题最后都会变成组织级摩擦成本。

Kurator 的价值,不是“再提供一个多集群工具”,而是把这些“不一致”变成可声明、可组合、可审计、可复制的能力单元。

1.2 Kurator 的能力拼图:集成不是堆料,而是“统一控制面”

官方对 Kurator 的描述很明确:它是一个开源的分布式云原生平台,集成 Kubernetes、Karmada、Istio、Prometheus、FluxCD、Kyverno、KubeEdge、Volcano 等生态组件,并提供多云多集群的统一能力(资源编排、调度、流量、可观测等)。

这里我给一个“实战派”解读:Kurator 更像是一个平台工程(Platform Engineering)风格的集成控制面——你不需要逐个拼装组件、再写胶水代码把它们串起来,而是通过 Kurator 的安装命令、CRD/API 与 Fleet 化的管理对象,把能力以“套餐”的方式落到多个集群上。
详细部分可以看看Kurator官网,可以查看一下Kurator组成部分和一些文献参考:在这里插入图片描述

1.3 我眼里的 Kurator:把平台能力做成“可运营的产品”

如果把云原生平台当产品来做,Kurator 最有意思的点在于它强调:

  • 可复制:一个 fleet(舰队)就是一套标准化能力的复制单元。
  • 可组合:应用分发、策略、监控、备份、网络等能力以插件/配置的方式组合进 fleet(从 API 参考也能看到 plugin 的结构化配置)。
  • 可运营:不仅“能装”,还强调统一状态视图、统一策略执行结果(例如 policy report)、统一应用交付过程等。

二、从源码到可跑:本地三集群实验环境搭建

目标:在一台开发机/VM 上搭出 1 个 host(管理/承载控制面)+ 2 个 member(成员集群) 的最小实验场。后续所有实战都在这个场里完成。

2.1 获取 Kurator 源码(按要求包含 wget 或 git clone)

你可以二选一(我建议直接 git clone,方便跟进 examples 与脚本;但内网环境用 wget zip 也很常见)。

# 方式1:wget 拉 zip(按题目要求)
wget https://github.com/kurator-dev/kurator/archive/refs/heads/main.zip
unzip main.zip
cd kurator-main

# 方式2:git clone(按题目要求)
git clone https://github.com/kurator-dev/kurator.git
cd kurator

如果显示下面的问题
在这里插入图片描述
表示没用设置git代理,我们可以先设置git代理;先看一下电脑上的代理端口
在这里插入图片描述
再设置git的代理端口,设置成本地代理

git config --global http.proxy http://127.0.0.1:7890

然后再拉取

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

在这里插入图片描述
就可以拉取资源了,当然也可以换源,你们可以试试
随后建议先粗看一下仓库里的 examples/hack/ 目录:前者是 CRD/能力示例的“素材库”,后者通常是快速拉起环境的“脚手架”。

2.2 一键创建三集群:本地脚本的价值是“把前置依赖压缩成固定动作”

Kurator 文档里给了一个典型路径:通过仓库脚本创建三个集群(一个用于承载 Karmada 控制面,两个作为 member 加入)。

# 在 kurator 仓库根目录
hack/local-dev-setup.sh

实战建议(经验向):

  • 给 Docker/Container Runtime 足够资源:Kind 方案下常见问题是容器运行时资源不足导致核心组件 Pending / CrashLoop。
  • 提前准备 kubeconfig 落盘位置:后面 Fleet/AttachedCluster 会用到 kubeconfig 文件创建 secret(这一步如果路径乱了,你会在“明明集群起来了但注册不上”里浪费时间)。

2.3 安装 CLI + 两个高频坑位(inotify 与 kubeconfig 路径)

Kurator CLI 官方文档支持从源码构建 kurator 可执行文件。

make kurator
sudo mv ./out/linux-amd64/kurator /usr/local/bin/
kurator version

坑位 A:inotify 限制导致控制器/组件行为异常
Kurator 在本地环境部署时提示过需要调整 fs.inotify.max_user_watchesfs.inotify.max_user_instances

# 临时生效(重启后失效)
sudo sysctl -w fs.inotify.max_user_watches=524288
sudo sysctl -w fs.inotify.max_user_instances=8192

坑位 B:kubeconfig “看似存在但实际不可用”
很多人会踩:文件路径对了,但 kubeconfig 内的 server 地址在容器网络下不可达,导致后续 join 或 attachedCluster 访问失败。解决思路:

  • 确认 kubeconfig 的 server 是对你当前执行命令的主机可达的地址;
  • 如果是 Kind,检查是否需要 --kubeconfig 指定到脚本生成的 host kubeconfig(文档也提示“用脚本部署 kubernetes 时 kubeconfig 是 kurator-host.config”)。

三、集群生命周期治理:Cluster Operator 把“装 K8s”变成声明式

Kurator 的“集群生命周期治理”不是一句口号。它把“创建/删除/升级/扩缩容”这类高风险动作,从手工脚本升级为声明式资源 + 控制器调谐
详细可以见Kurator集群生命周期管理参考图,朋友们可以更清晰的了解:
在这里插入图片描述

3.1 为什么我认为生命周期治理是分布式云原生的地基

分布式云原生最容易出现的失控点是:

  • 集群越多,版本矩阵越复杂(K8s 版本、CNI、CSI、容器运行时、OS/Kernel…);
  • 治理动作越频繁,人为操作误差越大;
  • 宕机与事故不可避免,你需要的是可重复的恢复路径而不是“靠资深同学救火”。

所以“集群生命周期治理”要解决的不是“能不能装”,而是:能不能把集群当成可控资产。

3.2 On-Prem 场景:基于 Cluster API + KubeSpray 的声明式管理

Kurator 文档给出了 On-Prem 的生命周期管理路径:依托 Cluster API 与 KubeSpray,实现安装、删除、升级、扩缩容等能力。

下面给一个“最小可读”的资源结构示意(真实落地请以 examples 为准):

# 1) 先把 SSH 私钥做成 secret(文档示例)
# kubectl create secret generic cluster-secret --from-file=ssh-privatekey=/root/.ssh/id_rsa

# 2) CustomMachine:描述主机清单(master / node)与 SSH 访问方式
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1
kind: CustomMachine
metadata:
  name: demo-custommachine
  namespace: default
spec:
  master:
    - hostName: master1
      publicIP: 200.x.x.1
      privateIP: 192.x.x.1
      sshKey:
        apiVersion: v1
        kind: Secret
        name: cluster-secret
  node:
    - hostName: node1
      publicIP: 200.x.x.2
      privateIP: 192.x.x.2
      sshKey:
        apiVersion: v1
        kind: Secret
        name: cluster-secret

专业思考:为什么这种方式更“平台化”

  • 你把“机器清单、网络参数、K8s 版本、CNI 类型”等变成可审计资源;
  • 升级/扩容不再靠“跑脚本”,而是靠控制器对期望态/实际态做收敛;
  • 组织层面可以把权限做得更清楚:谁能改 CRD,谁就能变更集群。

3.3 升级与扩缩容:把高危动作拆成“可观察的工作流”

文档里强调升级依赖 kubeadm,建议避免跨 minor 跳跃升级,并给出了通过编辑 kcp(KubeadmControlPlane)声明目标版本来触发升级的方式。

工程化落地建议:

  • 升级前置检查:etcd 空间、控制面 Pod 资源、API 延迟、关键 CRD 兼容性;
  • 升级分批策略:先边缘/低优先级集群,再核心生产;
  • 升级后验证清单:核心业务探针、CNI/CSI、HPA、PDB、Ingress/Gateway、监控告警链路。

四、多集群编排:用 Kurator 一键装 Karmada 并纳管成员集群

如果说上一节解决“集群怎么来的”,那么这一节解决“多个集群怎么一起被调度与编排”。
Karmada是一个有趣的东西,这个是karmada架构官方参考图,感兴趣的朋友们可以看看了解一下:
在这里插入图片描述

4.1 为什么是 Karmada:多集群编排需要一个“统一 API 入口”

Kurator 的 Karmada 集成路径非常直接:安装 Karmada 控制面,然后把 member 集群 join 进来。
这一步的关键意义是:后续你可以用一个控制面把策略/资源分发到多个成员集群(包括 Kurator 安装 Thanos 这类场景也会用到 Karmada 做编排)。

4.2 实操:安装 Karmada 控制面 + join 两个成员集群

按文档流程,先确保本地已经有 host + 两个 member 集群(上一节脚本),再编译 kurator 并安装 Karmada。

# 安装 karmada 控制面(示例)
kurator install karmada --kubeconfig=/root/.kube/config

# 将成员集群加入 karmada
kurator join karmada member1 \
  --cluster-kubeconfig=/root/.kube/kurator-member1.config \
  --cluster-context=kurator-member1

kurator join karmada member2 \
  --cluster-kubeconfig=/root/.kube/kurator-member2.config \
  --cluster-context=kurator-member2

# 查看已纳管集群
kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters

4.3 常见问题:K8s 版本兼容与“表面 join 成功但不可用”

文档明确提示:karmada v1.2.0 及以下不支持 Kubernetes v1.24.0 及以上加入控制面。
实战排查套路(我一般按这个顺序):

  1. 先查版本矩阵:Karmada 版本 vs member K8s 版本;
  2. 查网络连通:member 到控制面、控制面到 member;
  3. 查证书/凭据:kubeconfig 的证书是否过期、server 地址是否可达;
  4. 查控制器日志:比起盯着 “Pending/Unknown”,日志更快指向根因。

五、Fleet Manager 统一管理:把多个集群变成一个“舰队”

在这里插入图片描述

Karmada 更偏“多集群编排与调度入口”,而 Kurator 的 Fleet Manager 更偏“把多个集群当成一个运营单元去治理”:统一命名空间/账号、统一应用分发、统一策略、统一监控、统一网络、统一备份等。

5.1 Fleet 是什么:把“集群列表”升级成“可治理对象”

Kurator 文档对 Fleet Manager 的能力列表写得很具体:Fleet 作为逻辑单元、Fleet 控制面生命周期管理、集群注册/注销、跨 fleet 的应用编排、Service sameness、跨集群服务发现与通信、聚合多集群指标等。

我的实战理解:Fleet = 你的“标准化交付与治理边界”。

  • 想把某批集群定义成同一条流水线、同一套基线、安全策略、监控插件?用 fleet。
  • 想把 dev/test/prod 分离?fleet 天然适配组织结构。
    这是Fleet架构官方参考图,想更多了解的朋友可以看看:
    在这里插入图片描述

5.2 安装 Fleet Manager:FluxCD 是关键依赖(别跳过)

Fleet Manager 依赖 Cluster Operator,且依赖 FluxCD(Kurator 文档给了通过 Helm 安装 flux2 的命令,并明确了使用 fluxcd-community chart、指定版本等)。

helm repo add fluxcd-community https://fluxcd-community.github.io/helm-charts

cat <<EOF | helm install fluxcd fluxcd-community/flux2 --version 2.7.0 -n fluxcd-system --create-namespace -f -
imageAutomationController:
  create: false
imageReflectionController:
  create: false
notificationController:
  create: false
EOF

kubectl get po -n fluxcd-system

然后再安装 fleet manager(可以走 helm repo、release 包或源码构建)。
这是FluxCD Helm 应用的示意图,我们通过这个可以看到具体工作流程:在这里插入图片描述

5.3 AttachedCluster:注册不是“加个 kubeconfig”这么简单

Kurator 的 policy 与 application 分发示例都强调:需要把成员集群 kubeconfig 做成 secret,然后用 AttachedCluster 资源把它们纳入管理。

kubectl create secret generic kurator-member1 \
  --from-file=kurator-member1.config=/root/.kube/kurator-member1.config

kubectl create secret generic kurator-member2 \
  --from-file=kurator-member2.config=/root/.kube/kurator-member2.config

实战注意点(很关键):

  • secret 的 key 名与 AttachedCluster 引用方式要一致;
  • kubeconfig 内的 server 地址必须对 fleet manager 所在集群可达;
  • 给 AttachedCluster 打标签(env=dev/test/prod)会极大提升后续“按集群选择策略”的可控性(Kurator application 文档也专门讲了 selector)。

六、统一交付与流量治理:Application + Istio + 监控/策略组合拳

这一节我用“一个 fleet、两套 member 集群”的实验场,串起四件事:
1)统一应用分发(GitOps);2)统一流量治理(Service Mesh);3)统一监控(Thanos/Prometheus 思路);4)统一策略(Kyverno)。

6.1 统一应用分发:Application CRD 把 GitOps 交付变成跨集群标准动作

Kurator 的统一应用分发是“Fleet + FluxCD + GitOps”的组合:通过 Application CRD 定义源码与同步策略,把应用一致性分发到多个集群。

下面是一份“精简版”的 Application(结构与官方示例一致,便于理解):

apiVersion: apps.kurator.dev/v1alpha1
kind: Application
metadata:
  name: gitrepo-kustomization-demo
  namespace: default
spec:
  source:
    gitRepository:
      interval: 3m0s
      ref:
        branch: master
      timeout: 1m0s
      url: https://github.com/stefanprodan/podinfo
  syncPolicies:
    - destination:
        fleet: quickstart
      kustomization:
        interval: 5m0s
        path: ./deploy/webapp
        prune: true
        timeout: 2m0s

为什么它对运维很“值钱”(实战视角):

  • 一致性:同一份声明在多个集群落地,减少“人为漂移”;
  • 可审计:Git commit + 控制器调谐日志,比口头/截图可追溯;
  • 可回滚:回滚本质是回滚 Git 版本与同步策略,而不是“去每个集群手动改”。

进阶玩法:给 AttachedCluster 打标签,然后在 policy/应用策略里用 selector 做“同源不同发布节奏”(比如 test 快、prod 慢),Kurator 文档也明确支持这种按标签选择。

6.2 统一流量治理:用 Kurator 安装 Istio 多集群(Primary-Remote)

Kurator 提供了非常直接的 Istio 安装命令:指定 primary 集群与 remote 集群,按 Primary-Remote 模型部署,并将 Karmada API Server 作为 Istio 配置下发目标。

# 示例:member1 为 primary,member2 为 remote
kurator install istio --primary member1 --remote member2

专业思考:为什么要把流量治理纳入“平台交付链路”

  • 当你有多个集群(甚至边缘)时,流量治理不是“装一个网格”就结束,而是:
    • 服务发现、跨集群通信、东西向流量策略要统一;
    • 灰度/熔断/限流/可观测要与发布系统联动。
  • Kurator 的价值在于:把 Istio 这种复杂系统的安装与多集群拓扑配置,压缩成可重复动作。

6.3 统一监控与统一策略:Thanos(聚合视图)+ Kyverno(基线治理)

监控(Thanos)
Kurator 提供了安装 Thanos 的命令,并强调需要 object store 配置;同时也给了 port-forward 验证 query 的方式。

kurator install thanos \
  --host-kubeconfig /root/.kube/kurator-host.config \
  --host-context kurator-host \
  --object-store-config /root/thanos/thanos-config.yaml

kubectl port-forward --address 0.0.0.0 svc/thanos-query -n thanos 9090:9090 \
  --kubeconfig /root/.kube/kurator-host.config --context kurator-host

在这里插入图片描述
这是Kurator 统一监控参考图:

我在企业落地时会把“统一监控”拆成三层设计:

  1. 采集层:每个集群本地采集(Prometheus/Agent/OTel);
  2. 汇聚层:Thanos 这种全局查询视图 + 长期存储(对象存储);
  3. 消费层:统一仪表盘、统一告警路由、统一 SLO(Grafana/Alertmanager/Oncall)。

策略(Kyverno)
Kurator 的 fleet 策略管理是基于 Kyverno 的,并提供了启用 pod security baseline 检查、查看 policy report 的示例。

# 文档示例:创建启用 baseline pod security 的 fleet
kubectl apply -f examples/fleet/policy/kyverno.yaml

# 验证:在成员集群查看 policyreport
kubectl get policyreport --kubeconfig=/root/.kube/kurator-member1.config

实战方法论:监控回答“发生了什么”,策略回答“什么不该发生”
很多平台只做到了“看见问题”(监控),但没有把“预防问题”(策略)做成体系。Kurator 把两者都纳入 fleet 的一致性治理对象:

  • 监控解决可观测统一
  • Kyverno 解决安全基线统一
  • 再配合应用分发与流量治理,你才能把“分布式云原生”真正运营起来。

七、落地复盘:用 Kurator 搭企业级分布式云原生平台的路线图

这一节给一个“可复用的落地模板”(偏方法论 + 工程化清单)。我不会虚构“某某公司真实收益数据”,但会把真实项目里常见的选型、攻坚点与价值链路讲清楚。

7.1 技术选型建议:先定“治理边界”,再选“组件菜单”

我建议把落地拆成三条线并行推进:

  • 底座线(集群生命周期):用 Cluster Operator 把集群创建、升级、扩缩容收敛成声明式,先把“集群资产可控”建立起来。
  • 运营线(Fleet 化管理):按组织/环境拆 fleet(例如 dev-fleet、prod-fleet、edge-fleet),把标准化能力(策略、监控、备份、网络)做成 fleet 的可组合插件。
  • 交付线(GitOps + 流量治理):用 Application 统一分发,再用 Istio/渐进式发布把“上线风险”工程化消解。

一句话:Kurator 帮你把“组件选型”变成“能力装配”,把“能力装配”变成“可复制的标准单元”。

7.2 三个最容易卡住的攻坚点(提前准备就能省很多命)

攻坚点 A:网络互通与控制面可达性

  • 多集群最大的问题往往不是 CRD 不会写,而是 kubeconfig 里 server 不可达、跨网段互通不可控。
  • 建议在试点期就确定:跨集群通信(是否需要 Submariner 等)、控制面与成员集群的网络连通模型、DNS 策略。

攻坚点 B:版本矩阵与升级节奏

  • Karmada 与 member K8s 版本兼容要先跑通(文档对 v1.2.0 与 k8s 版本有提醒)。
  • Istio 多集群对网络拓扑/证书也敏感,建议把“升级窗口、回滚策略、兼容矩阵”写进平台 SRE 运行手册,而不是靠经验传承。

攻坚点 C:权限与责任边界(这是平台成败关键)
你需要提前定义:

  • 谁能创建/修改 Fleet?
  • 谁能注册 AttachedCluster?
  • 谁能提交 Application?
  • 谁能修改策略(Kyverno)与流量规则(Istio)?
    这不是“流程问题”,而是“平台产品化”的根本:边界清晰,平台才可规模化推广。

7.3 生态协同与价值链路:把“技术收益”翻译成“业务收益”

Kurator 的生态价值,我通常会用四个关键词对齐业务侧:

  1. 上线效率:Application + GitOps 把多集群上线从“多次执行”变成“一次声明”。
  2. 稳定性:流量治理与渐进式发布降低变更风险(尤其在多集群、跨地域的发布场景)。
  3. 合规与安全:Kyverno 把基线策略变成平台能力,靠 policy report 输出治理结果。
  4. 可观测与复盘:Thanos 这类全局视图帮助你跨集群定位问题、做容量规划与趋势分析。

最终你会发现:Kurator 的“集成”不是目的,目的是把分布式场景里最难标准化的部分(生命周期、交付、治理、观测)变成平台可复用能力。


Kurator分布式云原生开源社区地址:https://gitcode.com/kurator-dev
Kurator分布式云原生项目部署指南:https://kurator.dev/docs/setup/

Logo

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

更多推荐