Использование Docker для HPC с Sun Grid Engine
Мне интересно, возможно ли создать виртуальный кластер с Docker, чтобы я мог запускать сценарии, которые были разработаны для кластеров HPC, используя управление кластером SGE. Это довольно большие / сложные рабочие процессы, поэтому я могу переписать их не просто, скажем, для TORQUE/PBS. Теоретически я должен быть в состоянии обмануть Докера, думая, что есть много узлов, точно так же как мой внутренний кластер 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
здесь). Мои шаги довольно просты и следуют инструкциям на сайте:
- Создать изображение
docker-machine create -d virtualbox local
- Сделайте это активным изображением
eval "$(docker-machine env local)"
- Получить рой изображение
docker run --rm swarm create
- Создать мастера роя
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
Разве он не должен думать, что есть несколько процессоров, то есть каждый из моих узлов роя?
1 ответ
Я предполагаю, что вы запускаете qhost в вашем докере.
Дело в рое в том, что он не объединяет все хосты в одну большую машину (раньше я так думал).
Вместо этого у вас есть, например, 5 одноядерных машин, затем Swarm выберет машину с как можно меньшим количеством докеров и запустит докер на этой машине.
Итак, рой - это контроллер, который распределяет докеры в кластере, а не объединяет хосты в один.
Надеюсь, поможет! Если у вас есть дополнительные вопросы, пожалуйста, задавайте:)
ОБНОВИТЬ
Я не уверен, подходит ли вам это, но если вы не получите его с роем, я бы порекомендовал kubernetes. Я использую это на моем Малиновом Писе. Он очень крутой и более зрелый, чем рой, с такими вещами, как автоисцеление и так далее.
Я не знаю, но наверняка есть способ интегрировать докер с Hadoop тоже...