将 Docker 用于 HPC 和 Sun Grid Engine
Using Docker for HPC with Sun Grid Engine
我想知道是否可以使用 Docker 创建一个虚拟集群,这样我就可以 运行 使用 SGE 集群管理为 HPC 集群设计的脚本。这些都是漂亮的 large/complicated 工作流程,所以它不仅仅是我可以重写的东西,比如 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
我一直在使用图像的衍生物(Dockerfile
是here). My steps are pretty straightforward and follow the instructions on the website:
- 创建图像
docker-machine create -d virtualbox local
- 使其成为活动图像
eval "$(docker-machine env local)"
- 获取群图像
docker run --rm swarm create
- 创建 swarm master
docker-machine create \
-d virtualbox \
--swarm \
--swarm-master \
--swarm-discovery token://$TOKEN \
swarm-master
- 使用代币创建集群节点
docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://$TOKEN \
swarm-agent-00
- 再添加一个节点
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)
- 此时,我使用此 yaml 文件构建我的多容器应用程序:
bior:
image: stevenhart/bior_annotate
command: login -f sgeadmin
volumes:
- .:/Data
links:
- sge
sge:
build: .
ports:
- "6444"
- "6445"
- "6446"
使用docker-compose up
- 然后终于打开新镜像
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,即我的每个集群节点吗?
我假设您在 docker 中 运行ning qhost。
swarm 的问题在于,它不会将所有主机合并到一台 big 机器中(我曾经这么认为)。
相反,例如,您有 5 台单核机器,然后 swarm 将选择一台 docker 尽可能少的机器,并且 运行 该机器上的 docker .
所以 swarm 是在集群中传播 docker 的控制器,而不是将主机组合成一个。
希望对您有所帮助!如果您还有其他问题,请提出:)
更新
我不确定它是否适合你,但如果你不会用 swarm 得到它,我会推荐 kubernetes。我在我的树莓派上使用它。它非常酷,比 swarm 更成熟,具有自动修复等功能。
我不知道,但肯定有一种方法可以将 docker 与 hadoop 集成...
我想知道是否可以使用 Docker 创建一个虚拟集群,这样我就可以 运行 使用 SGE 集群管理为 HPC 集群设计的脚本。这些都是漂亮的 large/complicated 工作流程,所以它不仅仅是我可以重写的东西,比如 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
我一直在使用图像的衍生物(Dockerfile
是here). My steps are pretty straightforward and follow the instructions on the website:
- 创建图像
docker-machine create -d virtualbox local
- 使其成为活动图像
eval "$(docker-machine env local)"
- 获取群图像
docker run --rm swarm create
- 创建 swarm master
docker-machine create \ -d virtualbox \ --swarm \ --swarm-master \ --swarm-discovery token://$TOKEN \ swarm-master
- 使用代币创建集群节点
docker-machine create \ -d virtualbox \ --swarm \ --swarm-discovery token://$TOKEN \ swarm-agent-00
- 再添加一个节点
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)
- 此时,我使用此 yaml 文件构建我的多容器应用程序:
bior: image: stevenhart/bior_annotate command: login -f sgeadmin volumes: - .:/Data links: - sge sge: build: . ports: - "6444" - "6445" - "6446"
使用docker-compose up
- 然后终于打开新镜像
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,即我的每个集群节点吗?
我假设您在 docker 中 运行ning qhost。
swarm 的问题在于,它不会将所有主机合并到一台 big 机器中(我曾经这么认为)。
相反,例如,您有 5 台单核机器,然后 swarm 将选择一台 docker 尽可能少的机器,并且 运行 该机器上的 docker .
所以 swarm 是在集群中传播 docker 的控制器,而不是将主机组合成一个。
希望对您有所帮助!如果您还有其他问题,请提出:)
更新
我不确定它是否适合你,但如果你不会用 swarm 得到它,我会推荐 kubernetes。我在我的树莓派上使用它。它非常酷,比 swarm 更成熟,具有自动修复等功能。
我不知道,但肯定有一种方法可以将 docker 与 hadoop 集成...