Описание узла развёртывания - TripleO

Основной пользователь, от имени которого выполняется управление всеми системами узла развёртывания - stack. Подключитесь к узлу развёртывания по SSH. Далее все команды и действия будут указываться с узла развёртывания от имени пользователя stack.

При успешной установке узла развёртывания на нём будут развёрнуты необходимые сервисы, включая сервисы OpenStack:

  • Ironic, IronicInspector - сервисы управления baremetal узлами

  • Neutron - сервис управления сетями

  • Mysql - сервис управления базой данных

  • RabbitMQ - сервис управления очередями сообщений

  • Redis - сервис управления кэшем

В том числе будут установлены дополнительные пакеты TripleO и overcloud CLI.

В домашней директории /home/stack находится файл stackrc:

[stack@undercloud ~]$ cat stackrc
# Clear any old environment that may conflict.
for key in $( set | awk -F= '/^OS_/ {print $1}' ); do unset "${key}" ; done
export OS_CLOUD=undercloud
# Add OS_CLOUDNAME to PS1
if [ -z "${CLOUDPROMPT_ENABLED:-}" ]; then
    export PS1=${PS1:-""}
    export PS1=\${OS_CLOUD:+"(\$OS_CLOUD)"}\ $PS1
    export CLOUDPROMPT_ENABLED=1
fi

Этот файл используется для обращения к OpenStack API узла развёртывания.

Среди созданных сетей openstack network list вы увидите сеть ctlplane.

Все сервисы OpenStack запущены в контейнерах. Для проверки этого выполните:

(undercloud) [stack@undercloud ~]$ sudo podman ps
CONTAINER ID  IMAGE                                                                                       COMMAND               CREATED     STATUS                 PORTS       NAMES
272e1d2dc1d4  undercloud.ctlplane:8787/acloud/openstack-redis:latest                      kolla_start           2 days ago  Up 2 days (healthy)                redis
e8e22f11f175  undercloud.ctlplane:8787/acloud/openstack-rabbitmq:latest                   kolla_start           2 days ago  Up 2 days (healthy)                rabbitmq
f6e33846a532  undercloud.ctlplane:8787/acloud/openstack-mariadb:latest                    kolla_start           2 days ago  Up 2 days (healthy)                mysql
738721e2af73  undercloud.ctlplane:8787/acloud/openstack-cron:latest                       kolla_start           2 days ago  Up 2 days (healthy)                logrotate_crond
<...>

Каждому рабочему контейнеру также соответствует сервис systemd, который перезапускает контейнер при падении. Выполните:

(undercloud) [stack@undercloud ~]$ sudo systemctl | grep tripleo_
tripleo_ironic_api.service                  loaded active running   ironic_api container
tripleo_ironic_conductor.service            loaded active running   ironic_conductor container
tripleo_ironic_inspector.service            loaded active running   ironic_inspector container
tripleo_ironic_inspector_dnsmasq.service    loaded active running   ironic_inspector_dnsmasq container
tripleo_ironic_neutron_agent.service        loaded active running   ironic_neutron_agent container
<...>

Поэтому для того, чтобы остановить какой-либо контейнер, используйте команду:

sudo systemctl stop tripleo_$service_name

Все изменяемые файлы и директории в сервисах как правило выносятся в хост систему из контейнера:

sudo podman inspect $container_name | jq .[0].Mounts

Поэтому при необходимости можно контейнеры удалять и пересоздавать, не боясь потерять данные. Для этого тоже можно использовать podman inspect, чтобы узнать команду, которой был создан контейнер:

sudo podman inspect $container_name | jq .[0].Config.CreateCommand

Обратите внимание, что все контейнеры (кроме одного) запускаются с командой kolla_start. Эта команда использует файлы конфигурации kolla_config для запуска процессов внутри контейнера. Например:

(undercloud) [stack@undercloud ~]$ sudo cat /var/lib/kolla/config_files/neutron_api.json
{
    "command": "/usr/bin/neutron-server --config-dir /usr/share/neutron/server --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini --config-dir /etc/neutron/conf.d/common --config-dir /etc/neutron/conf.d/neutron-server --log-file=/var/log/neutron/server.log",
    "config_files": [
        {
            "dest": "/",
            "merge": true,
            "preserve_properties": true,
            "source": "/var/lib/kolla/config_files/src/*"
        },
        {
            "dest": "/",
            "merge": true,
            "optional": true,
            "preserve_properties": true,
            "source": "/var/lib/kolla/config_files/src-tls/*"
        }
    ],
}

Рассмотрим подробнее:

  • command - команда, которая будет запущена в контейнере

  • config_files - список файлов, которые будут скопированы в контейнер из хост системы.

    • dest - путь внутри контейнера, куда будет скопирован файл

    • merge - если true, то файлы будут скопированы в директорию dest, если false - то весь каталог source будет скопирован в dest,

    • preserve_properties - если true, то будут сохранены права доступа к файлу и владелец

    • source - путь внутри контейнера, который будет скопирован в dest.

Отдельно хочу выделить путь /var/lib/kolla/config_files/src/*. Для контейнера neutron_api - это директория /var/lib/config-data/puppet-generated/neutron. Для других контейнеров это путь /var/lib/config-data/puppet-generated/$service_name. Это директория, в которой хранятся все файлы конфигурации необходимые для сервиса.

После запуска контейнера команда kolla_start копирует все вышеуказанные файлы в / системы контейнера и запускает команду, указанную в command.

При этом сами файлы в папке /var/lib/config-data/puppet-generated/ генерируются puppet манифестами также запускаемыми в контейнерах.

Посмотреть на эти контейнеры можно через:

sudo podman ps -a | grep container-puppet