Mesos 资源分配
发布日期:2025-04-13 17:08:18 浏览次数:8 分类:精选文章

本文共 2157 字,大约阅读时间需要 7 分钟。

Mesos 资源管理机制深入解析

值得注意的是,Mesos使用wDRF(Dominant Resource Fairness)算法进行一级资源分配,通过应用程序(Framework)运行时使用资源进行二级资源调度,从而实现资源分配的公平性和灵活性。在资源有限的情况下,如何为尚未部署的程序分配资源?Mesos为此提供了两种方式:基于指定节点的资源预留(reserve)和基于整个集群的资源配额(quota)。

资源预留(reserve & unreserve)

资源预留是针对具体节点(Agent)的资源管理方式,Master在启动或运行期间可以对特定节点进行操作。

从0.14.0版本开始,Mesos引入了静态资源预留功能,0.23.0版本进一步支持动态资源预留功能。静态资源预留是指在节点加入集群时进行配置且运行后不能修改,而动态资源预留则是指在运行时进行配置并可以修改。两种方式均基于角色(Role)进行操作,同时提供了ACL和认证/授权机制以确保角色使用的安全性。

静态资源预留

静态资源预留分为粗颗粒度和细颗粒度两种方式。粗颗粒度是基于节点,细颗粒度是基于CPU、内存等资源。粗颗粒度的本质还是细粒度,只是由内部实现绑定各类资源的全部份额。配置方式是通过在节点启动时使用--resources参数指定,例如:

--resources="cpus:4;mem:2048;cpus(ads):8;mem(ads):4096"

其中,cpus(ads):8 表示ads角色预留8个CPU,mem(ads):4096 表示ads角色预留4GB内存。

动态资源预留

动态资源预留可以由Framework或用户执行。Framework可以在收到资源时调用reserve方法来保留资源,用户或其他管理工具可以通过HTTP接口完成操作。例如:

curl -i \     -u operator_principal:password \     -d slaveId=slave_id \     -d resources='[ { "name": "cpus", "type": "SCALAR", "scalar": { "value": 8 }, "role": "ads", "reservation": { "principal": operator_principal } }, { "name": "mem", "type": "SCALAR", "scalar": { "value": 4096 }, "role": "ads", "reservation": { "principal": operator_principal } } ]' \     -X POST http://master_ip:master_port/master/reserve

节点层面

每个节点都有一个默认角色,通过--default_role参数控制,默认值为*。这个特殊角色表示该资源未被保留,任何未指定角色的Framework可以使用该资源,同时这些资源也可以通过动态保留接口分配给其他指定的角色。节点启动时也可以指定其他默认角色,如slave_public,角色名需要符合Linux目录命名规则。

输入的角色名必须在白名单中,即Master启动时指定的--roles参数中。从0.27版本开始,该参数没有指定值时,可以输入任何角色名。同时配合ACL,确保角色被授权使用。

Role层面

对于空白白名单,即未指定白名单时,角色可以为任何符合命名规则的值。

Framework层面

目前Framework和Role是多对一的关系,未来可以支持多对多的关系,即一个Framework可以使用多个角色,一个角色也可以被多个Framework使用。具体实现方式需要参考Framework对Role的设置,通过ACL进行权限控制。

资源配额(quota)

资源配额基于角色进行设置,配额是指在整个集群中分配给特定角色使用的资源总量,而不是具体到指定的节点。配额包含已经通过reserve在某些节点上进行预留的资源。

配额目前支持添加、查询、删除操作,具体操作方式需要参考文档。由于配额是在运行时设置的,对于已经被Framework占用的资源,无法通过配额机制剥夺资源,除非Framework运行结束。因此,为配额预留的资源不会分给使用其他角色运行的Framework。

需要注意的是,配额目前只支持绝对值的最小设置方式,无法提供相对比例的最大分配方式。在资源充足的情况下,可以超过配额限制的资源使用。

ACL & Authorization(访问控制列表 & 授权)

ACL为以上操作提供鉴权,提供了两种实现方式:local模式和custom模式。local模式通过在Master启动时指定--acls来进行配置,而custom模式则需要编写Mesos模块并在启动时加载。

local模式和custom授权器的具体实现方式需要参考文档。

Authentication(身份验证)

Mesos默认使用SASL框架进行用户认证,也可以通过添加自定义认证模块来更改认证方式。

默认情况下,Authentication是不启用的。

上一篇:message.channel.id Discord PY
下一篇:Merge 的小技巧

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月02日 14时49分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章