EulerMaker Runner执行机详解从注册到任务调度的全流程解析【免费下载链接】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 Runner执行机是openEuler/EulerMaker软件包构建系统的核心组件负责完成从源代码到二进制包的构建任务支持开发者自定义操作系统场景。本文将详细解析Runner执行机从注册到任务调度的完整工作流程帮助新手用户快速理解其工作原理和使用方法。一、Runner执行机的核心定位与职责Runner执行机在EulerMaker系统中扮演着关键角色它是Job任务的实际执行者。Runner不直接访问etcd或Elasticsearch等存储系统所有资源读写都通过统一API完成其架构如下runner - ebs-gateway - ebs-apiserver - etcd / Elasticsearch其中ebs-gateway负责认证、鉴权、审计和请求转发ebs-apiserver负责资源语义、校验、默认值等处理。Runner的核心职责包括注册Runner创建或更新集群级Runner对象声明执行机类型、架构、主机名、污点等信息上报状态定期更新Runner.status包括phase、资源容量、可调度资源、地址、系统信息和心跳时间监听Job通过全局Job watch获取资源变化只处理status.runner等于自身名称的Job执行Job根据Job spec准备执行环境、提供payload参数、运行任务、收集产物回写结果通过Project API更新Job status推进Job phase/stage/resultRoot/message二、Runner执行机的生命周期管理Runner执行机的生命周期包含多个阶段其状态流转如下Registering - Booting - Idle - Running - Idle | v Offline各阶段的含义如下RegisteringRunner已启动正在创建或更新Runner对象BootingRunner对象已就绪正在初始化执行环境和watch循环IdleRunner可调度当前无运行中JobRunningRunner正在执行一个或多个JobOfflineRunner主动下线或心跳超时不应继续接收新JobRunner执行机通过定期上报心跳来维持其在线状态默认心跳间隔为30秒。心跳内容包括资源容量、可调度资源、地址信息、系统信息等。三、Runner执行机的注册流程Runner执行机的注册过程是其加入EulerMaker集群的第一步主要通过以下步骤完成创建Runner配置Runner启动时需要指定EBS_GATEWAY、EBS_TOKEN、RUNNER_NAME、RUNNER_TYPE、RUNNER_ARCH等配置参数检查Runner是否存在通过API查询是否已存在同名的Runner对象创建或更新Runner对象如果Runner不存在则创建新对象存在则更新现有对象注册过程的核心代码实现位于components/runner/pkg/runner/agent.go文件中关键函数包括register和runnerObject。四、Job任务的调度与执行流程Runner执行机通过全局API watch所有Job但只处理已绑定到自己的对象。典型的Job执行流程如下Runner watch到绑定给自己的Job根据metadata.namespace确定所属Project更新Runner.status.phaseRunning更新Job.status.stageRunning准备执行环境按Job.spec.timeoutSeconds限制执行时间将Job.spec.payload作为YAML参数提供给任务执行入口收集产物得到resultRoot成功时更新Job.status.phaseCompleted、stagePostRun、resultRoot失败时更新Job.status.phaseFailed、message清理环境更新Runner.status为Idle或继续RunningJob执行的核心逻辑在components/runner/pkg/runner/agent.go的runJob函数中实现。五、执行器与容器生命周期管理Runner agent的执行逻辑按kubelet管理Pod的思路拆分具体运行时由executor承接。目前支持的执行器类型包括spec.type执行方式说明dcDocker / 容器环境常规包构建vm虚拟机环境需要更强隔离的构建hw物理机环境需要裸机能力的任务以DC容器运行时为例其容器生命周期管理流程如下解析Job.spec.runtimeSpec得到镜像、网络、权限、工作目录、挂载等容器配置为Job创建本地workDir和resultDir将Job.spec.payload写入workDir/payload.yaml拉取或确认业务镜像可用创建容器挂载workDir、resultDir并写入Job/Project/Runner标识label启动容器由业务入口读取/workspace/payload.yaml并执行任务流式采集或落盘容器日志等待容器退出按退出码决定Job成功或失败超时时先stop超过grace period后kill收集resultDir清理容器和临时目录DC执行器的实现代码位于components/runner/pkg/runner/dc_executor.go文件中。六、Runner执行机的部署与配置Runner作为独立组件容器化部署至少需要以下配置配置说明EBS_GATEWAYgateway地址例如https://ebs-gateway:8443EBS_TOKENRunner访问gateway的认证令牌RUNNER_NAMERunner资源名称默认可使用hostnameRUNNER_TYPERunner类型dc/vm/hwRUNNER_ARCHRunner架构aarch64/x86_64推荐的Docker Compose部署配置示例services: ebs-runner-dc-1: image: ebs-runner:latest environment: EBS_GATEWAY: https://ebs-gateway:8443 EBS_TOKEN: ${RUNNER_TOKEN} RUNNER_NAME: runner-dc-aarch64-01 RUNNER_TYPE: dc RUNNER_ARCH: aarch64 volumes: - /var/run/docker.sock:/var/run/docker.sock - runner-cache:/var/lib/ebs-runner七、故障处理与安全边界Runner执行机具备完善的故障处理机制主要包括场景处理方式gateway不可达watch和心跳失败后指数退避重连watch中断使用上次resourceVersion恢复不可恢复时重新list/watch心跳超时控制器将Runner标记为Offlinescheduler不再选择该RunnerRunner重启重新注册Runner恢复心跳根据现有Job状态决定是否清理或继续Job执行失败更新Job.status.phaseFailed和message并清理本地环境Job超时终止执行进程更新Job为Failed或Aborted状态更新冲突使用apiserver返回的resourceVersion重新读取并重试在安全方面Runner执行机遵循以下原则Runner认证统一经过ebs-gatewayRunner token权限限制为注册/读取自身Runner、更新自身Runner status等必要操作Runner不应拥有直接访问etcd、Elasticsearch的权限DC类型Runner如需挂载Docker socket应通过隔离网络、只读挂载等方式降低风险八、总结EulerMaker Runner执行机是构建系统的核心组件负责从注册到任务执行的全流程管理。通过本文的介绍您应该对Runner的工作原理、生命周期、任务调度流程有了清晰的认识。如需了解更多细节可以参考项目中的设计文档docs/zh/design/runner.md和源代码实现。要开始使用EulerMaker您可以通过以下命令克隆仓库git clone https://gitcode.com/openeuler/EulerMaker希望本文能帮助您更好地理解和使用EulerMaker Runner执行机提升软件包构建效率 【免费下载链接】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),仅供参考