我的情景是什么?
我有例如两个外部卡,可以插拔电源,无需关闭电脑。这些卡是我想用mesos管理的资源。
目前,我使用attributes
来管理它们:属性nodeKey:card1_key
和nodeKey:card2_key
被注册为master以区分两种不同的卡。然后,如果使用card1,我直接标记所有cpu
,mem
用于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代理。 Mesos是一种虚拟化解决方案,可以将多个(资源)指向一个。
但我认为你的需求将得到外部工具的支持 - 马拉松,一种基于mesos的调度程序框架。
马拉松将保持每个集装箱的状态。在你的情况下,如果你拔掉card1没有任何其他操作,马拉松将知道(当然有一个内部差距)card1(mesos-agent1)上的容器已经死了。然后marathon将重新安排这些容器,这将从mesos(master)请求资源。 Mesos master为重新安排的容器提供资源,DONE!
看到?没有额外的操作,如果您愿意,可以拔掉任何卡片 - 没有任何运行容器或介质代理的影响。但是你必须通过在它们上面启动一个新的mesos代理来向mesos master注册新卡。
希望这可以帮助。