Ubuntu 14.04 и Juju (local) + LXC

JuJu man

Итак, совсем недавно вышла новая редакция 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 такова:

lxc-vm

«Поехали!» (с)

Добавляем ключ, обновляем систему и устанавливаем 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

scr1

scr2

А теперь ложка дегтя! Веб-интерфейс доступен только локально (внутренний 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 очень большая сама по себе, будем ее освещать потихоньку. Удачного изучения!

Ubuntu 14.04 и Juju (local) + LXC: Один комментарий

Добавить комментарий