您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
如何用curl来访问MESOS Scheduler HTTP API
 
作者:高智芳  来源:CSDN  发布于 2016-4-28
  2118  次浏览      35
 

MESOS 提供了Scheduler HTTP RESTful API. 不论是软件开发人员还是软件测试人员都可以通过这些API 进一步了解mesos的工作机制。本文讲述了如何用curl来访问这些API。

环境配置

1.mesos master,master的command options 设置如下:

MESOS_MASTER_OPTS="--work_dir=/var/lib/mesos --log_dir=/var/log/mesos"

2 mesos slaves,每个slave的配置是一样的,2 CPU,996M memory。slave的command options设置如下

MESOS_SLAVE_OPTS="--master=$MESOS_MASTER_IP:5050 --log_dir=/var/log/mesos"

注册Framework

1.注册framework是framework与mesos master通信的第一步。Framework注册成功之后,才会建立起和mesos master之间的联系。运行以下命令来注册一个framework。

# curl –vv --no-buffer –X POST -H "Content-Type:
 application/json" -d@register.json 
http://$MESOS_MASTER_IP:5050/master/api/v1/scheduler

curl 后面的-d 指的是传送给API的data. 这个data是个json串。在命令行中写长的json串是个比较痛苦的事情,最好将json串写进一个文件。本例中该文件的名字为register.json. json文件怎么定义可以查看mesos.proto, scheduler.proto.

Response body like this:
  * upload completely sent off: 257 out of 257 bytes 
 < HTTP/1.1 200 OK 
 < Date: Fri, 15 Apr 2016 05:56:03 GMT 
 < Mesos-Stream-Id:
 b3a3e239-f0ad-43d3-b635-1c1d9c66566b 
 < Content-Type: application/json 
 < X-Cache: MISS from db03b04  
< X-Cache-Lookup: MISS from db03b04:3128  
< Transfer-Encoding: chunked 
 < Via: 1.1 db03b04 (squid/3.3.8) 
 < Connection: keep-alive  <  70  
{"subscribed":{"framework_id":{"value":"test13"}},
"type":"SUBSCRIBED"}20  
{"offers":{"offers":[{"agent_id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},
"framework_id":{"value":"test13"},
"hostname":"slave1","id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O4"},
"resources":[{"name":"cpus","role":"*","scalar":
{"value":2.0},"type":"SCALAR"},
{"name":"mem","role":"*","scalar":
{"value":996.0},"type":"SCALAR"},
{"name":"disk","role":"*","scalar":
{"value":30509.0},"type":"SCALAR"},
{"name":"ports","ranges":{"range":
[{"begin":31000,"end":32000}]},
"role":"*","type":"RANGES"}],"url":
{"address":{"hostname":"slave1",
"ip":"9.111.254.36","port":5051},
"path":"\/slave(1)","scheme":"http"}},
{"agent_id":{"value":"
b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S0"},
"framework_id":{"value":"test13"},"hostname":"slave0",
"id":{"value":"
b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O5"},
"resources":[{"name":"cpus","role":"*",
"scalar":{"value":2.0},"type":"SCALAR"},
{"name":"mem","role":"*","scalar":{"value":996.0},
"type":"SCALAR"},{"name":"disk","role":"*",
"scalar":{"value":30509.0},"type":"SCALAR"},
{"name":"ports","ranges":{"range":
[{"begin":31000,"end":32000}]},
"role":"*","type":"RANGES"}],
"url":{"address":{"hostname":"slave0",
"ip":"9.111.254.62","port":5051},
"path":"\/slave(1)","scheme":"http"}
}]},"type":"OFFERS"}

Mesos-Stream-Id, 作为该framework的唯一标识。在后面的actions 像launch task, decline offers等都需要用到它. 
framework 注册成功之后,如果master 有资源的话,该framework会收到master发送来的offers。

register.json文件内容示例:

{  "framework_id": {"value" : "test13"}, 
 "type":"SUBSCRIBE",  
"subscribe":{  
"framework_info":{  "user":"root",  "name":"test13", 
 "failover_timeout":60,  
"role":"aa",  "id":{"value":"test13"}, 
 "principal":"test",  
"capabilities":{"type":"REVOCABLE_RESOURCES"}  }, 
 "force":true  }  }

2.使用已注册好的framework 来launch task。

# curl -vv --no-buffer -X POST -H "Content-Type: 
application/json" -H 
"Mesos-Stream-Id:b3a3e239-f0ad-43d3-b635-1c1d9c66566b"
 -d@launch_task.json 
http://$MESOS_MASTER_IP:5050/master/api/v1/scheduler

Response body like this:

* Done waiting for 100-continue  
< HTTP/1.1 202 Accepted 
 < Date: Wed, 13 Apr 2016 05:37:44 GMT  
< Content-Length: 0  
< X-Cache: MISS from db03b04  
< X-Cache-Lookup: MISS from db03b04:3128  
< Via: 1.1 db03b04 (squid/3.3.8) 
 < Connection: keep-alive

launch_task.json文件内容示例:

{          
"framework_id":{"value":"test13"},          
"type":"ACCEPT",         
 "accept":{                  
"offer_ids":[                         
 {"value":"81c111bd-f27d-41a4-b184-64090dec3048-O428"}                         
 ],                  
"filters":{},                  
"operations":[                                 
 {                                  
"type":"LAUNCH",                                  
"launch":{"task_infos":[{                                                         

 "name":"task 00012",                                                          

"task_id":{"value": "00012"},                                                         
 "agent_id":{"value": "5bb4aba0-628b-4309-b36f-767db1ebb7f4-S0"},                   
                                       
"resources":[                                                                         
 {                                                                         

 "name":"mem",                                                                          
"type":"SCALAR",                                                                         
 "scalar":{"value":996.0}                                                      
                   
 },                                                                          
{                                                                          

"name":"cpus",                                                                          
"type":"SCALAR",                                                                          
"scalar":{"value":1.0}                                                                        
  }                                                                 
 ],                                                         
 "command":{"value": "/bin/sleep 3000s"}                                                         
 }                                                         
 ]                                                  
}                                         
 }                          
]         
 }  
}

Result

查看framework output , framework 收到了UPDATE event, 这是MESOS master发给framework更新task 状态的UPDATE

{"type":"UPDATE","update":
{"status":{"agent_id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},
"container_status":{"network_infos":
[{"ip_address":"9.111.254.36",
"ip_addresses":[{"ip_address":"9.111.254.36"}]}]},
"executor_id":{"value":"00016"},
"source":"SOURCE_EXECUTOR",
"state":"TASK_RUNNING",
"task_id":{"value":"00016"},
"timestamp":1460526113.05411,
"uuid":"H9KoCldtRTu0T7halLxs9w=="}}}20 
 {"type":"HEARTBEAT"}391

注意:master 会将当前offer剩余的资源作为新的offer 提供给其它的framework。形成一个新的资源。 
3. Framework 收到task status 之后,需要发acknowledge event 给master ,表示已经收到。master就会一直不停的发同样的event给framework直到它收到该event的acknowledge

# curl -vv --no-buffer -X POST -H "Content-Type: 
application/json" 
-H "Mesos-Stream-Id:b3a3e239-f0ad-43d3-b635-1c1d9c66566b"
 -d@acknowledge.json 
http://$MESOS_MASTER_IP:5050/master/api/v1/scheduler

Response body like this:

* upload completely sent off: 
264 out of 264 bytes  
< HTTP/1.1 202 Accepted  
< Date: Wed, 13 Apr 2016 06:01:31 GMT  
< Content-Length: 0  
< X-Cache: MISS from db03b04  
< X-Cache-Lookup: MISS from db03b04:3128 
 < Via: 1.1 db03b04 (squid/3.3.8)  
< Connection: keep-alive

acknowledge.json的文件内容示例如下:

{    "framework_id"    : 
{"value" : "test13"},    
"type"            : "ACKNOWLEDGE",    
"acknowledge"     :
 {      "agent_id"  :  
{"value" : 
"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},      
"task_id"   : 
 {"value" : "00016"},      
"uuid"      :  
"H9KoCldtRTu0T7halLxs9w=="    }  }

Result

在Framework的output里,同样UUID的event信息不再出现

4. 当task 运行完毕的时候,它所占用的资源会被释放掉,从而一个新的资源产生了,master又将该资源按照DRF算法发给了相应的framework。

5. Decline offer, 如果目前分配给framework的offer不合适,framework可以decline it。

# curl -vv --no-buffer -X POST -H "Content-Type: 
application/json" 
-H "Mesos-Stream-Id:b3a3e239-f0ad-43d3-b635-1c1d9c66566b"
 -d@decline.json 
http://$MESOS_MASTER_IP:5050/master/api/v1/scheduler

Response body like this

* upload completely sent off: 214 out of 214 bytes  
< HTTP/1.1 202 Accepted  
< Date: Wed, 13 Apr 2016 06:17:56 GMT  
< Content-Length: 0  
< X-Cache: MISS from db03b04  
< X-Cache-Lookup: MISS from db03b04:3128 
 < Via: 1.1 db03b04 (squid/3.3.8) 
 < Connection: keep-alive  
<

decline.json 文件内容示例:

{    "framework_id"    : 
{"value" : "test13"},   
 "type"            : 
"DECLINE",    "decline"         :
 {      "offer_ids" : [                     
{"value" : "b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O15"}                  
  ]    }  }

Result

被decline的offer不再可用。

6. 如果在mesos cluster 运行很多个task,在mesos cluster 系统里面就会不停的创造出很多的资源碎片,这些碎片都不能单独的launch task的时候,该怎么办呢?有两个办法可以合并同一个slave上面的资源碎片。

6.1 ACCEPT event

在launch task的时候,将slave上面的碎片资源写成list,这样会自动合并碎片资源。注意这些资源碎片一定是属于同一个slave
Launch_task.json 文件内容示例:

{          
"framework_id":{"value":"test13"},          
"type":"ACCEPT",          
"accept":{                  

"offer_ids":[                   
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O14"},  

{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O16"}                  
       
 ],                 
 "filters":{},                  
"operations":[                                  
{                                 
 "type":"LAUNCH",                                 
 "launch":{"task_infos":[{                                                 
        
 "name":"task 00017",                                                          
"task_id":{"value": "00017"},                                                         
 "agent_id":{"value": "b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},          
                                               
 "resources":[                                                                          
{                                                                
 "name":"mem",                                                                         
 "type":"SCALAR",                                                                          
"scalar":{"value":996.0}                                                                        
  },                                                   
                       
{                                                                          
"name":"cpus",                                                                         
 "type":"SCALAR",                                                                         
 "scalar":{"value":2.0}                                                                       
   }                                                                  
],                                                         
 "command":{"value": "/bin/sleep 180s"}                                                      
    }                                                         
 ]                                                 
 }                                        
  }                        
  ]         
 }  }

当task运行完毕,mesos master就会将这些资源作为整块资源按照DRF算法发给相应的framework

6.2 decline event 合并碎片资源

将各个碎片资源decline掉, 这样也能整合碎片资源。 例如有三个offers,这3个offer都属于同一个slave。decline 这些offer之后,mesos master会自动整合这些碎片资源,然后按照DRF算法将合并后的资源发给相应的framework

{"offers":{"offers":[{"agent_id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},
"framework_id":{"value":"test13"}
,"hostname":"slave1","id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O24"},
"resources":[{"name":"cpus","role":"*",
"scalar":{"value":1.0},"type":"SCALAR"},
{"name":"mem","role":"*","scalar":{"value":512.0},
"type":"SCALAR"}],"url":{"address":
{"hostname":"slave1","ip":"9.111.254.36","port":5051},
"path":"\/slave(1)","scheme":"http"}}]},"type":"OFFERS"}    
{"offers":{"offers":[{"agent_id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},
"framework_id":{"value":"test13"},"hostname":
"slave1","id":{"value":
"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O26"},
"resources":[{"name":"cpus","role":"*",
"scalar":{"value":1.0},"type":"SCALAR"},
{"name":"mem","role":"*","scalar":
{"value":256.0},"type":"SCALAR"}],
"url":{"address":{"hostname":"slave1",
"ip":"9.111.254.36","port":5051},"path":
"\/slave(1)","scheme":"http"}}]},"type":"OFFERS"}   
 {"offers":{"offers":[{"agent_id":{"value":
"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"},
"framework_id":{"value":"test13"},"hostname":
"slave1","id":{"value":
"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O27"}
,"resources":[{"name":"ports","ranges":
{"range":[{"begin":31000,"end":32000}]},
"role":"*","type":"RANGES"},
{"name":"mem","role":"*","scalar":
{"value":228.0},"type":"SCALAR"},
{"name":"disk","role":"*",
"scalar":{"value":30509.0},
"type":"SCALAR"}],
"url":{"address":
{"hostname":"slave1",
"ip":"9.111.254.36"
,"port":5051},"path":
"\/slave(1)","scheme":"http"}
}]},"type":"OFFERS"}

decline offer 内容如下:


{ "framework_id" : {"value" : "test13"}, "type" : "DECLINE", "decline" : { "offer_ids" : [ {"value" : "b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O24"}, {"value" : "b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O26"}, {"value" : "b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-O27"} ] } }

decline 成功以后,一个整合过的offer就会发送给相应的framework

7. kill task。

kill event主要用于kill special task,一次kill一个task

# curl -vv --no-buffer -X POST -H "Content-Type: 
application/json" -H
 "Mesos-Stream-Id
:b3a3e239-f0ad-43d3-b635-1c1d9c66566b" 
-d@kill_task.json 
http://$MESOS_MASTER_IP:5050/master/api/v1/scheduler

Response body like this

* upload completely sent off: 211 out of 211 bytes  
< HTTP/1.1 202 Accepted  
< Date: Fri, 15 Apr 2016 13:08:25 GMT 
 < Content-Length: 0  
< X-Cache: MISS from db03b04  
< X-Cache-Lookup: MISS from db03b04:3128  
< Via: 1.1 db03b04 (squid/3.3.8)  
< Connection: keep-alive

kill_task.json 文件内容示例:

{    "framework_id"    
: {"value" : "test13"},    
"type"            :
 "KILL",    "kill"           
 : {      "task_id"   :  
{"value" : "00020"},      
"agent_id"  :  
{"value" : "b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S1"} 
   }  }

Result 
The output in framework like this:

{"type":"UPDATE","update":
{"status":{"agent_id":
{"value":"b5e0c23f-237e-4398-816f-ad1a4aa7d3f3-S0"},
"container_status":
{"network_infos":
[{"ip_address":"9.111.254.62",
"ip_addresses":[{"ip_address":"9.111.254.62"}]}]},
"executor_id":{"value":"00012"},
"message":"Command terminated with signal Terminated",
"source":"SOURCE_EXECUTOR","state":
"TASK_KILLED","task_id":{"value":"00012"}
,"timestamp":1460725705.73596,"uuid":
"mKSkxCycRLKS8y4YA2HM4A=="}}}

该task的资源被释放重新利用。如果只有一个framework的话,在当前framework的output中就会有一个新的offer。 
8. TEARDOWN framework

# curl -vv --no-buffer -X POST -H "Content-Type: 
application/json" -H  
"Mesos-Stream-Id: 
b3a3e239-f0ad-43d3-b635-1c1d9c66566b" 
-d@teardown.json
 http://9.111.254.199:5050/master/api/v1/scheduler

Response body like this

* upload completely sent off: 
77 out of 77 bytes  
< HTTP/1.1 202 Accepted  
< Date: Fri, 15 Apr 2016 13:25:49 GMT  
< Content-Length: 0  
< X-Cache: MISS from db03b04 
 < X-Cache-Lookup: MISS from db03b04:3128  
< Via: 1.1 db03b04 (squid/3.3.8)  
< Connection: keep-alive

teardown.json 文件内容如下:

{    "framework_id"   
 : {"value" : "test13"},  
  "type"           
 : "TEARDOWN"  }

Result 
注册framework的进程会自动退出。Framework 变成inactive

More information about mesos RESTful api ,please refer to 
http://mesos.apache.org/documentation/latest/scheduler-http-api/

 

   
2118 次浏览       35
 
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
 
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
 
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证
最新活动计划
嵌入式软件架构设计 12-11[北京]
LLM大模型与智能体开发实战 12-18[北京]
嵌入式软件测试 12-25[北京]
AI原生应用的微服务架构 1-9[北京]
AI大模型编写高质量代码 1-14[北京]
需求分析与管理 1-22[北京]

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件的思考
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS
更多...   
相关培训课程

云计算原理与应用
Windows Azure 云计算应用

摩托罗拉 云平台的构建与应用
通用公司GE Docker原理与实践
某研发中心 Openstack实践
知名电子公司 云平台架构与应用
某电力行业 基于云平台构建云服务
云计算与Windows Azure培训
北京 云计算原理与应用