Mesos 資源分配
眾所周知, Mesos在運行時使用wDRF( Dominant Resource Fairness)算法進行一級資源分配, 通過應用程序(Framework)運行時使用資源進行二級資源調度。以此來達到資源分配的公平性和靈活性。但在資源有限的情況下,對於尚未部署的程序如何分配資源?為此Mesos提供了兩種方式,基於指定節點(Agent)的資源預留(reserve)和基於整個集群的資源配額(quota)。這種資源管理方式間接的划分了整個集群的資源。
附:其中 --weights 參數已不被推薦使用。
1. 資源預留 (reserve & unreserve)
resource reserve 針對 具體的節點(agent)進行,在啟動或運行期間通過master對某個agent進行操作。
Mesos在 0.14.0版本中加入了靜態資源預留功能,在 0.23.0 版本中加入了動態資源預留功能。所謂靜態即在節點加入集群時進行配置且運行后不能修改, 動態即運行時配置並修改(資源預留、取消資源預留)。這兩種方式都基於角色(Role)來完成。同時為了保證角色的使用,提供了ACL和認證/授權。
1.1 靜態資源預留
靜態資源預留可以分為兩種方式(層次、顆粒度)。粗顆粒度是節點層面,細顆粒度是CPU、Mem等。粗粒度的本質還是細粒度,只是由內部實現綁定各類資源的全部份額。
其配置方式通過在agent啟動時 --resources
指定,如: --resources="cpus:4;mem:2048;cpus(ads):8;mem(ads):4096"
即 為ads
角色保留8 cpus和4g mem。
1.2 動態資源預留
動態資源預留可以由Framework或User來執行。Framework可以在收到資源的時候調用reserve來保留。User或其他管理工具,可以調用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://<ip>:<port>/master/reserve
1.3 節點層面
每個節點都有一個默認角色, 通過 啟動時的 --default_role 參數控制, 默認值為*
, 這是一個特殊標識,標識該資源未被保留,任何未指定role的Framework可以使用該資源,同時這些資源也可以通過動態保留接口來分配給其他指定的role。在節點啟動時也可以指定其他默認角色,如slave_public,角色名需要符合規范(不能包含空白字符, 符合Linux目錄命名規則,參見代碼common/roles.cpp 或文檔invalid roles。
輸入的角色名應該在白名單中,即master啟動時指定的--roles
參數中。在0.27版本以后,該參數沒有指定值時,可以輸入任何角色名。同時配合ACL,保障角色被授權使用。
1.4 Role 層面
對於空的whitelist,即未指定白名單時,role可以為任何符合命名規則的值。
1.5 Framework層面
目前Framework和Role是多對一。未來可以支持多對多的關系,即一個Framework可以使用多個role,一個role也可以被多個Framework使用。參見 issue, 消息代碼 mesos.proto
Framework對role的設置則通過acl來進行控制。
2. 資源配額 (quota)
同資源預留,配額也基於Role進行。配額為role分配在整個集群中的資源,而不具體到指定的節點上。配額包含已經通過reserve在某些節點上進行預留的資源。配額不能被Framework的API調用操作,只能通過http接口操作(配合ACL來授權調用)。
配額目前支持添加、查詢、刪除。具體參見文檔 quota
由於配額是在運行期間設置,對於已經被Framework給占用的資源,是無法剝奪的,除非Framework運行結束。因此為配額預留的資源不會分給使用其他role運行的Framework。
配額不能針對端口這種資源。目前,Mesos只提供配額的絕對值的最小設置方式(也就是說不能提供相對比例的最大分配)。在資源充足的情況下,可以超過配額限制的資源。
3 ACL & Authorization
ACL為以上操作提供鑒權,ACL提供了兩種實現方式,local模式和custom模式。使用哪種模式由參數--authorizers
指定,默認值為local。local模式通過在master啟動時指定--acls
來進行配置。對於custom模式,則需要編寫mesos的module,在啟動時加載。
local規則和custom authorizer,參見文檔acl。
4 authentication
Mesos默認使用sasl框架來進行用戶認證,也可以通過加裝自定義的認證模塊來修改認證方式。
Authentication默認不啟用。參見文檔authentication。