понедельник, 17 июня 2013 г.

Опыт настройки облаков - записки на память

Специалисты по тестированию отлично знают, что часто бывают проекты, на которых большую часть времени мы тратим не на само тестирование, но, в основном на две вещи: настройка продукта, подготовка его к тестированию и воспроизведение трудновоспроизводимых багов (да, да, это далеко не всё, что съедает наше время, но это те элементы, которые бы хотелось минимизировать)
Участвуя в open source проекте OpenStack Murano, приходится многократно настраивать не только тестируемый продукт, но и облачную платформу OpenStack, на которой работает наш сервис. За несколько месяцев у меня в блокноте набрались заметки о том, как же учесть все эти маленькие хитрости, которые когда-то отнимали много времени на настройку. Часть из них, ту самую, которую может быть интересна не только мне, я решил опубликовать в дневнике.

Установка OpenStack с использованием проекта devstack (и некоторые хитрости)


Способов устанавливать облачную платформу OpenStack много, на практике, если вы разрабатываете проект, который должен стать частью OpenStack, лучше воспользоваться devstack. Конечно, это моё личное мнение, и вот некоторые особенности, которым обладает данный тип установки, возможно, вы так же найдёте их интересными:
1. Легко поставить и удалить (конфигурационный файл один, одна команда на установку и одна на удаление)
2. Есть весь нужный функционал, самая свежая версия кода, а так же возможность воспользоваться стабильными сборками (хотя у меня, честно, стабильные сборки работают хуже чем мастер ветка)
3. Нестабильно работает. После перезагрузки надо ставить заново. Иногда приходится "шаманить"
4. Всё что вам нужно: linux (Ubuntu 12.04/12.10, CentOS, Fedora and etc.) и подключение к Интернету

Вот пример моего конфигурационного файла (в папке devstack лежит файл localrc, в котором можно описывать все параметры)


~/devstack$ cat localrc
# тут IP адрес вашей машины в сети, х.х.х.х
HOST_IP= 172.18.124.101
# здесь имя интерфейса для выхода виртуалок в Интернет
FLAT_INTERFACE=eth0.261
# диапазон внешних адресов виртуалок во внешней сети
FLOATING_RANGE=172.18.124.192/26
ADMIN_PASSWORD=swordfish
MYSQL_PASSWORD=swordfish
RABBIT_PASSWORD=swordfish
SERVICE_PASSWORD=swordfish
SERVICE_TOKEN=stoken
# это если хотите поставить дополнительные компоненты, я ставлю всё для OpenStack Heat
ENABLED_SERVICES+=,heat,h-api,h-api-cfn,h-api-cw,h-eng

# Image's cache is in $TOP_DIR/files
# качаем нужные образы из Интернета (можно потом ещё добавить)
IMAGE_URLS+=",http://fedorapeople.org/groups/heat/prebuilt-jeos-images/F17-x86_64-cfntools.qcow2"

# /etc/nova/nova.conf
# дополнительные параметры для виртуальных машин
EXTRA_OPTS=(force_config_drive=true libvirt_images_type=qcow2 force_raw_images=false debug=False scheduler_default_filters=AllHostsFilter)

# Logging
SCREEN_LOGDIR=/opt/stack/log/
LOGFILE=$SCREEN_LOGDIR/stack.sh.log


Здесь большая часть параметров - не обязательные, комментариями описаны самые интересные и полезные.

Установка одной командой: ./stack.sh, удаление ./unstack.sh  - с такими скриптами вам уже ничего не страшно, кроме фейлов с непонятными сообщениями об ошибках ))))

Это linux, а значит, есть множество полезных хаков, которые делают жизнь приятнее.
И так, Небольшие Хитрости (всё делаем под sudo, т.к. это шаманские хитрости;) ):


Ускоряемся
Перемещение жестких дисков виртуальных машин в оперативную память(так называемая RAM Drive), чтобы не тормозили (все виртуальные машины должны быть выключены, оперативной памяти должно быть много):
mount_dir=/opt/stack/data/nova/instances
umount $mount_dir
mount -t tmpfs -o size=24G tmpfs $mount_dir
chmod 775 $mount_dir
chown stack:stack $mount_dir

Ускорение загрузки виртуальных машин очень существенно. Мы развёртываем Windows Server 2012 (с настройкой AD, например) за 6 минут (и это не Core Image).



Выходим посмотреть мир
Открытие Интернета для виртуальных машин (если используется стандартная внутренняя подсеть для виртуальных машин, иначе необходимо изменить адреса)
iptables -A POSTROUTING -t nat -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE

Добавляем правила для разрешения трафика к виртуальным машинам из внешнего мира (Security Groups):
nova secgroup-add-rule default tcp 1 65535 0.0.0.0/0
nova secgroup-add-rule default udp 1 65535 0.0.0.0/0
nova secgroup-add-rule default icmp 0 0 0.0.0.0/0
nova secgroup-add-rule default icmp 8 0 0.0.0.0/0



Работаем
Добавление пользователя и хоста для кролика RabbitMQ:

rabbitmqctl add_user user_name user_password
rabbitmqctl set_user_tags user_name administrator
rabbitmqctl add_vhost host_name
rabbitmqctl set_permissions -p host_name user_name ".*" ".*" ".*"



Работаем с удовольствием
Настройка веб интерфейса для кролика, всего две команды, которые делают работу с кроликом намного удобнее:
/usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin/rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart

После этого кролик будет доступен через веб интерфейс на порту 55672, стандартный логин/пароль guest / guest.