[ English | English (United Kingdom) | Deutsch | русский ]
Быстрое начало: AIO¶
Все-в-одном (AIO) - это отличный способ выполнить установку OpenStack-Ansible для:
окружения для разработки
обзор того, как все службы OpenStack взаимодействую друг с другом
простое лабораторное развертывание
Хоть AIO и не рекомендуется для больших рабочих окружений, он отлично подходит для небольших установок для проверки концепта.
Минимальные системные требования (используются для регулярного тестирования):
8 vCPU
50 Гб свободного дискового пространства на root разделе
8 ГБ оперативной памяти
Рекомендуемые серверные ресурсы:
Процессор/материнская плата поддерживают аппаратную виртуализацию
8 ядер CPU
80 Гб свободного дискового пространства, или 60 Гб+ на чистом дополнительном диске. Использование дополнительного диска требует использования параметра
bootstrap_host_data_disk_device
. Пожалуйста, обратитесь к разделу Установка AIO для деталей.16 ГБ оперативной памяти
Имеется возможность выполнить развертывание AIO на виртуальном сервере для обзора и оценки, но ваши виртуальные сервера будут иметь низкую производительность, особенно, если вложенная виртуализация недоступна. Для рабочих окружений рекомендуется использовать несколько нод для отдельных ролей.
Установка AIO¶
Обзор¶
Имеется три необходимых шага для запуска установки AIO, с опциональным первым шагом, если вам нужно настроить развертывание:
Подготовка сервера
Начальная подготовка Ansible и требуемых ролей
Начальная подготовка конфигурации AIO
Запуск плейбуков
Подготовка сервера¶
Перед установкой AIO на новый сервер, рекомендуется обновить все системные пакеты и после этого выполнить перезагрузку в новое ядро:
Примечание
Выполните следующие команды от имени root пользователя.
## Ubuntu / Debian
# apt-get update
# apt-get dist-upgrade
# reboot
## CentOS / Rocky Linux
# dnf upgrade
# dnf install git-core
# systemctl stop firewalld
# systemctl mask firewalld
# reboot
Примечание
Перед перезагрузкой убедитесь, что в /etc/sysconfig/selinux
параметр SELINUX=enforcing
установлен в значение SELINUX=disabled
. SELinux на данный момент не поддерживается в OpenStack-Ansible для CentOS/Rocky/RHEL из-за нехватки ресурсов для сопровождения данной возможности.
Примечание
Если вы производите установку с ограниченным доступом к сети, пожалуйста посмотрите Установка с ограниченным подключением перед тем, как продолжить.
Начальная подготовка Ansible и требуемых ролей¶
Начните с клонирования репозитория OpenStack-Ansible и перехода в его корневую директорию:
# git clone https://opendev.org/openstack/openstack-ansible \
/opt/openstack-ansible
# cd /opt/openstack-ansible
Далее переключитесь на желаемую ветку/тег с которого будет произведена установка. Учтите, что развертывание с определенной ветки может привести к нестабильной сборке из-за изменений, которые находятся в процессе, а также изменений в OpenStack. Для теста (не для разработки), обычно, наилучшим выбором будет переход на последнюю тегированную версию.
# # List all existing tags. # git tag -l # # Checkout the stable branch and find just the latest tag # git checkout master # git describe --abbrev=0 --tags # # Checkout the latest tag from either method of retrieving the tag. # git checkout master
Примечание
Текущий релиз 2025.1 совместим только со следующими опреационными системами: Debian 12 (bookworm), Ubuntu 22.04 (Jammy Jellyfish), Ubuntu 24.04 (Noble Numbat), CentOS 9 Stream и производными CentOS Stream/RHEL, такими как Rocky Linux.
Следующий шаг это выполнение подготовки Ansible и Ansible ролей для среды разработки.
Выполните следующие команды для подготовки Ansible и требуемых ролей:
# scripts/bootstrap-ansible.sh
Примечание
Вы можете столкнуться с ошибками во время выполнения скрипта начальной подготовки Ansible, во время установки некоторых модулей Python (таких как pycrypto), например:
configure: error: cannot run C compiled programs.
Причина данной ошибки может быть следствием установленного флага noexec, использованного при монтировании файловой системы для /tmp, который вы можете проверить при помощи следующей команды:
# mount | grep $(df /tmp | tail -n +2 | awk '{print $1}') | grep noexec
В этом случае вы можете указать другой путь, для которого не указан данный флаг монтирования:
# TMPDIR=/var/tmp scripts/bootstrap-ansible.sh
Начальная подготовка конфигурации AIO¶
Для того, что бы все сервисы успешно запустились, сервер должен быть подготовлен с использованием соответствующей разметки дисков, настроек сети и настроек развертывания OpenStack.
По умолчанию скрипты подготовки AIO разворачивают базовый набор сервисов OpenStack с благоразумными настройками по умолчанию для автоматических тестов, разработки или проверки работы систем.
Просмотрите файл bootstrap-host role defaults - в нем содержатся различные настройки развертывания. Оператор имеет возможность настроить, каким образом сервер будет подготовлен. Это может быть полезно, когда вы хотите, что бы AIO использовал второй диск для данных, либо же использовать данную роль для подготовки развертывания окружения на несколько серверов.
Скрипт начальной подготовки настроен на передачу переменной окружения BOOTSTRAP_OPTS
как дополнительного параметра для процесса подготовки. Например, если вы хотите, задать второй диск (/dev/sdb
) для переразметки при подготовке, которая удалит все данные на данном устройстве, выполните:
# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"
Дополнительные параметры можно указать просто разделив их пробелом, например:
# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"
# export BOOTSTRAP_OPTS="${BOOTSTRAP_OPTS} bootstrap_host_data_disk_fs_type=xfs"
Если вы производите установку с ограниченным соединение или маршрут по умолчанию отсутствует, вам будет нужно задать интерфейс для исходящих соединений вручную
# export BOOTSTRAP_OPTS="bootstrap_host_public_interface=eth1"
Для стандартного сценария AIO, начальная подготовка выполняется при помощи команды:
# scripts/bootstrap-aio.sh
Чтобы добавить сервисы OpenStack в дополнение к сервисам настраивающимся AIO по умолчанию в рамках сценария, скопируйте файлы из директории conf.d
с расширением .aio
в /etc/openstack_deploy
и смените их расширение на .yml
. Например, для того, что бы подключить сервисы Telemetry OpenStack, выполните следующее:
# cd /opt/openstack-ansible/
# cp etc/openstack_deploy/conf.d/{aodh,gnocchi,ceilometer}.yml.aio /etc/openstack_deploy/conf.d/
# for f in $(ls -1 /etc/openstack_deploy/conf.d/*.aio); do mv -v ${f} ${f%.*}; done
Это также можно сделать (и изменить другие значения по умолчанию) во время начального выполнения скрипта, изменив переменную среды SCENARIO перед запуском скрипта. Ключевое слово „aio“ гарантирует, что будет развернут базовый набор служб OpenStack (cinder, glance, horizon, neutron, nova). Ключевые слова „lxc“ можно использовать для установки бекэнда с контейнерами, в то время как ключевое слово „metal“ развернет все службы без контейнеров. Чтобы реализовать любые другие службы, добавьте имя файла conf.d без расширения .yml.aio в переменную среды SCENARIO. Каждое ключевое слово должно быть разделено нижним подчеркиванием. Например, следующий код реализует AIO с barbican, cinder, glance, horizon, neutron и nova. Он установит хранилище cinder на ceph и будет использовать LXC контейнеры в качестве бекэнда.
# export SCENARIO='aio_lxc_barbican_ceph_ovs'
# scripts/bootstrap-aio.sh
Для того, что бы глобально переопределить значения по умолчанию для сценария, отредактируйте /etc/openstack_deploy/user_variables.yml
. Для понимания различных способов переопределения стандартного поведения, заданного в ролях, плейбуках и переменных групп, ознакомьтесь с Overriding default configuration.
Ознакомьтесь с Deployment Guide, где более подробно описаны способы применения собственной конфигурации, вместо использования начальной подготовки AIO.
Запуск плейбуков¶
Наконец, запустите плейбуки выполнив:
# openstack-ansible openstack.osa.setup_hosts
# openstack-ansible openstack.osa.setup_infrastructure
# openstack-ansible openstack.osa.setup_openstack
Процесс установки займет некоторое время, но продолжительность, примерно, следующая:
Физические серверы с SSD накопителем: ~30-50 минут
Виртуальные серверы с SSD диском: ~45-60 минут
Системы с традиционными жесткими дисками: ~90-120 минут
Как только выполнение плейбуков завершилось, вы можете экспериментировать с изменением различных настроек в /etc/openstack_deploy/user_variables.yml
и запускать только отдельные плейбуки. Например, для запуска плейбука для сервиса Keystone выполните:
# cd /opt/openstack-ansible/playbooks
# openstack-ansible os-keystone-install.yml
Взаимодействие с AIO¶
Как только AIO будет развернут, вы наверняка захотите взаимодействовать с ним. Вы всегда можете сделать это с помощью веб интерфейса или одного из доступных клиентов или библиотек, которые существуют для OpenStack.
Использование графического интерфейса¶
Веб-интерфейс Horizon предоставляет графический интерфейс для взаимодействия с развертыванием AIO. По умолчанию API Horizon доступен на порту 443 хоста (или порту 80, если конфигурация сертификата SSL отключена). Таким образом, для взаимодействия с Horizon просто перейдите на IP-адрес хоста.
Примечание
Если AIO был развернут в облачной виртуальной машине, вам может потребоваться настроить группы безопасности или правила брандмауэра, чтобы разрешить доступ к портам HTTP(S). Например, если AIO был развернут в виртуальной машине OpenStack, вы можете создать и применить подходящую группу безопасности для взаимодействия с Horizon следующим образом:
$ openstack security group create http \
--description 'Allow HTTP and HTTPS access'
$ openstack security group rule create http \
--protocol tcp --dst-port 80 --remote-ip 0.0.0.0/0
$ openstack security group rule create http \
--protocol tcp --dst-port 443 --remote-ip 0.0.0.0/0
$ openstack server add security group $SERVER http
Список портов служб можно найти в Руководстве по установке OpenStack.
Это представит страницу входа. По умолчанию OpenStack-Ansible создает пользователя с именем admin
. Паролем будет значение переменной keystone_auth_admin_password
. Если вы не настроили эту переменную, OpenStack-Ansible сгенерирует ее автоматически. Вы можете просмотреть настроенный пароль в файле /etc/openstack_deploy/user_secrets.yml
.
# grep admin_pass /etc/openstack_deploy/user_secrets.yml
heat_stack_domain_admin_password: <redacted>
keystone_auth_admin_password: <redacted>
radosgw_admin_password: <redacted>
Используя эту комбинацию имени пользователя и пароля, войдите в Horizon.
Использование клиента или библиотеки¶
Существует множество клиентов и библиотек, доступных для взаимодействия с развертыванием OpenStack, включая openstackclient, openstacksdk или gophercloud. Обычно они настраиваются с использованием переменных среды, полученных из файла openrc
или более нового файла clouds.yaml
.
OpenStack-Ansible предоставляет роль openstack_openrc
для создания таких конфигурационных файлов для различных утилит, таких как openstackclient. Если AIO развертывание использует lxc
сценарий (по умолчанию), они будут доступны в utility контейнере.
$ lxc-attach -n `lxc-ls -1 | grep utility`
# ls /root/openrc
/root/openrc
# ls /root/.config/openstack/clouds.yaml
/root/.config/openstack/clouds.yaml
# export OS_CLOUD=default
# openstack project list -c Name -f value
service
admin
В ином случае, если AIO было развернуто используя metal
сценарий, эти файлы будут доступны непосредственно на хосте.
# ls /root/openrc
/root/openrc
# ls /root/.config/openstack/clouds.yaml
/root/.config/openstack/clouds.yaml
Если вы хотите получить доступ к развертыванию AIO с другого хоста — возможно, с вашей локальной рабочей станции — вам понадобится файл openrc
или файл clouds.yaml
. Вы можете загрузить файл openrc
из Horizon: просто нажмите раскрывающийся список пользователя в правом верхнем углу и выберите OpenStack RC-файл
.
Важно
У вас может возникнуть желание скопировать файлы openrc
или clouds.yaml
, созданные ролью openstack_openrc
. Однако эти файлы по умолчанию используют internal
interface. Этот интерфейс использует сеть управления (172.29.236.0/22
), которая не маршрутизируется извне хоста. Если вы хотите использовать эти файлы, вам нужно будет изменить интерфейс на public
.
Примечание
Если AIO был развернут в облачной виртуальной машине, вам может потребоваться настроить группы безопасности или правила брандмауэра, чтобы разрешить доступ к различным портам служб. Например, если AIO был развернут в виртуальной машине OpenStack, вы можете создать и применить подходящую группу безопасности для взаимодействия основных служб следующим образом:
$ openstack security group create openstack-apis \
--description 'Allow access to various OpenStack services'
$ for port in 8774 8776 9292 9696 5000 8780; do
openstack security group rule create openstack-apis \
--protocol tcp --dst-port ${port}:${port} --remote-ip 0.0.0.0/0
done
$ openstack server add security group $SERVER openstack-apis
Список портов служб можно найти в Руководстве по установке OpenStack.
Примечание
Если вы включили настройку сертификата SSL (по умолчанию), все службы будут использовать самоподписанные сертификаты. Хотя хост сконфигурирован доверять этим сертификатам, для других хостов это не так. Это приведет к ошибкам HTTPS при попытке взаимодействия с облаком. Чтобы решить эту проблему, вам нужно будет вручную настроить сертификаты на других хостах или игнорировать проблемы SSL. Чтобы использовать самоподписанный сертификат, сначала скопируйте его на другие хосты. Имя и местоположение сгенерированного сертификата настраиваются переменными pki_authorities
и pki_trust_store_location
соответственно, которые используются ролью pki
, предоставляемой ansible-role-pki. На хосте Ubuntu 22.04 они будут по умолчанию ExampleCorpRoot
и /usr/local/share/ca-certificates
соответственно. Например:
$ scp aio:/usr/local/share/ca-certificates/ExampleCorpRoot.crt ~/.config/openstack/aio.crt
После этого настройте значение cacert
для вашего облака в clouds.yaml
. Например:
clouds:
aio:
# ...
cacert: /home/<username>/.config/openstack/aio.crt
В качестве альтернативы вы можете просто игнорировать проблемы SSL, установив verify: false
для вашего облака в clouds.yaml
. Это полностью отключит проверку SSL для этого облака. Например:
clouds:
aio:
# ...
verify: false
Наконец, вы также можете отключить конфигурацию сертификата SSL во время первоначального развертывания или использовать внешний центр сертификации для подписи, например Let’s Encrypt. Обе темы выходят за рамки этого документа.
Более подробную информацию о настройке SSL-сертификата можно найти в security guide.
После создания одного из этих файлов вы можете использовать его для взаимодействия с вашим развертыванием с использованием большинства стандартных клиентов и библиотек. Например, чтобы вывести список доступных проектов с помощью openstackclient:
$ export OS_CLOUD=aio
$ openstack project list -c Name -f value
service
admin
Перезагрузка AIO¶
Так как на AIO расположены все три участника кластера MariaDB/Galera, кластер должен быть повторно инициализирован после перезагрузки сервера.
Это можно сделать выполнив:
# cd /opt/openstack-ansible/playbooks
# openstack-ansible -e galera_ignore_cluster_state=true galera-install.yml
Если это не поможет вернуть кластер базы данных в рабочее состояние, воспользуйтесь разделом Galera Cluster Recovery в руководстве по эксплуатации.
Переустановка AIO¶
Иногда может быть полезным удаление всех контейнеров и переустановка AIO. Хоть и рекомендуется полное удаление AIO и переустановка с нуля, это не всегда практично. Потому, можно выполнить следующее, вместо полной переустановки:
# # Move to the playbooks directory.
# cd /opt/openstack-ansible/playbooks
# # Destroy all of the running containers.
# openstack-ansible lxc-containers-destroy.yml
# # On the host stop all of the services that run locally and not
# # within a container.
# for i in \
$(ls /etc/init \
| grep -e "nova\|swift\|neutron\|cinder" \
| awk -F'.' '{print $1}'); do \
service $i stop; \
done
# # Uninstall the core services that were installed.
# for i in $(pip freeze | grep -e "nova\|neutron\|keystone\|swift\|cinder"); do \
pip uninstall -y $i; done
# # Remove crusty directories.
# rm -rf /openstack /etc/{neutron,nova,swift,cinder} \
/var/log/{neutron,nova,swift,cinder}
# # Remove the pip configuration files on the host
# rm -rf /root/.pip
# # Remove the apt package manager proxy
# rm /etc/apt/apt.conf.d/00apt-cacher-proxy
Если необходимо переустановить окружение AIO, самый эффективный способ это переустановить операционную систему на сервере и начать с начала. По этой причине лучше всего запускать AIO в виртуальной машине или гостевом облаке.
Справочная схема по развертыванию AIO¶
Ниже представлена базовая диаграмма, которая примерно иллюстрирует, как выглядит установленный AIO.
Данная диаграмма не масштабируется и даже не точна на 100%, она была создана в ознакомительных целях и должна использоваться ТОЛЬКО для них.
------->[ ETH0 == Public Network ]
|
V [ * ] Socket Connections
[ HOST MACHINE ] [ <>v^ ] Network Connections
* ^ *
| | |-------------------------------------------------------
| | |
| |---------------->[ HAProxy ] |
| ^ |
| | |
| V |
| (BR-Interfaces)<------ |
| ^ * | |
*-[ LXC ]*--*----------------------|-----|------|----| |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | V * | |
| * | | [ Galera x3 ] |
| [ Memcached ]<------------| | | |
*-------*[ Rsyslog ]<--------------|--| | * |
| [ Repos Server x3 ]<------| ---|-->[ RabbitMQ x3 ] |
| [ Horizon x2 ]<-----------| | | |
| [ Nova api ec2 ]<---------|--| | |
| [ Nova api os ]<----------|->| | |
| [ Nova console ]<---------| | | |
| [ Nova Cert ]<------------|->| | |
| [ Cinder api ]<-----------|->| | |
| [ Glance api ]<-----------|->| | |
| [ Heat apis ]<------------|->| | [ Loop back devices ]*-*
| [ Heat engine ]<----------|->| | \ \ |
| ------>[ Nova api metadata ] | | | { LVM } { XFS x3 } |
| | [ Nova conductor ]<-------| | | * * |
| |----->[ Nova scheduler ]--------|->| | | | |
| | [ Keystone x3 ]<----------|->| | | | |
| | |--->[ Neutron agents ]*-------|--|---------------------------*
| | | [ Neutron server ]<-------|->| | | |
| | | |->[ Swift proxy ]<----------- | | | |
*-|-|-|-*[ Cinder volume ]*----------------------* | |
| | | | | | |
| | | ----------------------------------------- | |
| | ----------------------------------------- | | |
| | -------------------------| | | | |
| | | | | | |
| | V | | * |
---->[ Compute ]*[ Neutron OpenvSwitch ]<---| |->[ Swift storage ]-