资讯动态

Apache Mesos 0.27.0 版本解析:Quota 配额、多磁盘与隐式角色

发布时间:2026/10/14 2:21:20 来源:尧图企业网站定制
云原生【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/mesos2/mesos点击查看免费下载Apache Mesos 0.27.0 是 Mesos 在资源管理能力上的一次里程碑式发布首次引入**资源配额Quota与多磁盘Multiple Disks支持并通过隐式角色Implicit Roles**解除了角色白名单的静态约束同时显著优化了大集群下state端点的性能。本文以 0.27.0 官方发布说明为骨架结合仓库内的配额文档、多磁盘文档、角色文档、升级指南及核心源码与测试逐一解析这些特性背后的设计与实现帮助调度器开发者、集群运维人员快速理解该版本的能力边界与升级要点。一、版本总览0.27.0 是继 0.26.x 之后的重大特性版本主要亮点均对应 CHANGELOG 中 Version 0.27.0 一节包括[MESOS-1791] 资源配额Quota提供**非可撤销non-revocable**的资源保证且配额不绑定特定 Mesos Agent与静态预留Reservation形成互补[MESOS-191] 多磁盘Multiple Disks允许运维人员在 Agent 上暴露 Root、Path、Mount 三种磁盘资源为磁盘 IO 密集型应用提供可靠、高性能的存储方案[MESOS-4085] 灵活角色 / 隐式角色Implicit Roles弃用 Master 启动时通过--roles指定静态角色白名单的方式[MESOS-2353] 大集群 state 端点性能改进重写state/state.json端点的 JSON 序列化路径。此外本版本还包含167 项 bug 修复与改进API 层面另有几处重要变更[MESOS-313] 向调度器上报 Executor 终止事件executorLost回调首次真正生效详见 docs/upgrades.md[MESOS-2315] 移除已弃用的CommandInfo::ContainerInfo[MESOS-4154] 将shutdown_frameworks重命名为teardown_frameworks影响--acls中的本地授权器配置docs/upgrades.md。二、资源配额Quota不绑定 Agent 的资源保证2.1 配额解决什么问题当多个用户共享一个集群时运维人员往往希望对每个用户可使用的资源量设置上限。Quota 正是为此设计允许运维人员以角色role为单位设置资源限制保证角色在集群范围内获得确定的资源份额。与 Reservation 相比Quota 不把资源固定绑定在某台 Agent 上因此角色可以在任何满足条件的 Agent 上获得资源调度弹性更强。注意0.27.0 中的配额 API 面向guarantee保证即确保角色可获得的最小资源量配额limit限制语义在 Mesos 1.9 才直接对外暴露并在后续版本中取代 guarantee详见 docs/quota.md 的 Deprecated 说明。本文按 0.27.0 当时的实现展开。2.2 支持与不支持的资源类型根据 docs/quota.md 的 Supported Resources 一节支持cpus、mem、disk、gpus以及任何SCALAR类型的自定义资源不支持ports以及任何RANGES或SET类型的自定义资源。2.3 设置配额Update Quota默认情况下每个角色都没有资源限制。运维人员通过 Master 的 v1 HTTP API 发送UPDATE_QUOTA请求来修改一个或多个角色的配额curl --request POST \ --url http://master-ip:master-port/api/v1/ \ --header Content-Type: application/json \ --data { type: UPDATE_QUOTA, update_quota: { force: false, quota_configs: [ { role: dev, limits: { cpus: { value: 10 }, mem: { value: 2048 }, disk: { value: 4096 } } }, { role: test, limits: { cpus: { value: 1 }, mem: { value: 256 }, disk: { value: 512 } } } ] } }要点all-or-nothing 语义如果其中任意一个角色的配额更新无效或未通过授权整个请求都不会生效force字段当当前配额消费量已超过新提供的限额时请求默认会被拒绝将force置为true可覆盖该检查对应 CHANGELOG 中的 [MESOS-3911]offer 回收Master 会尝试撤回rescind足够数量的 offer确保角色不会超出其限额对应 [MESOS-3912]。从源码看配额更新由 src/master/quota.cpp 中的UpdateQuota::perform完成它会先逐一校验每个QuotaConfig然后将其写入 Registry 的quota_configs并同步维护QUOTA_V2这一 Master 最小能力minimum capability标记——这保证了旧版本 Master 不会误读新格式的注册表数据。该实现位于 Master 的注册表操作Registry Operation链路中因此配额配置可随 Master 的高可用选举持久化。2.4 查看配额Web UIRoles标签页会展示所有已知角色的资源核算信息包括已配置的配额与配额消费量。v1 APIGET_QUOTA返回当前配额配置$ curl --request POST \ --url http://master-ip:master-port/api/v1/ \ --header Content-Type: application/json \ --header Accept: application/json \ --data { type: GET_QUOTA }响应示例JSON 结构见 docs/quota.md{ type: GET_QUOTA, get_quota: { status: { infos: [ { configs : [ { role: dev, limits: { cpus: { value: 10.0 }, mem: { value: 2048.0 }, disk: { value: 4096.0 } } }, { role: test, limits: { cpus: { value: 1.0 }, mem: { value: 256.0 }, disk: { value: 512.0 } } } ] } ] } } }/roles端点查看配额的消费量consumption$ curl http://master-ip:master-port/roles响应示例{ roles: [ { name: dev, weight: 1.0, quota: { role: dev, limit: { cpus: 10.0, mem: 2048.0, disk: 4096.0 }, consumed:{ cpus: 2.0, mem: 1024.0, disk: 2048.0 } }, allocated: { cpus: 2.0, mem: 1024.0, disk: 2048.0 }, offered: {}, reserved: { cpus: 2.0, mem: 1024.0, disk: 2048.0 }, frameworks: [] } ] }配额消费量的口径一个角色的配额消费量 它的分配allocations 预留reservations。即使预留资源尚未被分配也会计入配额消费而offered被提供的资源不记入配额消费docs/quota.md。监控指标Allocator 暴露以下配额指标键allocator/mesos/quota/roles/role/resources/resource/guaranteeallocator/mesos/quota/roles/role/resources/resource/limit2.5 配额实现的注意事项不支持嵌套角色例如eng/prod这类带斜杠的角色不能设置配额Failover 行为为了在 Master 故障恢复时正确执行限额Allocator 会暂停并停止发放 offer直到至少80% 的 Agent 重新注册或10 分钟过去这两个参数计划在后续版本中改为可配置对应 [MESOS-4073]配额消费的检查、offer 撤回与 DRF 排序的联动在 0.27 中已有完整测试覆盖如 CHANGELOG 中 [MESOS-3984]、[MESOS-3985] 所列的allocate()与 rescind 测试。三、多磁盘Multiple Disks为 IO 密集应用提供多种存储语义3.1 三种磁盘类型Mesos 为运维人员提供了暴露多种磁盘资源的机制。框架在创建持久卷时可以通过检查Offer中磁盘资源的source字段决定使用哪块磁盘docs/multiple-disk.md。磁盘资源共有三种形式类型判定方式说明RootDiskInfo未设置source基础磁盘资源通常映射到主操作系统盘数据落入 Agent 的work_dirPathsource枚举为PATH并带root目录辅助磁盘可被切分成更小的持久卷适合日志、归档、缓存等非性能敏感场景Mountsource枚举为MOUNT并带root挂载点辅助磁盘不可被切分提供独占磁盘设备的保证适合数据库、WAL、性能敏感应用3.2 通过--resources配置磁盘运维人员可在 Agent 启动时通过 JSON 格式的--resources选项提供这些磁盘源码入口见 src/slave/flags.cpp 的resources标志。默认情况下未指定--resources时Agent 只会向集群提供 Root 磁盘。重要提示一旦通过--resources手动指定了任何磁盘资源Mesos 将停止自动探测 Root 磁盘。因此若仍需使用 Root 磁盘必须按下述格式手动指定它。Root 磁盘示例可选项role表示将该磁盘静态预留给单个角色[ { name : disk, type : SCALAR, scalar : { value : 2048 } } ]Path 磁盘示例运维只需创建一个目录并将其作为root即可。多个Path磁盘位于同一文件系统时需要静态划分磁盘空间例如 10GB 设备挂载于/foo配置/foo/disk1与/foo/disk2两块 Path 磁盘时二者总量不应超过 10GB以免设备空间耗尽。Path 磁盘也很适合在测试/预发环境用操作系统盘上的几个目录模拟多磁盘环境。[ { name : disk, type : SCALAR, scalar : { value : 2048 }, disk : { source : { type : PATH, path : { root : /mnt/data } } } } ]Mount 磁盘示例在 Linux 上Mount磁盘必须对应/proc/mounts表中的挂载点。运维应将物理磁盘以首选文件系统挂载并将挂载点作为root。[ { name : disk, type : SCALAR, scalar : { value : 2048 }, disk : { source : { type : MOUNT, mount : { root : /mnt/data } } } } ]Block 磁盘Mesos 目前不允许运维直接暴露裸块设备。未来可能支持但需要先通过设计文档解决安全与灵活性方面的顾虑。3.3 Mount 磁盘的行为差异独占与报错语义由于 Mount 磁盘不可切分应用在超出卷容量时会依赖文件系统正确传播ENOSPC等磁盘错误正因如此disk/du隔离器对 Mount 磁盘被禁用对应 CHANGELOG 中的 [MESOS-4506]目录结构差异Path磁盘会在root下创建子目录来区分不同卷销毁持久卷时会一并删除该子目录Mount磁盘则不创建子目录应用可使用设备上的完整文件系统——这允许任务访问包含预先存在目录结构的卷例如已有的 Postgres 数据目录或 HDFS 数据目录销毁卷时 Mesos 会删除卷内文件但不会删除根目录挂载点docs/multiple-disk.md。运维在检查或清理残留数据时需注意这一区别。3.4 源码侧的支撑多磁盘能力在 0.27 中通过给Resource.DiskInfo增加Source字段实现CHANGELOG 中的 [MESOS-4378]并配套完成了一系列改造资源运算对DiskInfo.Source的适配[MESOS-4380]、按DiskInfo.Source创建持久卷目录[MESOS-4400]、文件系统隔离器从正确位置查找持久卷目录[MESOS-4402]、Agent 初始化时校验Source.Path中目录存在性[MESOS-4403]。在 src/common/resources_utils.cpp 中可以观察到磁盘资源在比较与合并时会剥离persistence与volume而保留source的细节处理这正是 Root/Path/Mount 三类磁盘身份判定在底层算术中的体现。四、隐式角色Implicit Roles告别静态白名单4.1 从角色白名单到隐式角色在 Mesos 0.26 及更早版本中只有出现在--roles白名单中的角色才能被使用运维通常需要同时配置 ACL 与白名单。0.27 引入了隐式角色概念[MESOS-4085]如果 Master 启动时未指定--roles则任意角色名都可以被使用。这意味着角色不再需要预先声明框架可以动态注册新角色控制“哪些 principal 可以使用哪些角色”的工作应完全交给 ACL 授权完成--roles白名单功能仍被支持但已弃用deprecated。这一点在源码中有直接印证。src/master/flags.cpp 中--roles标志的帮助文本明确写道A comma-separated list of the allocation roles that frameworks in this cluster may belong to.This flag is deprecated; if it is not specified, any role name can be used.src/tests/role_tests.cpp 的RoleTest.ImplicitRoleRegister测试完整验证了该行为框架以一个新角色名new-role-name注册后能够正常收到 offer、完成动态预留dynamic reservation并创建持久卷。ImplicitRoleStaticReservationsrc/tests/role_tests.cpp则验证了隐式角色下静态预留新角色资源并运行任务的能力。4.2 角色语义的配套变化角色是 Mesos 中的资源消费者概念代表组织内的用户、团队、服务或框架docs/roles.md。0.27 的角色体系还有以下配套事实多个框架可订阅同一角色需声明MULTI_ROLE能力共享该角色资源的框架应相互协作docs/roles.md默认角色*表示未预留资源框架未提供FrameworkInfo.role时会被分配到*角色名必须是合法的目录名不能为空、不能是.或..、不能以-开头、不能包含斜杠/退格/空白字符docs/roles.mdDRF 排序纳入预留资源0.27 中预留资源开始计入加权 DRF 角色排序CHANGELOG 中的 [MESOS-4526]、[MESOS-4527]因此如果运维显式设置了角色权重可能需要随集群中预留资源的变化调整权重docs/upgrades.md。4.3 对自定义 Allocator 与隔离器模块的影响升级到 0.27 时需要注意Allocator API 因隐式角色的引入而发生变化自定义 Allocator 实现需要更新对应 [MESOS-4000]。此外隔离器Isolator的prepare接口改用ContainerConfigprotobuf并将ContainerPrepareInfo重命名为ContainerLaunchInfo——隔离器模块编写者需要按新接口调整并重新编译对应 [MESOS-4240]、[MESOS-4282]详见 docs/upgrades.md。五、state 端点性能改进与其余修复[MESOS-2353] 对大规模集群下state端点的性能进行了专项改进其 JSON 序列化路径被迁移到 stout 新引入的jsonify设施上CHANGELOG 中的 [MESOS-4236]~[MESOS-4239]同时state.json的响应结构也在后续版本中持续被修正如 0.26.2 中修复的重复active字段问题保证超大集群的运维查询体验。0.27.0 其余值得关注的修复与改进还包括可配置的已完成任务/框架历史大小[MESOS-3307]、使用线程安全的strerror_r替代strerror[MESOS-3551]、Master 故障切换后框架进程挂起问题的修复[MESOS-3595]、HTTP Basic Authentication 支持[MESOS-3232]、--force配额健全性检查开关[MESOS-3911]、日志大小受限的 ContainerLogger 模块[MESOS-4136]等完整清单见 CHANGELOG。六、从 0.26.0 升级到 0.27.0按照 docs/upgrades.md从 Mesos 0.26.0 集群滚动升级到 0.27.0 是直接可行的仅包含少量向后兼容的弃用项。升级要点如下隐式角色若省略--roles任意角色名可用角色准入控制改用 ACLexecutorLost回调Agent 检测到自定义 Executor 终止时调度器接口的executorLost回调现在会被调用此前从未触发请确保调度器可以安全处理该回调注意该回调可能无法可靠投递隔离器接口prepare改用ContainerConfigContainerPrepareInfo更名为ContainerLaunchInfo模块需重新编译ACL 重命名shutdown_frameworks弃用改用teardown_frameworks影响--acls预留资源计入 DRF显式设置的权重可能需要调整。滚动升级的执行顺序为重建并安装所有模块 → 安装新 Master 二进制并重启 Master → 安装新 Agent 二进制并重启 Agent → 用最新 native 库/JAR/egg 升级调度器并重启 → 必要时升级 Executor。新角色体系与配额、多磁盘能力均保持向后兼容因此可以在不停机的条件下逐组件完成升级。七、小结Apache Mesos 0.27.0 通过Quota提供了面向角色的、不绑定 Agent 的非可撤销资源保证通过Multiple Disks将存储从单一 Root 盘扩展为 Root/Path/Mount 三种语义通过Implicit Roles移除了角色白名单的静态限制并推动授权工作全面转向 ACL同时借助jsonify重构提升了 state 端点在大型集群中的响应性能。对于调度器开发者而言需要注意executorLost回调的启用与隔离器接口变更对于集群运维人员而言配额配置、多磁盘暴露与升级顺序是本版本落地的三个关键抓手。后续版本1.9在此基础之上将配额从 guarantee 语义演进为 limit 语义但 0.27.0 确立的配额 API 骨架、多磁盘模型与隐式角色机制至今仍是理解 Mesos 资源管理体系的重要基石。赞分享云原生【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/mesos2/mesos点击查看免费下载相关推荐Apache Mesos 0.27.0 版本技术解读资源配额、多磁盘支持与隐式角色Apache Mesos 0.27.0 版本技术解读资源配额、多磁盘支持与隐式角色 Apache Mesos 0.27.0 是 Mesos 演进历程中的一个重集群管理任务调度后端Apache Mesos 0.27.0 版本特性详解资源配额、多磁盘支持与隐式角色Apache Mesos 0.27.0 版本特性详解资源配额、多磁盘支持与隐式角色 Apache Mesos 0.27.0 是 Mesos 发展史上的一个关键云原生集群管理容器编排任务调度Apache Mesos 配额Quota实战指南基于角色Role的资源限额配置、查询与原理Apache Mesos 配额Quota实战指南基于角色Role的资源限额配置、查询与原理 当多个用户或团队共享同一个 Mesos 集群时某个角色集群管理任务调度后端上一篇Cartography实现标签页控制器iOS应用界面设计下一篇如何扩展ViewAnimator动画库第三方动画类型与集成方案完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑