如何在没有代理的情况下处理mesos中的动态资源?

时间:2018-07-09 02:42:10

标签: mesos mesosphere

我的情况是什么?

我有两个外部卡可以在不关闭计算机电源的情况下插入/拔出。 这些卡是我要通过mesos管理的资源。

当前,我使用attributes来管理它们:属性nodeKey:card1_keynodeKey:card2_key已注册以掌握以区分两个不同的卡。然后,如果使用card1,则直接标记所有cpumem用于mesos-agent1,那么master将不会向框架提供mesos-agent1

此外,如果需要拔下card1,我可以直接关闭mesos-agent1,而不会影响用于card2的mesos-agent2

以上是我的情况,除非我有很多卡,否则一切正常,我必须为每个卡设置很多mesos-agent。这会消耗一些内存。

当前解决方案命令:

卡1:

docker run -d --net=host --name=mesos-agent1 --privileged \
-e MESOS_IP=$PC_IP \
-e MESOS_HOSTNAME=$PC_IP \
-e MESOS_PORT=$node_port \
-e MESOS_MASTER=zk://$SERVER_IP:2181/mesos \
-e MESOS_ATTRIBUTES="nodeKey:card1_key" \
-e MESOS_SWITCH_USER=0 \
-e MESOS_CONTAINERIZERS=docker,mesos \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_WORK_DIR=/var/tmp/mesos \
-v "$(echo ~)/.dp/mesos-slave/log/mesos-$nodeKey:/var/log/mesos" \
-v "$(echo ~)/.dp/mesos-slave/tmp/mesos-$nodeKey:/var/tmp/mesos" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /cgroup:/cgroup \
-v /sys:/sys \
-v $(which docker):/usr/bin/docker \
mesosphere/mesos-slave:1.3.0

Card2:

docker run -d --net=host --name=mesos-agent2 --privileged \
-e MESOS_IP=$PC_IP \
-e MESOS_HOSTNAME=$PC_IP \
-e MESOS_PORT=$node_port \
-e MESOS_MASTER=zk://$SERVER_IP:2181/mesos \
-e MESOS_ATTRIBUTES="nodeKey:card2_key" \
-e MESOS_SWITCH_USER=0 \
-e MESOS_CONTAINERIZERS=docker,mesos \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_WORK_DIR=/var/tmp/mesos \
-v "$(echo ~)/.dp/mesos-slave/log/mesos-$nodeKey:/var/log/mesos" \
-v "$(echo ~)/.dp/mesos-slave/tmp/mesos-$nodeKey:/var/tmp/mesos" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /cgroup:/cgroup \
-v /sys:/sys \
-v $(which docker):/usr/bin/docker \
mesosphere/mesos-slave:1.3.0

我的问题:

因此,如果可能的话,我可以向mesos主服务器注册一个mesos代理,同时可以支持我的方案:

a)使用了Card1,调度程序框架可以将其标记为已使用,那么下一个资源提供将没有Card1,而只有Card2提供了?似乎类似--resources='cpus:24;gpus:2;mem:24576;disk:409600;ports:[21000-24000,30000-34000]',如果一项任务使用了4 cpus,则下一次master将只提供20 cpus,但是--attributes无法做到这一点。但是mesos似乎可以负担得起程序员定制--attributes而不是--resources的接口?

b)如果我们需要拔出card1或添加新的card3,则可以在不重新启动代理的情况下更改mesos-agent的某些参数,然后使用例如card2会不会受到影响?

任何可行的解决方案,还是我不得不忍受当前的解决方案?

1 个答案:

答案 0 :(得分:0)

简单的答案是“否”。

您不能只为多个资源启动一个mesos代理。 Mesos是一种虚拟化解决方案,可将多个(资源)指示为一个。

但是我认为您的需求将得到外部工具(马拉松,基于mesos的调度程序框架之一)的很好支持。

马拉松比赛将维持每个容器自己安排的状态。在您的情况下,如果您不做任何其他操作就拔下card1,则马拉松会知道(当然有一个内部缝隙)card1(mesos-agent1)上的容器已经死了。然后,马拉松将重新安排这些容器的时间,这将要求mesos(master)提供资源。 Mesos主服务器为重新安排的容器提供资源,完成!

看到了吗?无需执行任何其他操作,即可根据需要拔出所有卡,而不会影响正在运行的容器或mesos代理。但是您必须通过在新卡上启动新的mesos代理程序将新卡注册到mesos主卡上。

希望这会有所帮助。