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

В предыдущих своих записях я упоминал про такие продукты как 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 x64
CentOS 7
Windows Server 2012 R2 (необходимо согласиться с условиями лицензии)

Пара скриншотов





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

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


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

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

Комментарии (4)


  1. k3NGuru
    06.07.2015 07:05

    А секьюрно использовать NOPASSWD: для пользователя?


    1. onegreyonewhite Автор
      06.07.2015 07:58

      Это просто пример для того, чтобы показать возможности cloud-init. К тому же для тестовой платформы.
      В продакшене лучше конечно же такого не делать.


  1. icoz
    06.07.2015 20:36
    +1

    Жду следующую статью.


    1. onegreyonewhite Автор
      07.07.2015 02:41

      Следующая статья будет изрядно длинная и, по большому счёту, это будет больше похоже на перевод официальной документации с моими комментариями.
      Подумываю разбить её на несколько, но пока не уверен, что это будет правильно.