EulerMaker常见问题解答:开发者必知的20个核心知识点

📅 2026/7/18 11:33:22
EulerMaker常见问题解答:开发者必知的20个核心知识点
EulerMaker常见问题解答开发者必知的20个核心知识点【免费下载链接】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是一款强大的软件包构建系统能够完成从源代码到二进制包的构建过程并支持开发者自定义操作系统场景。本文将解答开发者在使用EulerMaker过程中最常见的20个问题帮助你快速掌握这个工具的核心知识点。一、基础概念篇1. 什么是EulerMaker它的核心功能是什么EulerMaker是一个软件包构建系统主要功能是完成从源代码到二进制包的构建并支持开发者自定义操作系统场景。其核心组件包括ebs-apiserver、ebs-gateway、runner和scheduler等采用Kubernetes-like架构组织。2. EulerMaker的主要组件有哪些各自的作用是什么EulerMaker的主要组件包括ebs-apiserver资源API服务提供Kubernetes风格的REST API代码位于components/ebs-apiserver。ebs-gateway统一入口用户、外部系统和runner统一通过gateway访问ebs/v1API。runnerJob执行机负责注册自身能力、上报心跳、监听已调度给自己的Job、执行构建任务。scheduler系统组件负责跨Project调度Job。3. Project在EulerMaker中的作用是什么Project是EulerMaker中的业务作用域Snapshot、Build、Job等资源归属于Project。Project名需要满足DNS1123 label约束只能使用小写字母、数字和-不能包含.。页面展示名称使用Project.spec.displayName。二、安装与配置篇4. 如何获取EulerMaker的源代码你可以通过以下命令克隆EulerMaker的仓库git clone https://gitcode.com/openeuler/EulerMaker5. EulerMaker的依赖有哪些如何安装EulerMaker主要基于Go语言开发需要Go环境支持。各组件的具体依赖可以查看对应目录下的go.mod文件例如components/ebs-apiserver/go.mod。6. 如何配置ebs-gateway连接到apiserver可以通过--apiserver-addr参数或EBS_APISERVER环境变量设置上游apiserver地址默认为https://ebs-apiserver:8443。如果需要CA认证可以通过--apiserver-ca参数指定apiserver CA文件路径。三、API使用篇7. EulerMaker的API版本和资源有哪些EulerMaker的API group定义为ebs.openeuler.org当前版本为v1。主要资源包括Project、Snapshot、Build、Job和Runner等。其中Snapshot、Build、Job是Project下的子资源Project和Runner为集群级资源。8. 如何访问EulerMaker的API用户、外部系统和runner统一通过ebs-gateway访问ebs/v1API。客户端应使用Kubernetes-like API路径例如/apis/ebs/v1/projects。9. 普通用户和系统组件访问API有什么区别普通用户token只能访问自己拥有或被授权为member的Project和Project子资源不能访问全局Snapshot/Build/Job list/watch API和Runner API。系统组件可以使用system token访问全局API和Runner API。10. 如何通过API更新Job状态Runner通过Project API更新Job status推进Job phase/stage/resultRoot/message。具体可以参考components/runner/pkg/runner/agent.go中的实现。四、资源管理篇11. Snapshot、Build和Job之间是什么关系Snapshot、Build、Job是Project下的子资源按{project}/{name}存在资源全局前缀下。全局list/watch监听对应资源前缀例如/registry/ebs/buildsProject API的单Project list/watch监听对应Project子前缀例如/registry/ebs/builds/{project}。12. Runner的资源容量是如何定义的Runner上报的资源容量包括cpu、memory、ephemeral-storage。其中allocatable表示可调度容量当前实现不按运行中Job扣减cpu或memoryephemeral-storage反映工作目录所在文件系统的当前可用空间。13. 如何指定Job的运行时配置Job通过spec.runtime和spec.runtimeSpec声明本次任务需要的运行时配置。单个Runner资源通过spec.type声明自身能力。五、调度与执行篇14. Scheduler是如何工作的Scheduler通过全局Job API监听所有Project下的Job使用Runner API获取候选执行机然后根据调度策略将Job绑定到合适的Runner。15. Runner如何接收和执行JobRunner通过全局Job API建立watch只处理已绑定到自己的对象。Runner agent负责API watch、状态推进、超时控制和幂等清理具体运行时由executor承接。16. 调度失败的常见原因有哪些调度失败可能的原因包括资源不足、nodeSelector不匹配、tolerations不满足等。首版调度器支持nodeSelector、tolerations和常见资源名cpu、memory、ephemeral-storage。六、存储与持久化篇17. EulerMaker使用什么存储系统EulerMaker以etcd和Elasticsearch作为组合主存储。pkg/storage/hybrid/EnricherStore包装generic etcd store提供组合存储能力。18. 资源是如何持久化的各资源storage strategy负责在创建和更新时保护spec/status边界确保数据的一致性和正确性。具体实现可以参考components/ebs-apiserver/pkg/registry/ebs目录下的各storage.go文件。七、安全与权限篇19. EulerMaker的多租户是如何实现的首版引入多租户但不引入Tenant、Role、EBSUserAPI对象。租户身份来自JWT claim访问权限以Project为根。普通用户只能访问自身租户Project系统token可访问全局API。20. 如何进行API限流ebs-gateway支持API限流功能可以通过配置文件设置限流策略。具体实现可以参考components/ebs-gateway/pkg/gateway/ratelimit.go。八、故障排除篇21. 如何排查API访问问题如果遇到API访问问题可以检查以下几点确认ebs-gateway和ebs-apiserver是否正常运行检查认证token是否有效确认用户是否有访问对应Project的权限查看网关和apiserver的日志寻找错误信息22. Job执行失败怎么办Job执行失败时可以通过API查看Job的status信息特别是message字段了解失败原因。同时Runner会将执行日志记录到本地也可以查看Runner的日志文件进行排查。九、进阶使用篇23. 如何扩展EulerMaker的功能EulerMaker的架构设计支持组件化扩展。你可以通过添加新的API资源、实现新的storage策略或开发自定义的executor来扩展其功能。具体可以参考现有组件的实现方式。24. 如何监控EulerMaker的运行状态EulerMaker的各组件提供了状态监控接口例如ebs-apiserver提供/status子资源。你可以通过这些接口获取系统的运行状态也可以集成Prometheus等监控工具进行更全面的监控。十、未来展望篇25. EulerMaker未来有哪些发展计划根据设计文档EulerMaker未来可能会支持更多功能包括用户、角色、权限API对象更细粒度的API限流策略生成真实的OpenAPI schema提供Project范围的watch能力通过以上25个核心知识点相信你已经对EulerMaker有了更深入的了解。如果在使用过程中遇到其他问题可以参考项目的官方文档例如docs/zh/design/architecture.md和docs/zh/design/ebs-apiserver.md等。【免费下载链接】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),仅供参考