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

如何在没有代理lofs的情况下处理mesos中的动态资源?,mesos,mesosphere,Mesos,Mesosphere,我的情况是什么? 例如,我有两个外部卡,可以在不关闭电脑电源的情况下进行插拔。 这些卡片是我想用mesos管理的资源 目前,我使用attributes来管理它们:属性nodeKey:card1\u key和nodeKey:card2\u key注册到master以区分两张不同的卡。如果使用了card1,我直接标记所有cpu,mem用于mesos-agent1,那么master将不会向框架提供mesos-agent1 另外,如果我需要拔下card1,我可以直接关闭用于card2的mesos-age

我的情况是什么?

例如,我有两个外部卡,可以在不关闭电脑电源的情况下进行插拔。 这些卡片是我想用mesos管理的资源

目前,我使用
attributes
来管理它们:属性
nodeKey:card1\u key
nodeKey:card2\u key
注册到master以区分两张不同的卡。如果使用了card1,我直接标记所有
cpu
mem
用于
mesos-agent1
,那么master将不会向框架提供
mesos-agent1

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

以上是我的场景,每一张都很好,除非我有很多卡,我必须为每一张卡设置很多mesos代理。这将在一定程度上消耗内存

当前解决方案命令:

卡片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
卡片2:

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 master注册一个mesos代理,同时可以支持我的场景:

a) 使用了Card1,调度程序框架可以将其标记为已使用,那么下一个资源提供将没有Card1,只有card2提供?似乎有点像
--resources='CPU:24;gpu:2;成员:24576;磁盘:409600;端口:[21000-2400030000-34000]”
,如果一个任务使用了
4个CPU
,下次master将只提供
20个CPU
,但这不能通过
--属性来完成。但mesos似乎只能为程序员定制
--属性
,而不是
--资源

b) 如果我们需要拔下
card1
或添加新的
card3
,我们可以在不重新启动代理的情况下更改
mesos agent
的一些参数,那么当前使用的
card2
将不会受到影响


任何可能的解决方案,或者我不得不忍受我目前的解决方案

简单的答案是否定的

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

但我认为您的需求将得到外部工具marathon的良好支持,marathon是一种基于mesos的调度器框架

Marathon将保持每个容器的状态,并自行安排。在您的情况下,如果您在不进行任何其他操作的情况下拔下card1,则marathon会知道(当然存在内部间隙)card1(mesos-agent1)上的容器已经死亡。然后,marathon将重新安排这些容器,这将从mesos(master)请求资源。Mesos master为重新安排的容器提供资源,完成

看到了吗?没有额外的操作,您可以拔下任何卡,如果你想-没有任何影响运行容器或mesos代理。但你必须在mesos master上注册新卡,并在其上启动一个新的mesos代理


希望这有帮助。

Thks,但这不是我需要的。Marathon的作用类似于linux系统的init.d,主要用于故障切换和扩展的长时间服务。我们有比marathon更复杂的路由逻辑&而不是守护进程任务。因此,我们有自己定制的mesos框架来调度我们的资源,它运行良好。我关心的是代理内存,所以我想知道像nvidia这样的解决方案是否能为他们的gpu提供类似的功能。然后,我们的卡也可以作为nvidia的gpu核心,同时,我们可以动态增加/减少数量,而无需重新启动唯一的代理。