Использование Docker для высокопроизводительных вычислений с Sun Grid Engine

Мне интересно, можно ли создать виртуальный кластер с Docker, чтобы я мог запускать сценарии, разработанные для кластеров HPC, используя управление кластером SGE. Это довольно большие/сложные рабочие процессы, поэтому я не могу просто переписать их, скажем, для 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это здесь). Мои шаги довольно просты и следуйте инструкциям на веб-сайте:

  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 логин -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

Разве он не должен думать, что есть несколько процессоров, то есть каждый из моих узлов роя?


person Steven Hart    schedule 21.07.2015    source источник


Ответы (1)


Я предполагаю, что вы используете qhost внутри своего докера.

Суть swarm в том, что он не объединяет все хосты в одну большую машину (раньше я так думал).

Вместо этого у вас есть, например, 5 одноядерных машин, затем swarm выберет машину с как можно меньшим количеством докеров и запустит докер на этой машине.

Итак, рой — это контроллер, который распределяет докеры в кластере, а не объединяет хосты в один.

Надеюсь, поможет! Если есть дополнительные вопросы, задавайте :)

ОБНОВЛЕНИЕ

Я не уверен, подходит ли он вам, но если у вас не получится с swarm, я бы порекомендовал kubernetes. Я использую его на своем Raspberry Pi. Это очень круто и более зрело, чем рой, с такими вещами, как автоматическое исцеление и так далее.

Я не знаю, но наверняка есть способ интегрировать докер с хаупом...

person luxas    schedule 21.07.2015
comment
Спасибо. Это имеет смысл, учитывая то, что я вижу. Я только что пропинговал группу разработчиков Google, чтобы узнать, возможно ли это с помощью какого-то обходного пути (может быть, даже не роя?). - person Steven Hart; 21.07.2015
comment
Есть ли какие-нибудь советы по расширению вашего комментария по kubernetes? Как можно установить sge (и добавить узлы) на докер, чтобы запустить их в Kubernetes? - person Brett; 09.11.2015
comment
К сожалению, я не знаком с sge, но когда у вас есть функциональная настройка sge в докере, конвертировать в kubernetes не составит труда. По сути, kubernetes просто обрабатывает расписание контейнеров. Придется гуглить :) - person luxas; 09.11.2015