DevStack как инструмент

Здравствуйте, уважаемые хабралюди!

В предыдущих своих записях я упоминал про такие продукты как OpenStack, DevStack и Chef.
В этой статье я начну с DevStack.

Что это?


Сейчас очень часто можно услышать/прочитать такие популярные слова как «облако» и «виртуализация». И на самом деле это очень удобно, когда у тебя где-то в углу «пыхтит» целая груда (stack, англ. — стек, груда, куча) «серверов» в лице 1–2 серверов.
Конечно сейчас рынок насыщен различными платформами виртуализации, но в 2010 году из недр Rackspace вышла OpenStack.
Тут коротко и подробно рассказывается, что такое OpenStack. DevStack же лишь набор скриптов, для быстрого развёртывания среды OpenStack.
Использование OpenStack порою изрядно облегчает жизнь как ИТ-специалисту в небольшой компании, так и в значительно более крупных. Это очень удобный инструмент, когда нужно развернуть несколько десятков виртуальных машин, при этом весь процесс создания описать в скриптах. Это, конечно, можно сделать и при помощи других продуктов, но OpenStack мне оказался ближе.

Задача.

Настроить среду для тестирования ПО, с возможностью размещать N виртуальных машин с различными ОС на минимальном количестве «реальных» устройств.

Инструменты.

  1. 1 системный блок с предустановленной ОС (Ubuntu, CentOS) c 4 и более ядер, 24 Гб ОЗУ и двумя 500Гб HDD. Этого вполне хватает на 19–25 виртуальных машин. Я буду приводить пример на Ubuntu 14.04.
  2. DevStack версии Kilo (можно и Juno)
  3. Хороший канал Интернет (много нужно будет загрузить)


IP адрес нашего стенда будет 192.168.0.250. Соответственно наша внешняя сеть будет 192.168.0.0/24.

Что должно получиться?
В итоге мы получим OpenStack среду с базовыми сервисами для разворачивания виртуальных машин с некоторой внутренней сетью и набором внешних адресов. Neutron не ставим просто потому что не нужен в такой конфигурации.

Ход процесса.

Подготовка

Начнём с малого:

apt-get update && apt-get upgrade -y

Далее нам понадобится пользователь, от которого вся эта «система» будет работать. Назовём его незатейливо stack

useradd -G sudo -m -U -s /bin/bash stack
passwd stack

Не забудьте убрать запрос пароля в /etc/sudoers:

...
stack    ALL=(ALL:ALL) NOPASSWD: ALL
...

Теперь подключаемся от пользователя stack и все дальнейшие действия будут производиться именно от этого пользователя.

Установка.

Устанавливаем git и клонируем нужный нам репозиторий:

sudo apt-get install git -y
git clone https://github.com/openstack-dev/devstack.git -b stable/kilo
cd devstack

Вообще, по большому счёту мы можем уже так запустить ./stack.sh и есть некоторая вероятность, что всё установится. Но чаще всего это не так. Поэтому создадим некоторый конфиг local.conf:

[[local|localrc]]
HOST_IP=192.168.0.250                        # IP контроллера
FLAT_INTERFACE=p2p1                          # Интерфейс выпускающий наружу
FIXED_RANGE=10.10.128.0/24                    # Внутренняя сеть (внутривиртуальная)
FIXED_NETWORK_SIZE=254                      # Размер внутренней сети
FLOATING_RANGE=192.168.0.0/24                # Внешняя сеть
LOGFILE=/var/log/openstack/stack.sh.log      # Куда складывать логи
LOGDAYS=3                                    # Количество дней логов
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=SuperPuperSekret
RABBIT_PASSWORD=SuperPuperSekret
SERVICE_PASSWORD=SuperPuperSekret
SERVICE_TOKEN=AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95G
REGION_NAME=OfficeMiniCloudOne                        # Название региона
LIBVIRT_TYPE=kvm                             # Использовать KVM
VOLUME_BACKING_FILE_SIZE=200G # Можно и больше. Сколько раздел диска позволяет, столько и выставляйте. Отвечает за общий размер виртуальных дисков для виртуальных машин

Директории /var/log/openstack/ по умолчанию нет, поэтому создаём её:

sudo mkdir /var/log/openstack
sudo chown stack:stack /var/log/openstack

LIBVIRT_TYPE=kvm означает, что мы будем использовать kvm, но поддержку предварительно нужно включить:

sudo rmmod kvm-intel
sudo sh -c "echo 'options kvm-intel nested=y' >> /etc/modprobe.d/dist.conf"
sudo modprobe kvm-intel
cat /sys/module/kvm_intel/parameters/nested
modinfo kvm_intel | grep nested


Что-то может пойти не так. Например, если на наше оборудование так не умеет! Впрочем почти все современные системы обладают необходимым «скилом».

По какой-то неведомой причине, у меня не подхватывался параметр GIT_BASE из конфига, поэтому рекомендую (но не обязательно) изменить его в stackrc:

GIT_BASE=${GIT_BASE:-https://www.github.com}

Собственно теперь делаем

./stack.sh


и идём пить кофе/чай/лимонад. В зависимости от канала Интернет и мощности системного блока, процесс установки будет длиться примерно полчаса-час. Скрипты сами установят RabbitMQ, MySQL, пакеты nova, cinder и т.д.

Как итог мы увидим радостное сообщение:

Horizon is now available at http://192.168.0.250/
Keystone is serving at http://192.168.0.250:5000/v2.0/
Examples on using novaclient command line is in exercise.sh
The default users are: admin and demo
The password: admin
This is your host ip: 192.168.0.250

Собственно можно заходить в 192.168.0.250 и строить свои виртуальные ЦОДы.

Что ещё?
Рано или поздно нам этот системный блок придётся выключить/перезагрузить или просто свет вырубят надолго.
Чтобы cinder смог нормально подняться, следует найти к какому loop-устройству примонтирован наш файл и добавить это действие в автозагрузку:

 sudo losetup -a
losetup /dev/loop0 /opt/stack/data/stack-volumes-lvmdriver-1-backing-file


В моём случае это было так. Последнюю строчку следует добавить в /etc/rc.local перед »exit 0».

Всё! Теперь можно спокойно перезагружаться и по возвращению от пользователя stack запускать:

cd /home/stack/devstack
./rejoin-stack.sh


Выход из SCREEN`а осуществляется сочетанием клавиш Ctrl+A+DСсылки на образы для OpenStack
Ubuntu 14.04×64
CentOS 7
Windows Server 2012 R2 (необходимо согласиться с условиями лицензии)

Пара скриншотов
eafd04787dc54f3492eb4f39f23e55ca.jpg
8a1fe2bf60cf49f6bd41681abefb094c.jpg
1f67ffec9fda4ffc93a49c523dac66f9.jpg
b8123404cc01488c944344021771e9b4.jpg

На последних двух скринах мы создаём 10 инстансов, добавляем в них пользователя grey, устанавливаем пароль, устанавливаем hostname, устанавливаем пакеты htop и mc и делаем apt-get update && apt-get upgrade -y

Подробнее о синтаксисе cloud-init можно почитать здесь

В следующих статьях я расскажу как развернуть OpenStack в комплектации Keystone, Nova, Glance, Cinder, Neutron «руками» на 2х серверах, затем как подтянуть ко всему этому Chef (хотя под спойлером есть уже ссылка, которая может помочь)

Надеюсь этот материал поможет кому-то сэкономить время и нервы.

© Habrahabr.ru