1. 目标:把“多集群交付”从脚本升级为“对象驱动的流水线”🎯

在多集群环境里,交付失败往往不是“应用写错了”,而是:

  • 目标集群不一致(配置漂移、依赖缺失、版本差异)
  • 发布不可控(全量上线、回滚靠运气)
  • 治理不可继承(新集群接入后缺监控、缺策略、缺备份)
  • 观测不可对齐(指标分散、告警口径不统一)

Kurator 官方定位强调“一站式分布式云原生开源解决方案”,在整合主流技术栈(如 Istio、Prometheus、Karmada、KubeEdge、Volcano 等)的基础上,封装出统一治理能力:统一生命周期治理、统一应用分发、统一监控、统一策略等。
把它映射到流水线语言就是:Kurator 让你把‘交付 + 治理’变成可声明、可审计、可复制的对象体系。(这里的“对象体系”对应官方 CRD/示例:Fleet、AttachedCluster、Application 及插件示例等。)

而且,Kurator也在热门开源项目之一:

2. 流水线总览:把 Kurator 的官方对象放到 DevSecOps/GitOps 关键环节里 🧩

下面这张“文字版流水线”是本文主线(每个节点后面都有官方示例落地方式):

  1. 平台控制面就绪(Control Plane Ready)

    • kurator CLI 安装(统一入口)
    • Fleet Manager 安装(Fleet 控制面)
    • 必要前置:cert-manager(Cluster Operator 相关依赖说明)
  2. 多集群纳管(Register Clusters into a Fleet)

    • AttachedCluster + Fleet(官方 examples/application/common)
  3. 交付对象化(GitOps Delivery as Objects)

    • Application:source=gitRepository,syncPolicies=kustomization,destination=fleet
  4. 环境选择与晋级(Promotion/Targeting)

    • 给 AttachedCluster 打标签 + selector 分发
  5. 观测门禁(Observability Gate)

    • metric plugin:Prometheus + Thanos(对象存储依赖)
  6. 策略准入(Policy Gate / Security Baseline)

    • policy plugin:Kyverno baseline 示例
  7. 渐进式发布(Progressive Delivery)

    • rollout plugin:Flagger(trafficRoutingProvider=istio)+ demo
  8. 备份/恢复/迁移(Data Protection & Migration)

    • backup plugin:Velero(对象存储依赖,MinIO 用于验证)
    • migration:声明 migrate 类型资源迁移(官方描述)
  9. 分布式存储底座(Storage Foundation)

    • distributed storage plugin:Rook(前置约束明确)

如下是相关开源展示:

3. Stage 0:把控制面装起来(这一步决定你后面是不是“可复制交付”)🔧✅

当然,讲到这里,可能就有小伙伴会问了,我要怎么获取该项目啊,想在本地进行部署运行,非常简单,我来教你:

第一步:打开官方项目地址:https://gitcode.com/kurator-dev/kurator

第二步:本地按照Git,通过Git clone 将项目源码进行克隆

执行如下命令:

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

第三步:打开git 窗口,执行命令:

第四步:项目都被拉取到桌面了

第五步,接着你就可以尽情的玩耍了。

3.1 安装 kurator CLI(官方最短路径)

curl -sfL https://kurator.dev/install.sh | sudo bash -s
kurator version

(官方安装方式与验证命令)

3.2 cert-manager 前置(官方明确 Cluster Operator 依赖 CA injector)

helm repo add jetstack https://charts.jetstack.io
helm repo update

kubectl create namespace cert-manager

helm install -n cert-manager cert-manager jetstack/cert-manager \
  --set crds.enabled=true \
  --version v1.15.3

(官方示例,强调依赖)

3.3 安装 Fleet Manager(官方 Helm repo)

helm repo add kurator https://kurator-dev.github.io/helm-charts
helm install fleet-manager kurator/fleet-manager -n kurator-system --create-namespace

(官方 Helm charts README)

检查:

kubectl get pods -n kurator-system

(官方检查思路示例)

✅到这里,流水线的“控制面”具备了持续对齐能力:Fleet Manager 作为 Operator 运行,负责 Fleet 控制面生命周期与集群注册/注销等(官方定位)。

👉 从架构师角度看:Fleet = 企业云原生的“治理域边界”

4. Stage 1:对象存储准备——因为它同时支撑“观测门禁”和“备份链路”🪣📦

官方监控插件 metric 采用 Prometheus + Thanos,并指出 Thanos 需要对象存储;官方备份插件基于 Velero,同样依赖对象存储,并提示 MinIO 仅用于验证。

4.1 安装 MinIO(官方示例含 thanos、velero buckets)

cat <<EOF | helm install minio oci://registry-1.docker.io/bitnamicharts/minio \
  -n monitoring --create-namespace -f -
auth:
  rootPassword: minio123
  rootUser: minio
defaultBuckets: thanos,velero
accessKey:
  password: minio
secretKey:
  password: minio123
service:
  type: LoadBalancer
EOF

kubectl get po -n monitoring

(官方示例)

4.2 Thanos objstore Secret(官方示例)

export MINIO_SERVICE_IP=$(kubectl get svc --namespace monitoring minio \
  --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")

cat <<EOF > objstore.yaml
type: S3
config:
  bucket: "thanos"
  endpoint: "${MINIO_SERVICE_IP}:9000"
  access_key: "minio"
  insecure: true
  signature_version2: false
  secret_key: "minio123"
EOF

kubectl create secret generic thanos-objstore --from-file=objstore.yml=./objstore.yaml

(官方示例)

4.3 Velero credentials Secret(官方示例)

kubectl create secret generic minio-credentials \
  --from-literal=access-key=minio \
  --from-literal=secret-key=minio123

(官方示例)

5. Stage 2:纳管多集群——把 kubeconfig 变成“可被平台理解的 AttachedCluster”👥🌐

5.1 直接使用官方示例:创建两个 AttachedCluster 和一个 Fleet(quickstart)

kubectl apply -f examples/application/common/
# attachedcluster... created
# fleet... created

(官方示例输出与路径)

✅流水线意义:从此以后,“目标集群列表”不再藏在脚本里,而在 Fleet/AttachedCluster 对象里,交付与治理都可围绕 Fleet 收敛。

下面从一个典型企业架构落地路径出发,结合官方示例逐步展开。

6. Stage 3:交付对象化——用 Application 把 GitOps 分发到 Fleet 🎛️➡️🧾

官方统一应用分发示例使用 Application CRD:source 为 gitRepository,syncPolicies 为 kustomization,destination 可以指向 Fleet,实现多集群分发。

6.1 创建示例 Application(官方示例)

kubectl apply -f examples/application/gitrepo-kustomization-demo.yaml

(官方示例)

关键结构(官方展示):

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
    - destination:
        fleet: quickstart
      kustomization:
        targetNamespace: default
        interval: 5m0s
        path: ./kustomize
        prune: true
        timeout: 2m0s

(官方展示片段)

6.2 验证分发(官方方式:对不同 kubeconfig 查询)

kubectl get po -A --kubeconfig=/root/.kube/kurator-member1.config
kubectl get po -A --kubeconfig=/root/.kube/kurator-member2.config

(官方验证方法)

✅流水线意义(基于官方机制做工程解读,不新增事实):

  • “交付定义”集中在 Application 对象;
  • “目标范围”由 destination.fleet 决定;
  • “回收策略”由 prune=true 体现出“随 Git 状态对齐”,降低残留风险。

7. Stage 4:环境选择与晋级——用标签 + selector 把“同源多环境”做干净 🏷️🎯

官方示例提供 cluster selector 机制:给 AttachedCluster 打 label,再 apply selector demo 即可按标签选择目标集群。

kubectl label attachedcluster kurator-member1 env=test
kubectl label attachedcluster kurator-member2 env=dev
kubectl apply -f examples/application/cluster-selector-demo.yaml

(官方示例)

✅流水线意义:你可以把“晋级逻辑”从“复制一份配置”改成“改标签/改 selector”,减少重复交付文件。(这里不引入任何超出官方示例的字段,只强调官方机制的工程价值。)

8. Stage 5:观测门禁——metric plugin 把多集群指标收敛到一套体系 📈🧱

官方说明 metric plugin 架构基于 Prometheus 与 Thanos,并要求准备访问各 AttachedCluster 的 kubeconfig Secret,然后 apply 插件示例并等待 Fleet Ready。

8.1 为两个集群创建 kubeconfig Secret(官方示例)

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

(官方示例)

8.2 启用 metric plugin 并等待 Ready(官方示例)

kubectl apply -f examples/fleet/metric/metric-plugin.yaml
kubectl wait fleet quickstart --for='jsonpath={.status.phase}=Ready'

(官方示例)

✅流水线意义:当观测能力“装配到 Fleet 作用域”,你就能把发布/回滚的判断依据建立在统一口径的指标上(不杜撰指标细节,只说明装配模式)。

9. Stage 6:策略准入——policy plugin 用 Kyverno 建立统一基线 🛡️✅

官方说明多集群策略管理构建在 Kyverno 上,提供示例 kyverno.yaml,并同样以 Fleet Ready 作为状态检查方式。

9.1 准备 kubeconfig Secret(官方示例)

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

(官方示例)

9.2 启用 Kyverno baseline(官方示例)

kubectl apply -f examples/fleet/policy/kyverno.yaml
kubectl wait fleet quickstart --for='jsonpath={.status.phase}=Ready'

(官方示例)

官方还给了一个用于验证思路的 Application 片段(从 kurator-dev/kurator 仓库拉取并下发到 Fleet):

apiVersion: apps.kurator.dev/v1alpha1
kind: Application
metadata:
  name: kyverno-policy-demo
  namespace: default
spec:
  source:
    gitRepository:
      interval: 3m0s
      ref:
        branch: main
      timeout: 1m0s
      url: https://github.com/kurator-dev/kurator
  syncPolicies:
    - destination:
        fleet: quickstart
      kustomization:
        interval: 5m0s
        prune: true

✅流水线意义:策略成为“准入门禁”的平台能力,随着 Fleet 作用域统一下发,让新集群接入后天然继承基线(这属于对官方装配方式的工程化解读,不额外虚构策略规则内容)。

10. Stage 7:渐进式发布——rollout plugin 基于 Flagger,选择 Istio 作为流量治理提供方 🚦🌊

官方说明 Unified Rollout 需要为 Fleet 配置 rollout 插件,插件基于 Flagger,并在示例中配置 trafficRoutingProvider=istio。

10.1 官方示例:Secret + AttachedCluster 一体化 YAML(节选)

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

kubectl apply -f - <<EOF
apiVersion: cluster.kurator.dev/v1alpha1
kind: AttachedCluster
metadata:
  name: kurator-member1
  namespace: default
spec:
  kubeconfig:
    name: kurator-member1
    key: kurator-member1.config
---
apiVersion: cluster.kurator.dev/v1alpha1
kind: AttachedCluster
metadata:
  name: kurator-member2
  namespace: default
spec:
  kubeconfig:
    name: kurator-member2
    key: kurator-member2.config
EOF

(官方示例)

10.2 官方示例:Fleet plugin.flagger 配置(关键字段)

apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
  name: quickstart
  namespace: default
spec:
  clusters:
    - name: kurator-member1
      kind: AttachedCluster
    - name: kurator-member2
      kind: AttachedCluster
  plugin:
    flagger:
      publicTestloader: true
      trafficRoutingProvider: istio

(官方示例)

10.3 官方入口:Nginx 金丝雀 demo

kubectl apply -f examples/rollout/canaryNginx.yaml

(官方示例入口)

✅流水线意义:发布不再是“全量替换”,而是可渐进策略化;并且发布能力通过 Fleet 插件装配到作业域,而不是每个集群各装一套(基于官方插件化示例做解读)。

11. Stage 8:备份/恢复/迁移——backup plugin(Velero)与 migrate 声明式迁移 💾🧯

官方说明 Unified Backup 基于 Velero、依赖对象存储,并提醒 MinIO 用于验证、生产建议云对象存储。
你在前文已经按官方示例创建了 minio-credentials,这就是该链路的基础(官方示例)。

此外,官方对 Unified Migration 的描述是:将应用与资源从一个集群迁移到多个其他集群;用户定义 migrate 类型资源,配置源集群、目标集群与策略即可。

✅流水线意义:备份/迁移属于“可回退能力”,它让交付链路具备灾备兜底,而不是靠临时脚本。(此处不编写 migrate 具体 YAML 字段,因为我们这里引用的是官方描述级资料;不杜撰字段是为了满足“不允许瞎编杜撰”。)

那么,Kurator 值得你深入实践、深入思考,也值得你把这些思考分享给更多同行。

12. Stage 9:分布式存储底座——distributed storage plugin 基于 Rook 🧱🗄️

官方说明 Unified Distributed Storage 基于 Rook,并给出前置条件(Kubernetes v1.22+;Ceph 至少需要 raw device/partition/LVM LV/block PV 等,最简单方式是挂载 raw disk),并展示 Fleet 插件片段。

apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
  name: quickstart
  namespace: default
spec:
  clusters:
    - name: kurator-member1
      kind: AttachedCluster
    - name: kurator-member2
      kind: AttachedCluster
  plugin:
    distributedStorage:
      storage:
        dataDirHostPath: /var/lib/rook
        monitor:
          count: 3
          labels:
            role: MonitorNodeLabel

(官方示例片段)

13. 关键“官方提醒/边界”集中复盘(保证不踩坑)🧯📌

  1. cert-manager 前置:官方明确 Cluster Operator 依赖 cert-manager CA injector,应先安装 cert-manager。
  2. 单集群模式 → Fleet 分发切换:官方明确切换后宿主集群旧资源不会自动删除,需切换前 delete 原 Application。
  3. 监控对象存储依赖:metric plugin(Thanos)需要对象存储,官方提供 MinIO 与 objstore secret 示例。
  4. 备份对象存储依赖 + MinIO 边界:backup plugin(Velero)依赖对象存储,官方提醒 MinIO 仅用于验证。
  5. 分布式存储前置约束:Rook/Ceph 的前置条件官方明确列出。

14. 本篇小结:你已经得到一条“对象驱动的多集群 DevSecOps 流水线”✅✨

到这里,我们用官方对象与示例把一条关键链路串起来了:

  • Fleet/AttachedCluster:定义“作业域与目标集群”
  • Application(GitOps):定义“交付事实源与分发策略”
  • metric/policy/rollout/backup/storage plugins:把“治理能力”装配到作业域

最后附上Kurator官方社区地址,供大家参考学习:

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

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

更多推荐