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

问题描述 投票:0回答:1

我的情景是什么?

我有例如两个外部卡,可以插拔电源,无需关闭电脑。这些卡是我想用mesos管理的资源。

目前,我使用attributes来管理它们:属性nodeKey:card1_keynodeKey:card2_key被注册为master以区分两种不同的卡。然后,如果使用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

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

a)使用了Card1,调度程序框架可以将其标记为已使用,然后下一个资源提供将没有card1只有card2提供?看起来像--resources='cpus:24;gpus:2;mem:24576;disk:409600;ports:[21000-24000,30000-34000]',如果一个任务使用4 cpus,下次主人将提供20 cpus,但这不能用--attributes完成。但是mesos似乎只是能够为程序员定制--attributes而不是--resources的界面?

b)如果我们需要拔掉card1或添加新的card3,我们可以更改mesos-agent的一些参数而无需重新启动代理,然后当前使用例如card2不会受到影响?

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

mesos mesosphere
1个回答
0
投票

简单回答是不。

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

但我认为你的需求将得到外部工具的支持 - 马拉松,一种基于mesos的调度程序框架。

马拉松将保持每个集装箱的状态。在你的情况下,如果你拔掉card1没有任何其他操作,马拉松将知道(当然有一个内部差距)card1(mesos-agent1)上的容器已经死了。然后marathon将重新安排这些容器,这将从mesos(master)请求资源。 Mesos master为重新安排的容器提供资源,DONE!

看到?没有额外的操作,如果您愿意,可以拔掉任何卡片 - 没有任何运行容器或介质代理的影响。但是你必须通过在它们上面启动一个新的mesos代理来向mesos master注册新卡。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.