Итак, совсем недавно вышла новая редакция Ubuntu Server 14.04 LTS, где основные вкусности: LXC, Juju и MAAS. Всем хочется пощупать новшества! Но это не так просто, как кажется на первый взгляд… в данной статье мы рассмотрим локальный запуск Juju в LXC контейнере.
Основная проблема в тестировании этих новых технологий состоит в том, что они нацелены, в первую очередь — на огромное множество серверов, на чистое железо (bare metal). Это кластеры на основе MAAS, там Juju чувствует себя в полную силу, творя чудеса через веб-интерфейс за секунды. У меня не было по рукой свободного железа для объединения в кластер и тестирования MAAS, а «финт ушами» с VirtualBox`овскими виртуалками тут не проходит (они не объединяются в кластер, слишком низкоуровневый интерфейс). Единственный вариант — установка Juju локально в контейнере LXC, что мы и сделаем в данной статье. То, что я сейчас пишу — практически чистое пионерство, в рунете нету пока абсолютно никакой документации про Juju. Есть инфа на офф. сайте на английском, но там почти дословно сказано — Juju для MAAS, локально можно — но возитесь с этим сами… Скажу прямо, я ожидал того, что запустить Juju будет значительно проще.
Вот официальные доки про Juju (local): https://juju.ubuntu.com/docs/config-local.html
И чтобы у вас было общее представление о контейнерах, рекомендую полистать букварь по LXC: http://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/виртуализация/lxc
Если кратко, главный тезис — LXC это не виртуалка (не в обычном понимании этого слова), а разница между виртуальной машиной и LXC такова:
«Поехали!» (с)
Добавляем ключ, обновляем систему и устанавливаем Juju и тулзы:
sudo apt-add-repository ppa:juju/stable sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove && sudo apt-get autoclean sudo apt-get install juju-core juju-local juju-quickstart links charm-tools
Отключаем фаерволл ufw и ребутимся. Увы, но так надо для LXC:
sudo ufw disable sudo reboot
Генерируем конфиг Juju:
juju generate-config
Далее, я закидываю через sftp свой готовый конфиг environments.yaml в папку /home/darkfess/.juju
Все, теперь можно его деплоить:
juju bootstrap
Правильный вывод таков:
uploading tools for series [trusty precise] Logging to /home/darkfess/.juju/local/cloud-init-output.log on remote host Starting MongoDB server (juju-db-darkfess-local) Bootstrapping Juju machine agent Starting Juju machine agent (juju-agent-darkfess-local)
Проверяем статус:
watch juju status
Должно быть:
environment: local
machines:
"0":
agent-state: started
agent-version: 1.18.4.1
dns-name: localhost
instance-id: localhost
series: trusty
services: {}
Далее, нужно создать вручную данные директории… без них LXC не запустится (думаю это какой-то баг, но без этих манипуляций у Juju не получается стартануть LXC):
sudo mkdir /var/log/juju sudo mkdir /usr/lib/x86_64-linux-gnu/lxc/var sudo mkdir /usr/lib/x86_64-linux-gnu/lxc/var/log/ sudo mkdir /usr/lib/x86_64-linux-gnu/lxc/var/log/juju
Деплоим сервис juju-gui (это наш веб-интерфейс) в LXC на машине#0 (контейнер с именем juju-machine-0-lxc-0 создастся автоматически, а машина #0 — это мы, локально же). После проверяем статус, информация обновляется автоматически:
sudo juju deploy juju-gui --to lxc:0
Правильный ответ: Added charm ‘cs:trusty/juju-gui-3’ to the environment.
Проверяем статус:
watch juju status
Нужно ждать (минут 15 при первом контейнере), пока не будет вывод приблизительно такой:
environment: local machines: "0": agent-state: started agent-version: 1.18.4.1 dns-name: localhost instance-id: localhost series: trusty containers: 0/lxc/0: agent-state: started agent-version: 1.18.4.1 dns-name: 10.0.3.73 instance-id: juju-machine-0-lxc-0 series: trusty hardware: arch=amd64 services: juju-gui: charm: cs:trusty/juju-gui-3 exposed: false units: juju-gui/0: agent-state: started agent-version: 1.18.4.1 machine: 0/lxc/0 open-ports: - 80/tcp - 443/tcp public-address: 10.0.3.73
Это значит, что все круто. Как видите, там есть IP и все остальное.
Осталось активировать сервис juju-gui и все проверить:
sudo juju expose juju-gui watch juju status
exposed: false сменится на exposed: true
Проверяем доступность веб-интерфейса Juju:
links http://10.0.3.73
Там будет что-то «loading to the juju gui, logout и тд». Это значит, что все ок. Все! Можно заходить локально.
Пароль в веб-интерфейс лежит тут (2 строка сверху):
nano /home/darkfess/.juju/environments/local.jenv
Открываем в браузере, локально: http://10.0.3.73
А теперь ложка дегтя! Веб-интерфейс доступен только локально (внутренний NAT), т.е. чтобы нормально его пощупать, вам нужно будет натянуть на сервер иксы (или сразу все это монтировать на декстопе). Теоретически, можно сделать веб-морду Juju доступной из вне, через хитроумные мосты и туннели. Но это уже тема для отдельной статьи. Так что наслаждайтесь пока локально!)
P.S.
Вот еще список полезных команд, которые могут пригодится для работы с LXC и Juju.
Удалить сервис и контейнер:
sudo juju destroy-service juju-gui sudo juju destroy-machine 0/lxc/0 sudo lxc-destroy -n juju-machine-0-lxc-0
Подключится к консоли контейнера:
sudo lxc-console -n juju-machine-0-lxc-0
Отобразить все LXC:
sudo lxc-ls
juju-machine-0-lxc-0
sudo lxc-ls --fancy
NAME STATE IPV4 IPV6 AUTOSTART
———————————————————————————-————————-
juju-machine-0-lxc-0 RUNNING 10.0.3.73 — YES
Есть у меня, конечно, еще наработки — но это я оставлю на следующий раз.) Тема LXC очень большая сама по себе, будем ее освещать потихоньку. Удачного изучения!
нормально, спасибо все доступно. прошу продолжения про хитроумные мосты)