Быстрое развертывание OpenStack при помощи DevStack

Используемые термины: OpenStack, Linux, CentOS, Ubuntu.
Для первичного знакомства с OpenStack можно использовать DevStack. В двух словах, это скрипт для быстрого развертывания частного облака.
В нашей инструкции мы рассмотрим установку OpenStack с помощью DevStack, а также пройдемся по минимальным настройкам облачной инфраструктуры и поднимем виртуальную машину. Наши команды будут рассчитаны как на Linux Deb (Debian, Ubuntu), так и RPM (Rocky, CentOS).
Системные требования
Прежде чем начать развертывание, обратите внимание на программно-аппаратные требования к DevStack.
1. Аппаратные
- Оперативная память — от 4 Гб.
- Процессор — минимум, 2 ядра.
- Дисковое пространство — 10 Гб и более.
2. Программные
Операционная система Linux — как правило, две последние версии LTS Ubuntu, последняя/текущая версия Fedora, CentOS/RHEL/Rocky Linux 9 и OpenSUSE.
Если тестовый стенд находится на гипервизоре, то нам нужно включить поддержку вложенной виртуализации. Для каждой системы это свой набор действий. Например:
- Для proxmox у меня есть отдельная инструкция — Включение вложенной виртуализации в Proxmox.
- В VirtualBox переходим к настройкам виртуальной машины - Система - вкладка Процессор - ставим галочку Включить Nested VT-x/AMD-V. Если данная галочка будет недоступна для изменения, вводим команду:
vboxmanage modifyvm <имя> --nested-hw-virt on
Подробнее, как работать с VirtualBox читайте в инструкции Как установить и использовать Virtualbox. - В VMware ESX в настройке виртуальной машины на вкладке Virtual Hardware раскрываем CPU и ставим галочку Expose hardware assisted virtualization to the guest OS.
Для проверки, что наша платформа поддерживает технологию виртуализации можно ввести команду:
cat /proc/cpuinfo | egrep "(vmx|svm)"
Мы должны увидеть непустой вывод.
Предварительная настройка
Выполним несколько действий по преднастройке нашего сервера.
1. Время
Чтобы в интерфейсе правильно фиксировалось время наших действий, настроим синхронизацию времени.
Задаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время. Список всех зон можно посмотреть командой:
timedatectl list-timezones
Устанавливаем сервис для синхронизации времени и запускаем его.
а) если на системе Deb:
apt install chrony
systemctl enable chrony
б) если на системе RPM:
yum install chrony
systemctl enable chronyd --now
2. Брандмауэр
После старта сервисов, нам нужно, чтобы были открыты порты:
- 80 — веб интерфейс для управления.
- 6080 — консоль для подключения к инстансам (виртуальным машинам).
В зависимости от используемой утилиты для управления брандмауэром, наши действия будут отличаться.
На некоторых системах, особенно, deb, по умолчанию, брандмауэр разрешает все пакеты. В таком случае, настройка не потребуется. Однако, для продуктивной среды безопасней, чтобы сетевой фильтр блокировал лишние запросы.
а) для Iptables (как правило, для систем Deb):
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 6080 -j ACCEPT
Для сохранения правила используем iptables-persistent:
apt install iptables iptables-persistent
netfilter-persistent save
б) для firewalld (как правило, для систем RPM):
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-port=6080/tcp
firewall-cmd --reload
3. Python
Для корректной установки системы нужен python версии 3.7 и выше. Проверить текущую версию в нашей системе можно командой:
python3 --version
Если версия ниже необходимой, то устанавливаем более современную версию python.
а) если на системе Deb:
apt install python3.8
б) если на системе RPM:
yum install python3.8
Установка выполнена.
После настроим версию python по умолчанию:
update-alternatives --config python3
На экран будет выведен список разных версий python — выбираем в списке наш вариант (мы установили 3.8), например:
Selection Command
-----------------------------------------------
*+ 1 /usr/libexec/no-python
2 /usr/bin/python3
3 /usr/bin/python3.8
Enter to keep the current selection[+], or type selection number: 3
Еще раз проверяем версию:
python3 --version
4. Дополнительные пакеты
На самом деле, нам нужен всего один пакет — git. Он нам понадобиться для загрузки проекта.
а) если на системе Deb:
apt install git
б) если на системе RPM:
yum install git
Быстрый старт
Переходим к развертыванию нашего OpenStack.
Создадим пользователя, под которым будет работать наш сервис:
useradd -s /bin/bash -d /opt/stack -m stack
* в данном примере будет создан пользователь stack с домашней директорией /opt/stack.
Разрешаем вход в созданный домашний каталог для всех пользователей:
chmod +x /opt/stack
OpenStack будет работать от пользователя stack, которому нужны привилегии суперпользователя для запуска команд stack. Для этого добавим файл в sudoers:
vi /etc/sudoers.d/stack
stack ALL=(ALL) NOPASSWD: ALL
Теперь заходим под пользователем
sudo -u stack -i
Загружаем проект devstack:
$ git clone https://opendev.org/openstack/devstack
Переходим в скачанный каталог:
$ cd devstack
Создаем файл local.conf — в нем будут храниться нужные нам пароли, и его будет использовать установщик:
$ vi local.conf
[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
#HOST_IP=192.168.0.15
* в данном примере мы создадим переменную с паролем secret, который будет использоваться для сервиса, базы данных и брокера rabbit. Вам необходимо его заменить на свой. Обратите внимание на последнюю закомментированную строку с HOST_IP — если на нашем сервере несколько IP-адресов, нам нужно указать, какой будет использоваться для OpenStack.
Теперь можно запустить скрипт установки:
$ ./stack.sh
В зависимости от производительности сервера, на выполнение скрипта уйдет от 10 до 30 минут, в среднем. Ждем.
В процессе будет установлены следующие компоненты:
- Horizon – панель для просмотра состояния системы и, немного, для управления.
- Nova – управление вычислительными мощностями.
- Glance – управление образами виртуальных машин.
- Neutron – управление сетевой инфраструктурой.
- Keystone – контроль доступа.
- Cinder – блочное хранилище данных.
- Placement – стек REST API.
В конце мы должны увидеть что-то на подобие:
This is your host IP address: 192.168.0.15
This is your host IPv6 address: ::1
Horizon is now available at http://192.168.0.15/dashboard
Keystone is serving at http://192.168.0.15/identity/
...
Openstack развернут.
Создание виртуальной машины
Переходим в веб интерфейс по адресу http://<IP-адрес нашего сервера>/ — должна открыться страница аутентификации. Вводим логин admin и пароль, который указали в файле local.conf (в нашем примере, это secret).
Пройдем небольшой путь, чтобы создать первый инстанс.
Загрузка образа
Переходим по ссылке Образы. Мы должны увидеть единственный образ cirros. Обычно, его используют для простой демонстрации, что облако работает. Но для продуктивных развертываний, нам нужны собственные образы на основе предпочтительных операционных систем. Создание собственного образа выходит за рамки данной инструкции, но при желании, можно почитать об этом, например, на Русских блогах.
Мы же загрузим готовый образ с официального сайта. Например, для CentOS 7 в формате QCOW2.
После возвращаемся в панель управления, на страницу управления образами и кликаем по
В открывшемся окне задаем имя образа, выбираем скачанный нами образ, выбираем формат QCOW2:
И создаем образ. В списке должен появиться CentOS7.
Генерирование ключевой пары
Большинство облачных образов не позволяют выполнить первичный вход с использованием логина и пароля пользователя. Для этого используется SSH-ключ, состоящий из пары открытый/закрытый ключи. Нам нужно создать такую пару в Openstack. Для этого переходим в пункт меню Вычислительные ресурсы - Ключевые пары. Мы можем создать новую пару или, если у нас есть свой сертификат, импортировать открытый ключ:
Предположим, у нас нет своего ключа — кликаем по Создать ключевую пару. В открывшемся окне вводим название и выбираем тип:
Кликаем по Создать ключевую пару — открытый ключ будет сохранен в Openstack, а на наш компьютер будет загружен закрытый. Сохраняем его.
Создание инстанса
Теперь переходим в пункт меню Вычислительные ресурсы - Инстансы. Кликаем по кнопке Запустить инстанс:
В открывшемся окне необходимо заполнить несколько форм.
На первом шаге задаем имя будущего инстанса:
На шаге 2 для нас главное — выбрать образ, который мы загрузили на раннем этапе:
Из списка готовых типов инстансов выбираем подходящий. Каждый тип определяет технические характеристики виртуальной машины:
Выбираем сеть:
Укажем, какая ключевая пара будет прописана на сервере для возможности к нему подключиться по SSH:
Ждем создания виртуальной машины.