
本文共 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是不启用的。
发表评论
最新留言
关于作者
