云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载KEP-2.14 是 KubeVela vNext Roadmapdesign/vela-core/keps/README.md中的一份多租户Multi-tenancy设计提案。它提出用TenantDefinition与Tenant两个core.oam.dev/v2alpha1集群级 CRD把命名空间Namespace创建、RBAC 授权、配额Quota设置、集群访问范围收敛等传统手工运维工作转化为可被持续调和reconcile、可版本控制的平台能力。读完本文你将理解租户原语的 CUE 作者模型、Tenant实例化与修订固定Revision Pinning机制、租户生命周期事件流以及它与 Cluster、Definition RBAC、ApplicationDefinition 等相邻 KEP 的协作边界。⚠️注意该 KEP 目前处于 Early concept draft 阶段正文明确标注为 Drafting (Not ready for consumption)其方向尚未最终确定不应作为已承诺行为的实现依据。本文介绍的是提案中的设计意图实际落地以未来正式实现为准。一、为什么多租户要成为一等平台原语在多集群、多团队平台上创建一个租户 远不止建一个命名空间。平台工程师通常需要同步完成在 hub 集群创建一组命名空间并打上租户标签为成员User / Group编写 Role、RoleBinding、ClusterRoleBinding为每个命名空间下发ResourceQuota与LimitRange限定该租户可以调度dispatch到哪些 spoke 集群分组部署租户共享基础设施如 Crossplane claim、Secret、监控栈。在 v1 模型中这些工作分散在 YAML 文件、脚本和手工操作里难以审计、难以漂移校正。KEP-2.14 的思路是把租户抽象为由 CUE 定义的平台能力平台工程师先定义若干租户原型archetype如team、environment、external-partner各自带有一套供给规则之后只需提交一个TenantCR 实例tenant-controller 便持续调和并漂移校正全部声明资源。这与 vNext Roadmap 中平台工程Platform Engineering模块的定位一致——总纲 README 明确将TenantDefinition列为平台工程核心原语之一与ApplicationDefinition、PolicyDefinition、OperationTemplate并列。二、TenantDefinition用 CUE 描述租户原型TenantDefinition是core.oam.dev/v2alpha1API 版本下的集群级cluster-scopedCRD。与 KubeVela 所有 Definition 类型一致它遵循标准 CUE 作者模型以metadata.cue为入口在template:块内声明parameter输入参数与output输出其余支持文件通过 CUE unification 合并。2.1 目录式作者模型KEP-2.14 给出的目录结构如下my-tenant-definition/ metadata.cue # name, type: tenant, description, attributes template.cue # parameter schema output rbac.cue # RBAC output fragments quotas.cue # ResourceQuota / LimitRange output fragments application.cue # inline Application or ApplicationDefinition referenceDefinition 以目录形式编写、目录即作者与版本化单元这一约定正是 KEP-2.1 核心 API 设计 确立的 v2alpha1 规范metadata.cue是必需的入口点其余文件均为可选并通过 CUE 合并加载同时支持 inline 与 OCI/Git 源码两种模式。TenantDefinition只是把这一模型应用到租户这一资源形态上。2.2 output 的结构化供给规格TenantDefinition的output是一份结构化供给规格包含五个部分字段作用namespaces要创建的命名空间列表可携带 labels 与 annotationsrbac在 hub 上渲染为 Kubernetes RBAC 资源并应用的 Groups、Roles、RoleBindings、ClusterRoleBindingsclusterAccess对ClusterCR来自 Cluster KEP的标签选择器定义该租户可 dispatch 到的 spoke 分组application内联Applicationspec 或ApplicationDefinition引用 参数部署在 hub 并持续调和用于供给共享租户基础设施如 Crossplane claims、secrets、监控栈quotas逐命名空间应用的ResourceQuota与LimitRange对象2.3 完整 template.cue 示例以下是原 KEP 提供的template.cue完整示例它同时演示了五种输出字段与参数声明方式// template.cue template: { output: { namespaces: [ { name: \(context.parameters.teamName)-dev, labels: { tenant: context.parameters.teamName } }, { name: \(context.parameters.teamName)-prod, labels: { tenant: context.parameters.teamName } }, ] rbac: [ { kind: RoleBinding name: \(context.parameters.teamName)-developers subjects: context.parameters.members roleRef: developer namespaces: [\(context.parameters.teamName)-dev, \(context.parameters.teamName)-prod] } ] clusterAccess: { matchLabels: { spoke-group: app } } application: { definition: team-infra parameters: { teamName: context.parameters.teamName costCentre: context.parameters.costCentre } } quotas: [ { namespace: \(context.parameters.teamName)-dev hard: { requests.cpu: 4, requests.memory: 8Gi } } ] } parameter: { teamName: string costCentre: string members: [...{ kind: string, name: string }] } }值得注意的细节context.parameters.*引用输入参数通过context.parameters读取字符串插值\(...)用于动态拼装命名空间名、RBAC 名称等members 结构members定义为{kind, name}列表其中kind可取值如User、Group与 Kubernetes RBACsubjects的结构天然对齐RBAC 片段可拆分rbac.cue、quotas.cue等文件可以把 RBAC、配额输出片段独立成文件靠 CUE unification 与template.cue合并便于按关注点组织大型租户定义clusterAccess 采用标准标签选择器matchLabels: { spoke-group: app }意味着该租户只能把工作负载调度到带有spoke-groupapp标签的 spoke 集群上。这与 KubeVela 现有多集群代码中基于 label selector 选择集群的模式一脉相承参见 pkg/multicluster/virtual_cluster.go 中通过SelectorFromValidatedSet构造选择器的实现。三、Tenant实例化租户Tenant是集群级 CRcluster-scoped它通过名字引用一个TenantDefinition并提供参数。hub 上的tenant-controller对其持续调和——供给并漂移校正所有声明资源。原 KEP 的示例 YAMLapiVersion: core.oam.dev/v2alpha1 kind: Tenant metadata: name: team-payments spec: definition: team-tenant # definitionRevision pins to a specific DefinitionRevision. # If omitted, resolves to the current revision at creation time and pins. # Explicit update required to adopt a new revision. definitionRevision: team-tenant-v2 parameters: teamName: payments costCentre: CC-4412 members: - kind: User name: aliceexample.com - kind: Group name: payments-engineers关键语义spec.definition按名字引用TenantDefinition决定该租户使用哪一套供给规则spec.definitionRevision显式钉住某个具体DefinitionRevision省略时控制器在创建时刻解析当前修订并自动写入钉住。此后若要采用新修订必须显式更新该字段spec.parameters与TenantDefinition的parameterschema 对应此处传入teamName、costCentre、members。3.1 从 Template 到实例参数 Schema 校验的继承逻辑在 v2alpha1 的统一作者模型中所有 Definition 都以parameter单数作为输入 schema 标识context.parameter在求值期读取。KEP-2.14 的Tenant参数直接映射到TenantDefinition.template.parameter因此实例参数具备与 KEP-2.1 一致的 admission 校验基础——参数结构可以在kubectl apply时即被 schema 校验而非等到调和运行时才发现错误。四、修订固定Revision Pinning租户与定义变更隔离这是 KEP-2.14 最核心的可靠性机制租户实例与TenantDefinition的变更相互隔离。TenantDefinition的修订通过 KubeVela 既有的DefinitionRevision机制管理。当TenantCR 创建时tenant-controller 解析当前TenantDefinition修订并写入spec.definitionRevision后续所有调和都使用这个钉住的修订。直到平台工程师显式更新spec.definitionRevision租户都不会受到 Definition 变更的影响。原 KEP 明确说明这镜像了Component实例钉住 Definition 快照的方式。4.1 仓库中的 DefinitionRevision 实现佐证DefinitionRevision是当前仓库中真实存在的资源类型定义于 apis/core.oam.dev/v1beta1/definitionrevision_types.goshortName 为defrev。其 Spec 包含Revision修订号int64RevisionHashDefinition spec 的哈希值用于判断内容是否变化DefinitionType定义类型Component/Trait/Policy/WorkflowStep/Source 等各 Definition 类型的快照字段如ComponentDefinition、TraitDefinition……即修订对象内保存的是定义内容的完整副本。修订生成与比较逻辑集中在 pkg/controller/core.oam.dev/v1beta1/core/revison.goGenerateDefinitionRevision会先生成候选修订再与上一次修订比对存在两种显式修订指定方式spec.Version字段或definitionrevision.oam.dev/name注解isNameAnnotationRevision当内容哈希发生变化时通过getDefNextRevision计算出下一个修订名与修订号并写入新DefinitionRevision。这套快照 哈希比对 顺序编号的机制正是 KEP-2.14 中解析当前修订并钉住所依赖的底层设施。TenantDefinition沿用同一机制后租户的供给行为在每次调和时都有一致的、可回滚的定义快照作为依据。五、租户生命周期事件驱动的控制器行为原 KEP 用一张事件表定义了 tenant-controller 的核心行为完整整理如下事件控制器动作Tenant创建解析 Definition 修订并钉住供给 namespaces RBAC quotas部署 ApplicationTenant更新参数变化基于钉住的修订重新渲染调和 diffTenant更新definitionRevision变化基于新修订重新渲染调和 diff可能新增/移除命名空间、更新 RBACTenantDefinition更新对既有Tenant无影响——修订固定将其隔离Tenant删除Finalizer 执行删除归属 Application、移除 RBAC命名空间可按spec.namespaceRetainPolicy: Retain \| Delete配置选择保留或删除这张表揭示了几个设计意图参数更新与定义更新的解耦参数更新走同修订重渲染定义更新则被钉住机制挡住只有显式改definitionRevision才触发跨修订的迁移式调和删除是编排好的清理流程通过 Finalizer 保证 RBAC、Application 等派生资源被有序回收而命名空间是否留存交由namespaceRetainPolicy策略决定——这为租户下线但数据归档的运维场景保留了空间漂移校正内建所有生命周期动作都基于调和循环手工改动声明资源会被控制器纠正回声明状态。六、与相邻 KEP 的协作边界原 KEP 明确列出了三个依赖关系这也是理解该设计在 vNext Roadmap 中定位的关键Cluster KEPclusterAccess的标签选择器是对ClusterCR 求值的Cluster KEP 必须暴露 spoke 分组标签如spoke-group该机制才能工作。在 总纲 README 中这对应spoke 组件准入需求——infra分组只接受云厂商类 Definitionapp分组只接受工作负载类 Definition租户的clusterAccess则是从租户视角复用同一套集群分组体系。Definition RBAC KEPTenantDefinition的访问控制access.cue决定哪些平台工程师可以创建哪些租户类型。这与总纲中提出的 CUE 表达访问控制模型一致——access.cue接收调用者身份与定义上下文返回permitted: bool与message: string由 hub admission webhook 求值。ApplicationDefinitionKEP-2.9TenantDefinitionoutput 中的application块可以按名字引用ApplicationDefinition从而把租户供给与平台的应用程序交付模型组合起来——例如definition: team-infra指向一个预定义的团队基础设施模板parameters中的teamName、costCentre作为模板参数注入。相关设计见 design/vela-core/keps/2.9-app-templates/README.md。七、总结与开放方向KEP-2.14 把租户从一组松散的手工操作提升为声明式、可调和、可版本化的平台原语TenantDefinition用 CUE 目录描述租户原型命名空间、RBAC、配额、集群访问、共享应用五个供给维度Tenant以参数实例化租户并通过definitionRevision钉住定义快照实现租户与定义变更的强隔离tenant-controller 以调和循环驱动创建、更新、删除全生命周期支持命名空间保留策略与漂移校正。需要注意的是该 KEP 仍处于早期概念草稿阶段诸如namespaceRetainPolicy的默认值、Cluster KEP 中 spoke 分组标签的最终形态、access.cue的求值生命周期等问题尚未定型。其设计路径依赖 vNext Roadmap 总纲 中的 Cluster、Definition RBAC、ApplicationDefinition 等多个子 KEP 共同演进。对于希望提前评估多租户落地形态的平台工程师可以结合 DefinitionRevision 类型定义 与 修订生成实现 先行理解其底层修订机制。赞分享云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载相关推荐如何在C项目中快速集成WinToast5分钟上手教程如何在C项目中快速集成WinToast5分钟上手教程 WinToast是一个轻量级C库能够帮助开发者在Windows 8及以上系统中快速集成现代化的云原生DevOps运维微服务KubeVela KEP-2.11 解读面向平台工程师的 Definition Testing Framework 设计KubeVela KEP 2.11 解读面向平台工程师的 Definition Testing Framework 设计 导读 KubeVela 的 Defi云原生DevOps运维微服务KubeVela Operator 深度解读以 KubeVela CR 声明并收敛整个平台安装的 vNext 设计KubeVela Operator 深度解读以 KubeVela CR 声明并收敛整个平台安装的 vNext 设计 本文聚焦 KubeVela vNext 路云原生DevOps运维微服务上一篇如何构建企业级智能运维平台Keep开源告警自动化解决方案深度解析下一篇Keep开源AIOps平台终极指南构建企业级智能告警管理系统的完整实战方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
