我的设想是什么?
例如,我有两个外部卡,可以在不关闭pc电源的情况下进行插拔。这些卡是我想用mesos管理的资源。
目前,我使用 attributes
管理它们:属性 nodeKey:card1_key
以及 nodeKey:card2_key
都是注册高手来区分两张不同的牌。如果使用card1,我直接标记所有 cpu
, mem
用于 mesos-agent1
,那师父就不给了 mesos-agent1
到框架。
另外,如果我需要拔掉card1,我可以直接关机 mesos-agent1
不影响 mesos-agent2
用于card2。
上面是我的场景,每一张都很好,除非我有很多卡,我必须为每一张卡设置很多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代理到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
不会受到影响?
任何可能的解决方案,或者我必须忍受我目前的解决方案?
1条答案
按热度按时间ulmd4ohb1#
答案很简单:不。
不能只为多个资源启动一个mesos代理。mesos是一种虚拟化解决方案,它将多个(资源)表示为一个。
但我认为您的需求将得到外部工具marathon的很好支持,marathon是一种基于mesos的调度器框架。
marathon将保持每个容器的状态由其自己安排。在您的情况下,如果您在没有任何其他操作的情况下拔下card1,marathon就会知道(当然有内部间隙)card1(mesos-agent1)上的容器已经死了。然后marathon将重新调度这些容器,这将从mesos(master)请求资源。mesos master提供重新安排容器的资源,完成!
看到了吗?没有额外的操作,你可以拔掉任何卡,如果你想-没有任何影响运行容器或mesos代理。但是你必须注册新的卡到mesos主卡上,在它们上启动一个新的mesos代理。
希望这有帮助。