Данный набор скриптов предназначен для автоматического поднятия стенда, максимально похожего на используемый для продуктового решения. Скрипты предназначены для поднятия стенда на KVM хосте. Минимальные требования: 20 ядер, 40Гб свободной памяти, 200Гб дискового пространства. Для сетевого решения используется схема DVR HA. Версия Стенд состоит из машин:
- один контроллер. Все сервисы контроллеров OpenStack: ntp, rabbitmq-server, percona-cluster, openstack-dashboard, glance, keystone, nova-cloud-controller, cinder, neutron-api + neutron-dynamic-routing-plugin, dynamic-routing-agent. Здесь же установлен bird, для эмуляции внешнего роутера.
- два гипервизора. Сервисы nova-compute, openvswitch.
- три нетворк ноды. Сервисы l3-agent компонента neutron, openvswitch, neutron-router-helper. Для cinder сервиса, в процессе установки, выделяется диск размером 25Gb.
На хосте должен быть устанвлен пакет для работы Juju (https://jujucharms.com/docs/stable/reference-install)
sudo add-apt-repository -yu ppa:juju/stable
sudo apt install juju
Хост должен быть подготовлен для выполения команд утилиты virsh, для того пользователя (USER в блоке ниже), под логином которого, будут выполняться скрипты:
sudo apt-get install -y git qemu-kvm iptables-persistent ufw virtinst uuid-runtime qemu libvirt-bin
sudo usermod -aG libvirtd USER
Хост может быть установлен с помощью любого дистрибутива Linux, где возможна работа KVM и Juju. (Для проверки был использован хост с Ubuntu 17.04) Для всех машин стенда используется образ ubuntu 16.04. Набор команд, который подготавливает нужный образ, расположен в файле juju/prepare-image.sh. Достаточно один раз выполнить эти команды и в дальнейшем, скрипты поднятия стенда будут всегда использовать этот образю Так же, на хосте, в директории $HOME/files пользователя, должны лежать архивы neutron-dynamic-routing.tgz и neutron-router-helper.tgz, внутри которых должны быть каталоги neutron-dynamic-routing и neutron-router-helper-master соответственно. Эти архивы будут использованы в процессе настройки стенда, для обеспечения совместимости с продуктовым решением. А также файлы s3.py (для cinder-backup), и forms.py (для openstack-dashboard) - они будут использованы для реализации функциональности S3 backup.
Подготовка виртуального окружения (машины, сеть, ...) достигается вызовом скрипта create_env.sh. Создает нужное количество машин/сетей для стенда. Не требует специальных параметров для запуска. В начале скрипта присутствуют параметры подготовленнго ранее образа: image_user, base_image. Если образ был подготовлен с помощтю указанного выше набора команд, то менять не требуется. Параметры вирутальных машин определены в начале файла juju/functions, при необходимости можно откорректировать настройки сети, найстройки машин по памяти, кол-ву ядер и т.п. Удаление всех объектов делается скриптом clean_env.sh
Делается вызовом скрипта juju/deploy_services.sh. Скрипт установит на соответствующий машины необходимые сервисы, настроит их и дождется их работоспособности.
Запуск скрипта juju/configure_openstack.sh приведет к созданию необходимого, для тестов, количества объектов. Будет загружен cirros imaage; созданы флейвор, проект, пользователь, внешняя сеть, две внутренние сети, роутер, объекты необходмые для bgp, настроена security group.
Скрипт juju/check_openstack.sh выполнит тестирование полученного облака. Данный скрипт запустит по две виртуальных машины в каждом из двух проектов и затем запустит тесты.
Тест 1: С одной из машин тестируется доступность других (ping). Тест по ssh зайдет на машину и выполнит пинг других машин.
Тест 2: С каждой машины тестируется доступность внешнего мира (ping to external router). Тест по ssh зайдет на машину и выполнит пинг роутера. Т.к. роутер имеет только адрес сети, которая никак не относится к сетям OpenStack, то это аналогично проверке доступности внешнего мира.
Тест 3: С одной из машин тестируется доступность внешнего мира, при выключении/включении мастер L3 агента. Тест определяет мастер агента, выключает его. Затем проверяет что пинг внешнего мира идет некоторое время, затем пропадает, затем снова появляется. После чего агент снова включается. Тест проводит пять таких тераций.
Запуск файла juju/save_logs.sh приведет к сбору логов со всех машин.