【问题标题】:How to handle dynamic resource in mesos without a lofs of agents?如何在没有大量代理的情况下处理 mesos 中的动态资源?
【发布时间】:2018-07-09 02:42:09
【问题描述】:

我的情况是什么?

我有例如两个外部卡,可以在不关闭电脑电源的情况下插拔。 而这些卡片正是我想用 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 master 注册一个 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 不会受到影响?

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

【问题讨论】:

    标签: mesos mesosphere


    【解决方案1】:

    简单的答案是否定的。

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

    但我认为外部工具会很好地支持您的需求 — marathon,它是基于 mesos 的调度程序框架之一。

    Marathon 会自行维护每个容器的状态。在您的情况下,如果您在没有任何其他操作的情况下拔下 card1,marathon 会知道(当然存在内部间隙)card1(mesos-agent1)上的容器已经死了。然后 marathon 将重新调度这些容器,这将向 mesos(master) 请求资源。 Mesos master 为重新调度的容器提供资源,DONE!

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

    希望这会有所帮助。

    【讨论】:

    • 谢谢,但这不是我需要的。 Marathon 的作用类似于linux系统的init.d,主要用于failover & scale的长时间服务。我们有比马拉松更复杂的路由逻辑而不是守护程序任务。所以我们有自己定制的 mesos 框架来调度我们的资源,它运行良好。我关心的是代理内存,所以我想知道是否为他们的 gpu 做了一些像 nvidia 这样的解决方案,比如mesos.apache.org/documentation/latest/gpu-support。那么,我们的卡也可以当做nvidia的gpu核心,同时我们可以动态增加/减少数量,而不需要重启唯一的agent。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2016-04-29
    • 2020-03-08
    • 1970-01-01
    • 2013-07-21
    • 2019-10-16
    相关资源
    最近更新 更多