mesos 資源分配


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM