【问题标题】:Using Docker for HPC with Sun Grid Engine将 Docker 用于 HPC 和 Sun Grid Engine
【发布时间】:2015-07-21 02:28:24
【问题描述】:

我想知道是否可以使用 Docker 创建一个虚拟集群,以便我可以运行为使用 SGE 集群管理的 HPC 集群设计的脚本。这些是相当大/复杂的工作流程,所以它不仅仅是我可以重写的东西,比如 TORQUE/PBS。从理论上讲,我应该能够诱使 Docker 认为有多个节点,就像我的内部 HPC 集群一样。如果有人能帮我避免告诉我无法完成的痛苦,我将不胜感激。

警告:我不是集群管理员。我更像是最终用户。我在我的 Mac OSX 10.9.5 上运行

Client version: 1.7.0
Client API version: 1.19 Go version (client): go1.4.2 Git commit
(client): 0baf609 OS/Arch (client): darwin/amd64 Server version: 1.7.0
 Server API version: 1.19 Go version (server): go1.4.2 Git commit
 (server): 0baf609 OS/Arch (server): linux/amd64 bash-3.2$ boot2docker
 version Boot2Docker-cli version: v1.7.0 Git commit: 7d89508

我一直在使用图像的衍生物(Dockerfilehere)。我的步骤非常简单,按照website 上的说明进行操作:

  1. 创建图像
docker-machine create -d virtualbox local
  1. 将其设为活动图像
eval "$(docker-machine env local)"
  1. 获取群体图像
docker run --rm swarm create
  1. 创建群主
docker-machine create \
    -d virtualbox \
    --swarm \
    --swarm-master \
    --swarm-discovery token://$TOKEN \
    swarm-master
  1. 使用令牌创建集群节点​​
docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://$TOKEN \
swarm-agent-00
  1. 添加另一个节点
 docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://$TOKEN \
swarm-agent-01

现在是疯狂的部分。当我尝试使用以下命令获取图像时:eval "$(docker-machine env --swarm swarm-master)" 我得到了这个愚蠢的东西Cannot connect to the Docker daemon. Is 'docker -d' running on this host?。然后我尝试了eval $(docker-machine env swarm-master) 并且它有效,但我不能 100% 确定这是正确的做法:

NAME             ACTIVE   DRIVER       STATE     URL                         SWARM 
local                     virtualbox   Running   tcp://192.168.99.105:2376   
swarm-agent-00            virtualbox   Running   tcp://192.168.99.107:2376   swarm-master
swarm-agent-01            virtualbox   Running   tcp://192.168.99.108:2376   swarm-master
swarm-master     *        virtualbox   Running   tcp://192.168.99.106:2376   swarm-master (master)
  1. 此时,我使用这个 yaml 文件构建了我的多容器应用程序:
bior:
 image: stevenhart/bior_annotate
 command: login -f sgeadmin
 volumes:
  - .:/Data
 links: 
  - sge

sge:
 build: .
 ports:
  - "6444"
  - "6445"
  - "6446"

使用docker-compose up

  1. 然后最后打开新镜像

docker run -it --rm dockersge_sge login -f sgeadmin

但问题出在这里

当我运行 qhost 时,我得到以下信息:

    HOSTNAME                ARCH         NCPU NSOC NCOR NTHR  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
----------------------------------------------------------------------------------------------
global                  -               -    -    -    -     -       -       -       -       -
6bf6f6fda409            lx-amd64        1    1    1    1  0.01  996.2M   96.2M    1.1G     0.0

不应该认为有多个CPU,即我的swarm节点中的每一个?

【问题讨论】:

    标签: docker sungridengine


    【解决方案1】:

    我假设您在 docker 中运行 qhost。

    swarm 的问题在于,它不会将所有主机合并到一台 机器中(我曾经这么认为)。

    相反,例如,您有 5 台单核机器,然后 swarm 将选择一台具有尽可能少的 docker 的机器并在该机器上运行 docker。

    所以 swarm 是将 docker 分散到集群中的控制器,而不是将主机合并为一个。

    希望对您有所帮助!如果您还有其他问题,请询问:)

    更新

    我不确定它是否适合你,但如果你不使用 swarm,我会推荐 kubernetes。我在我的树莓派上使用它。它比 swarm 更酷更成熟,具有自动治疗等功能。

    我不知道,但肯定也有一种将 docker 与 hadoop 集成的方法...

    【讨论】:

    • 谢谢。鉴于我所看到的,这是有道理的。我只是 ping 了开发人员 google 组,看看是否仍然可以通过某种解决方法(甚至可能不是 swarm?)。
    • 关于扩展您对 kubernetes 的评论有什么建议吗?如何在 Docker 上安装 sge(并添加节点)以在 Kubernetes 上运行它们?
    • 不幸的是,我对 sge 不熟悉,但是当您在 docker 中设置了功能性的 sge 时,转换到 kubernetes 应该不难。实际上,kubernetes 只是处理容器的调度。你必须谷歌它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多