EulerMaker核心架构解析:Kubernetes风格的组件设计与协作流程

发布时间:2026/7/17 10:41:02
EulerMaker核心架构解析:Kubernetes风格的组件设计与协作流程 EulerMaker核心架构解析Kubernetes风格的组件设计与协作流程【免费下载链接】EulerMakerA software package build system that completes the build from source code to binary packages and supports developers in customizing OS scenarios.项目地址: https://gitcode.com/openeuler/EulerMaker前往项目官网免费下载https://ar.openeuler.org/ar/EulerMaker是一款强大的软件包构建系统它采用Kubernetes风格的架构设计能够完成从源代码到二进制包的构建过程并支持开发者进行自定义操作系统场景。本文将深入剖析EulerMaker的核心架构带您了解其组件设计与协作流程。一、设计目标打造Kubernetes风格的构建系统EulerMaker的架构设计深受Kubernetes的启发旨在实现以下目标统一资源APIProject、Snapshot、Build、Job、Runner等资源统一通过ebs/v1API暴露提供一致的操作体验。统一数据访问业务组件不直接访问etcd和Elasticsearch而是统一通过ebs-apiserver读写资源确保数据一致性和安全性。声明式对象模型资源由metadata/spec/status组成普通更新和/status更新分离便于状态管理和追踪。Watch驱动协作controller、scheduler、runner通过watch机制获取资源变化实现高效的事件驱动协作。Project业务作用域Snapshot、Build、Job归属于Project同时提供全局list/watch API给系统组件兼顾业务隔离和全局调度。可容器化部署测试环境通过hacks/docker-compose.yml启动etcd、Elasticsearch和ebs-apiserver等组件便于快速搭建和测试。二、整体架构清晰的组件层次与交互EulerMaker的整体架构如图所示各组件职责明确协作顺畅用户 / 外部系统 | v ┌──────────────────────────────────────────────┐ ┌──────────────────┐ │ ebs-gateway │──────│ runner │ │ 认证、鉴权、审计、请求入口 │ │ Job 执行/心跳上报 │ └──────────────────────┬───────────────────────┘ └──────────────────┘ | v ┌───────────────────────────────────────────────┐ ┌───────────────────┐ │ ebs-apiserver │──────│ controllers │ │ ebs/v1 REST API / status subresource / watch │ │ scheduler │ └───────────────┬──────────────────┬────────────┘ └───────────────────┘ | | REST / list / watch | | v ┌──────────────────────────┐ ┌──────────────────────────┐ │ etcd │ │ Elasticsearch │ │ 主存储对象与 watch │ │ 主存储索引与增强数据 │ └──────────────────────────┘ └──────────────────────────┘核心原则所有资源读写最终都经过ebs-apiserver确保数据访问的统一性和安全性。runner统一访问ebs-gateway便于外部执行机和内部执行机使用同一套访问逻辑。etcd和Elasticsearch都是主存储etcd负责对象持久化、resourceVersion和list/watchElasticsearch负责对象索引、搜索和增强数据。三、核心组件各司其职的团队成员EulerMaker的核心组件就像一个高效的团队每个组件都有其独特的职责组件职责ebs-gateway系统入口负责认证、鉴权、审计和请求转发是外部访问系统的第一道关卡。ebs-apiserver统一资源API负责对象校验、默认值、存储访问、list/watch、/status子资源是系统的核心数据处理中心。etcd主存储保存资源对象、resourceVersion并提供list/watch能力确保数据的可靠存储和高效查询。Elasticsearch主存储保存对象索引、搜索字段和增强数据为系统提供强大的搜索和数据分析能力。controllers监听Project/Snapshot/Build等对象变化推进资源状态实现业务逻辑的自动化处理。scheduler监听全局Job选择Runner并更新Job状态负责任务的智能调度和分配。runner通过ebs-gateway注册Runner、心跳上报、监听绑定到自己的Job并执行是实际执行任务的工人。3.1 ebs-apiserver核心中的核心ebs-apiserver是EulerMaker的核心组件基于k8s.io/apiserver的GenericAPIServer实现复用了Kubernetes apiserver的资源注册、REST storage、watch、resourceVersion、/status子资源和对象元数据机制。Project子资源API由project_alias.go提供轻量适配例如将/apis/ebs/v1/projects/{project}/builds重写到内部scoped storage路径/apis/ebs/v1/namespaces/{project}/builds该内部路径只作为实现细节外部文档和业务调用统一使用Project API和全局系统API。详细实现见ebs-apiserver.md。四、资源模型Kubernetes风格的对象定义EulerMaker的资源模型遵循Kubernetes风格当前API group为apiVersion: ebs/v1顶层资源包括资源作用域说明Project集群级项目是Snapshot、Build、Job的业务归属SnapshotProject级项目快照BuildProject级构建任务JobProject级可调度执行任务Runner集群级执行机所有资源遵循Kubernetes风格对象结构例如Project资源apiVersion: ebs/v1 kind: Project metadata: name: openeuler-22-03-lts spec: displayName: openEuler 22.03 LTS status: phase: ActiveProject名用于内部scoped storage需要满足DNS1123 label约束只能使用小写字母、数字和-不能包含.。页面展示名称使用spec.displayName。详细字段定义见data-models.md。五、API设计RESTful风格的接口EulerMaker提供了丰富的RESTful API方便用户和系统组件进行交互。5.1 Project APIProject API提供了对Project资源的完整操作GET /apis/ebs/v1/projects POST /apis/ebs/v1/projects GET /apis/ebs/v1/projects/{name} PUT /apis/ebs/v1/projects/{name} PATCH /apis/ebs/v1/projects/{name} DELETE /apis/ebs/v1/projects/{name} PUT /apis/ebs/v1/projects/{name}/status5.2 Project子资源API用户侧通过Project API管理Snapshot、Build、Job/apis/ebs/v1/projects/{project}/snapshots /apis/ebs/v1/projects/{project}/builds /apis/ebs/v1/projects/{project}/jobs{project}是对象的唯一项目归属来源spec中不重复保存projectName。5.3 全局系统API调度器和控制器通过全局API跨Project list/watch/apis/ebs/v1/snapshots /apis/ebs/v1/builds /apis/ebs/v1/jobs典型的watch命令如下curl -k -N https://localhost:8443/apis/ebs/v1/builds?watchtrue curl -k -N https://localhost:8443/apis/ebs/v1/jobs?watchtrue六、存储设计etcd与Elasticsearch的完美结合EulerMaker采用etcd和Elasticsearch作为组合主存储各司其职。etcd主数据路径/registry/ebs/projects/{name} /registry/ebs/snapshots/{project}/{name} /registry/ebs/builds/{project}/{name} /registry/ebs/jobs/{project}/{name} /registry/ebs/runners/{name}这种布局同时满足Project内对象名称唯一{project}/{name}。全局list/watch监听/registry/ebs/builds、/registry/ebs/jobs等资源前缀。Project内list/watch监听/registry/ebs/builds/{project}等Project子前缀。Elasticsearch索引ebs-projects ebs-snapshots ebs-builds ebs-jobs ebs-runnersnamespaced对象写入ES时使用{project}/{name}作为文档ID请求时对/做URL escape。七、组件协作流程高效的事件驱动EulerMaker的组件之间通过事件驱动的方式进行协作确保系统的高效运行。7.1 用户请求流程用户 - ebs-gateway - ebs-apiserver - etcdebs-gateway负责入口能力ebs-apiserver负责资源语义和数据访问。7.2 Controller流程controller - watch Project/Snapshot/Build controller - create/update Snapshot、Build、Job controller - update statuscontroller只通过API操作资源不直接访问etcd确保了数据访问的统一性和安全性。7.3 Scheduler流程scheduler - watch /apis/ebs/v1/jobs scheduler - 过滤Pending Job scheduler - 选择Runner scheduler - update Job.status.runner / phaseScheduler使用全局Job API不需要逐个Project建立watch提高了调度效率。7.4 Runner流程runner - ebs-gateway - ebs-apiserver: register Runner runner - ebs-gateway - ebs-apiserver: update Runner.status heartbeat runner - ebs-gateway - ebs-apiserver: watch assigned Job runner - execute Job runner - ebs-gateway - ebs-apiserver: update Job.statusRunner作为集群级资源存在调度标签使用metadata.labels资源容量和运行状态写入status。runner不直接访问ebs-apiserver统一访问ebs-gateway外部执行机和内部执行机使用同一套客户端逻辑。八、部署快速搭建测试环境测试环境使用hacks/docker-compose.yml启动包含etcd、Elasticsearch和ebs-apiserver等组件启动命令docker compose -f hacks/docker-compose.yml up -d关键服务地址服务地址etcdhttp://localhost:2379Elasticsearchhttp://localhost:9200ebs-apiserverhttps://localhost:8443九、后续完善持续进化的架构当前架构后续主要完善方向生成真实OpenAPI schema提供更规范的API文档。完善认证、鉴权、审计与多租户策略增强系统安全性。补齐controller、scheduler、runner的实现提升系统功能完整性。接入正式的镜像构建和发布流程方便用户使用和部署。通过以上对EulerMaker核心架构的解析我们可以看到其Kubernetes风格的组件设计和高效的协作流程为软件包构建提供了强大的支持。如果您想深入了解EulerMaker可以通过以下命令克隆仓库进行探索git clone https://gitcode.com/openeuler/EulerMaker希望本文能帮助您更好地理解EulerMaker的架构设计为您的使用和开发提供有益的参考。【免费下载链接】EulerMakerA software package build system that completes the build from source code to binary packages and supports developers in customizing OS scenarios.项目地址: https://gitcode.com/openeuler/EulerMaker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考