Инструкция по развертыванию среды OpenStack c модулями TOS с помощью kolla-ansible на базе ОС Astra SE 1.8.4 Смоленск

ООО «ТИОНИКС ХОЛДИНГ» ОТДЕЛ ВНЕДРЕНИЯ

ВЛАДИМИР СКРЯБИН КОНСТАНТИН КАЛИНСКИЙ

Описание стенда

Для развертывания облачной инфраструктуры на базе OpenStack применяется такой подход как представление всех служб OpenStack в контейнерах. Для этого используются такие инструменты как Kolla и Kolla-Ansible. Задача Kolla — предоставлять готовые к использованию контейнеры и инструменты для развёртывания структуры в OpenStack. Задача Kolla-Ansible – разворачивание облака согласно установленным настройкам. Kolla-Ansible поставляется с готовыми настройками, но позволяет полностью их изменить в соответствии с конкретными требованиями.

В данном документе будет рассмотрен тестовый стенд, на котором размещены инструменты для разворачивания облака и ресурсы, на которые будет разворачиваться облако. Ниже представлена простейшая схема стенда.

Простейшая схема стенда

В центральной части размещается узел с инструментами kolla. Это узел, на котором содержатся также шаблоны сборки контейнеров, настройки установки, файлы inventory и т.д. С этого узла производится установка облака. «Репозиторий» – это локальный репозиторий, содержащий собранные deb-пакеты необходимые для организации узла kolla, сборки образов контейнеров, подготовки nodes (узлов, на которые будут размещаться контейнеры служб Openstack). «Хранилище образов Docker-контейнеров» - организованное с помощью DockerRegistry хранилище для образов контейнеров, которые будут создаваться с помощью kolla. «Kolla + Kolla-Ansible» - ВМ, на которой будут собираться образы контейнеров, с последующей отправкой их в «Хранилище образов Docker-контейнеров», а также будет производиться настройка установки и её запуск.

Размещение компонентов

Для «Репозитория» создана отдельная ВМ. «Repo». Можно репозитории разместить на ВМ «Kolla». ОС – Астра 1.8 Смоленск. Hostname Repo. ip 10.40.130.6

Настройка source.list для apt

nano /etc/apt/sources.list
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware

Установка и настройка вэб-сервера:

apt install apache2 -y
echo "AstraMode off" >> /etc/apache2/apache2.conf
systemctl restart apache2

Создан каталог для репозитория.

mkdir -p /var/www/html/localrepo

В эту папку размещаются папки репозитория.

Структура папок репозитория

Примерный размер /var/www/html/localrepo - 1,7Gb

Пример настройки ВМ «Dockerregistry»

«Хранилище образов контейнеров Docker» тоже организовано на отдельной ВМ. «Dockerregistry». Можно хранилище разместить на ВМ «Kolla». ОС – Астра 1.8 Смоленск. Hostname dockerregistry. ip 10.40.130.5

Настройка source.list для apt

nano /etc/apt/sources.list
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware

Установка пакета DockerRegistry

apt install docker-registry -y

В конфигурации отключена авторизация

nano /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/docker-registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  none: {}
#  htpasswd:
#    realm: basic-realm
#    path: /etc/docker/registry
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

После изменения конфигурации необходимо перезапустить сервис

systemctl restart docker-registry

Пример настройки ВМ «Kolla»

Узел с Kolla и Kolla-Ansible – это ВМ «kolla». ОС – Астра 1.8 Смоленск. Hostname kolla. ip 10.40.130.2

В hosts добавлена строка с ip ВМ «repo» и именем репозитория.

nano /etc/hosts
10.40.130.6  openstack.astralinux.loc

Настройка source.list для apt

nano /etc/apt/sources.list
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb [trusted=yes] http://openstack.astralinux.loc/localrepo/ 1.8_x86-64 main

Установка приоритета для репозитория openstack.astralinux.loc.

nano /etc/apt/preferences.d/openstack
Package: *
Pin: origin openstack.astralinux.loc
Pin-Priority: 1001

Установка пакетов:

apt update
apt install openstack2023.1-keyring -y
apt install kolla -y
apt install kolla-ansible -y
apt install ansible -y
apt install ansible-core -y
apt install ansible-collection-kolla -y
apt-get install docker.io=25.0.5.astra3+ci33
apt-mark hold docker.io

Настройка установленных пакетов:

mkdir -p /etc/kolla
nano /etc/kolla/kolla-build.conf
[Default]
namespace = "openstack.kolla"
tag = "2023.1-astra-1.8"

mkdir -p /etc/docker
nano /etc/docker/daemon.json
{
     "insecure-registries": ["10.40.130.5:5000"]
}
systemctl restart docker

Создание образов контейнеров.

На ВМ «kolla». Пакеты kolla, kolla-ansible и ansible-collection-kolla имеют версии для Openstack версии 2023.1 и адаптацию для сборки контейнеров не из исходников, а из готовых пакетов из отдельного репозитория для Astra Linux, и установки с учетом специфики Astra Linux. В настоящий момент из комплекта kolla для Astra Linux не собираются контейнеры с ПО:

«grafana»,
«influxdb», «opensearch», «solum-base», «fluentd», «telegraf», «venus-base», «venus-api», «venus-manager», «solum-api», «solum-conductor», «solum-worker», «solum-deployer», «opensearch-dashboards», «prometheus-alertmanager», «prometheus-blackbox-exporter», «prometheus-base», «prometheus-cadvisor», «prometheus-elasticsearch-exporter», «prometheus-haproxy-exporter», «prometheus-libvirt-exporter», «prometheus-memcached-exporter», «prometheus-msteams», «prometheus-mtail», «prometheus-mysqld-exporter», «prometheus-node-exporter», «prometheus-openstack-exporter», «prometheus-ovn-exporter», «prometheus-v2-server», «proxysql»

В связи с тем, что используемый репозиторий является частным, т.е. не имеющим доступа из интернета, то до начала сборки необходимо указать его месторасположение в локальной сети. Для этого необходимо изменить файл /usr/share/kolla/docker/base/sources.list.astra, содержащий список используемых при сборке репозиториев

nano /usr/share/kolla/docker/base/sources.list.astra
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb [trusted=yes] http://openstack.astralinux.loc/localrepo 1.8_x86-64 main

Все файлы для сборки контейнеров расположены в /usr/share/kolla/docker Список не подлежащих к сборке контейнеров описан в файле /usr/lib/python3/dist-packages/kolla/image/unbuildable.py

Конфигурационный файл /etc/kolla/kolla-build.conf задает тэг для имен контейнеров 2023.1-astra-1.8 и пространство имен в docker-registry openstack.kolla. Данные параметры понадобятся для установки облака из готовых образов контейнеров

nano /etc/kolla/kolla-build.conf
[DEFAULT]
namespace = "openstack.kolla"
tag = "2023.1-astra-1.8"

Для того чтобы контейнеры собирались с пакетами apache2 и openvswitch из локального репозитория (openstack.astralinux.loc) необходимо в конец файла /usr/share/kolla/docker/base/apt_preferences.astra добавить строки:

Package: apache2*
Pin: origin dl.astralinux.ru
Pin-Priority: -1

Package: openvswitch*
Pin: origin dl.astralinux.ru
Pin-Priority: -1

Создать каталог для логов kolla:

mkdir -p /var/log/kolla/

Запуск сборки образов контейнеров

kolla-build -b astra  --namespace openstack.kolla --tag 2023.1-astra-1.8 --registry 10.40.130.5:5000 --push 2>&1 | tee /var/log/kolla/kolla.log

Для сборки одного образа контейнера можно использовать команду с указанием имени образа

kolla-build -b astra  --namespace openstack.kolla --tag 2023.1-astra-1.8 --registry 10.40.130.5:5000 --push tos-dashboard 2>&1 | tee /var/log/kolla/kolla.log

Просмотреть образы контейнеров в хранилище можно так:

http://10.40.130.5:5000/v2/_catalog?n=1000

или так:

apt install curl jq -y
curl -k -s -X GET http://10.40.130.5:5000/v2/_catalog?n=1000 | jq '.repositories[]'| sort

Очистка docker-registry

systemctl stop docker-registry.service
rm -R /var/lib/docker-registry/docker/registry/v2
systemctl start docker-registry.service

Установка облака

Подготовка ноды

В качестве «реципиента» в схеме указана ВМ «node1». ip 10.40.130.21. ОС – Астра 1.8 Смоленск. Hostname node1. ip 10.40.130.21 на интерфейсе enp1s0. Этот интерфейс будет использоваться API служб Openstack Добавлен второй интерфейс enp7s0 для сетей виртуальных машин Openstack (для службы neutron). На этот интерфейс ip адрес не назначается. На стенде этот интерфейс подключен к сети 10.40.19.0/24.

Настройка ВМ «Node1»

nano /etc/resolv.conf
nameserver 10.40.116.1

nano /etc/hosts
10.40.130.6  openstack.astralinux.loc

nano /etc/apt/sources.list
deb [trusted=yes] http://openstack.astralinux.loc/localrepo/ 1.8_x86-64 main
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
deb https://dl.astralinux.ru/astra/frozen/1.8_x86-64/1.8.4/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware

mkdir -p /etc/apt/preferences.d
nano /etc/apt/preferences.d/preferences.pref
Package: *
Pin: origin openstack.astralinux.loc
Pin-Priority: 1001

nano /etc/apt/preferences.d/smolensk.pref
Package: *
Pin: release n=1.8_x86-64
Pin-Priority: 900

Подключение по SSH к узлу с ВМ «kolla» производится по ключу под пользователем «kolla». Для этого создан пользователь и назначены ему права:

useradd -m -U kolla
echo "kolla:12345678" | chpasswd
mkdir -pv /home/kolla/.ssh
nano /home/kolla/.ssh/config
Host *
  StrictHostKeyChecking no
pdpl-user -l 0:0 -i 63 kolla
touch /home/kolla/.ssh/authorized_keys
chmod 0700 /home/kolla/.ssh
chmod 0600 /home/kolla/.ssh/*
chmod 0644 /home/kolla/.ssh/authorized_keys
chown -R kolla:kolla /home/kolla/.ssh
echo "kolla ALL=(root) NOPASSWD: ALL" > /etc/sudoers.d/kolla

Установка пакетов:

apt update
apt install openstack2023.1-keyring -y
apt-get install python3-requests -y
apt install chrony -y
apt install python3-docker -y

mkdir -p /etc/docker
nano /etc/docker/daemon.json
{
    "bridge": "none",
    "insecure-registries": [
        "10.40.130.5:5000"
    ],
    "ip-forward": false,
    "iptables": false,
    "log-opts": {
        "max-file": "5",
        "max-size": "50m"
    }
}

На ВМ «kolla» сгенерированы ключи и передан публичный ключ на ВМ «node1»:

ssh-keygen -t rsa -b 4096 -C "kolla@node1.loc"
ввести имя файла ключа "kolla"
mv /root/kolla /etc/kolla/kolla
mv /root/kolla.pub /etc/kolla/kolla.pub
(ssh-keygen -f '/root/.ssh/known_hosts' -R '10.40.130.21')  предварительная команда для удаления предыдущего ключа, если таковой имеется.
ssh-copy-id -i /etc/kolla/kolla.pub kolla@10.40.130.21
Проверка подключения ssh -i /etc/kolla/kolla 10.40.130.21 -l kolla

Подготовка к разворачиванию.

ВМ «kolla». Необходимо скопировать шаблоны конфигураций в каталог настроек.

cp /usr/share/kolla-ansible/ansible/inventory/all-in-one /etc/kolla/
cp /usr/share/kolla-ansible/ansible/inventory/multinode /etc/kolla/
cp /usr/share/kolla-ansible/etc_examples/kolla/globals.yml /etc/kolla/
cp /usr/share/kolla-ansible/etc_examples/kolla/passwords.yml /etc/kolla/

Файлы inventory: all-in-One – inventory-файл для схемы, когда все службы Openstack размещены на одном узле. multinode – inventory-файл для схемы, когда службы Openstack распределены по нескольким серверам (нодам). Файл passwords.yml – содержит пароли после их генерации. Файл globals.yml – основные настройки процесса установки.

Добавление служб tos в конец inventory-файла. Представлен вариант «однонодной раскатки».

nano /etc/kolla/all-in-one
[tos-agent:children]
control

[tos-cloud-manager:children]
control

[tos-cloud-manager-api:children]
control

[tos-cloud-manager-worker:children]
control

[tos-cloud-manager-listener:children]
control

[tos-cloud-manager-agent:children]
control

[tos-cloud-manager-beat:children]
control

[tos-rs-web:children]
control

[tos-rs-server-api:children]
control

[tos-rs-worker:children]
control

[tos-rs-listener:children]
control

[tos-rs-broker-api:children]
control

[tos-rs-beat:children]
control

[tos-monitor-api:children]
control

[tos-monitor-listener:children]
control

[tos-scheduler-api:children]
control

[tos-scheduler-beat:children]
control

[tos-scheduler-worker:children]
control

[tos-otp-sender-api:children]
control

[tos-otp-sender-worker:children]
control

[tos-journal-api:children]
control

[tos-journal-listener:children]
control

[tos-dashboard:children]
control

Пример указания узла в файле all-in-one (однонодовая раскатка)

nano /etc/kolla/all-in-one
[control]
10.40.130.21    ansible_ssh_user=kolla ansible_become=True ansible_private_key_file=/etc/kolla/kolla
[network]
10.40.130.21    ansible_ssh_user=kolla ansible_become=True ansible_private_key_file=/etc/kolla/kolla
[compute]
10.40.130.21    ansible_ssh_user=kolla ansible_become=True ansible_private_key_file=/etc/kolla/kolla
[storage]
10.40.130.21    ansible_ssh_user=kolla ansible_become=True ansible_private_key_file=/etc/kolla/kolla
[monitoring]
10.40.130.21    ansible_ssh_user=kolla ansible_become=True ansible_private_key_file=/etc/kolla/kolla
[deployment]
10.40.130.21    ansible_ssh_user=kolla ansible_become=True ansible_private_key_file=/etc/kolla/kolla

Добавление определений паролей для служб tos:

nano /etc/kolla/passwords.yml
tos_amqp_password:
tos_openstack_user_password:
tos_database_password:

Генерация паролей:

kolla-genpwd -p /etc/kolla/passwords.yml

Создание директории для файла лицензии:

mkdir -p /etc/kolla/config/tos/ - сюда необходимо поместить файл лицензии.

Файл globals.yml. Сюда вносятся настройки Openstack:

# определяем тип дистрибутива
kolla_base_distro: "astra"
# определяем версию опенстека
# скорее всего переменная не имеет смысла, так как установка пакетов идет
# из соответствующего репозитория, но установить переменную стоит
openstack_release: "2023.1"
# тэг для образов контейнеров в docker-registry
openstack_tag: "2023.1-astra-1.8"
# адрес и порт docker-registry
docker_registry: 10.40.130.5:5000
# определение протокола работы с docker-registry
# yes - http, no - https
docker_registry_insecure: "yes"
# VIP для облака - устанавливается для reversy-proxy и иной балансировки служб
kolla_internal_vip_address: "10.40.130.24"
# сетевой интерфейс для API облака (Этот интерфейс в нашем случае имеет ip 10.40.130.21)
network_interface: "ens3"
# сетевой интерфейс для работы виртуальных машин (Этот интерфейс не имеет ip и подключен к сети 10.40.19.0/24)
neutron_external_interface: "ens6"
# определение типа программных сетевых бриджей
# для подключения виртуальных машин
neutron_plugin_agent: "openvswitch"
# использование tls при работе служб облака во внутренней сети
kolla_enable_tls_internal: "no"
# использование tls при работе во внешней сети
kolla_enable_tls_backend: "no"
# отладочный вывод в логах
openstack_logging_debug: "false"
# включение основного списка служб опенстека (nova, glance, neutron)
enable_openstack_core: "yes"
# отключить явно fluentd
enable_fluentd: "no"
# Для RS-Server обязательно должен быть включен Redis (включаем всегда)
enable_redis: "yes"
enable_nova_ssh: "yes"
glance, keystone, neutron, nova, heat, and horizon
и так далее.

Добавить переменные в файл глобальных настроек

nano /etc/kolla/globals.yml
#TOS
enable_tos: "yes"

rsserver_enable: "yes"
rsserver_image: "tos-rs-server"
rsserver_tag: "{{ openstack_tag }}"
rsserver_api_port: 9364
rsserver_listen_port: "{{ rsserver_api_port }}"
rsserver_broker_api_port: 9365

rs_web_enable: "yes"
rs_web_image: "tos-rs-web"
rs_web_tag: "{{ openstack_tag }}"
rs_web_port: 8888
rs_web_listen_port: "{{ rs_web_port }}"
rs_web_fqdn: rs.cloud.loc
rs_web_endpoint_override: "{{ kolla_internal_vip_address }}:{{ rsserver_broker_api_port }}"

cloud_manager_enable: "yes"
cloud_manager_image: "tos-cloud-manager"
cloud_manager_tag: "{{ openstack_tag }}"
cloud_manager_port: "9362"
cloud_manager_listen_port: "{{ cloud_manager_port }}"
cloud_manager_api_port: "{{ cloud_manager_port }}"

monitor_enable: "no"
monitor_image: "tos-monitor"
monitor_tag:  "{{ openstack_tag }}"
monitor_port: 9363
monitor_api_port: "{{ monitor_port }}"
monitor_listen_port: "{{ monitor_port }}"

scheduler_enable: "yes"
scheduler_image: "tos-scheduler"

scheduler_tag:  "{{ openstack_tag }}"
scheduler_port: 10001
scheduler_api_port: "{{ scheduler_port }}"
scheduler_listen_port: "{{ scheduler_port }}"

otp_sender_enable: "yes"
otp_sender_image: "tos-otp-sender"
otp_sender_tag: "{{ openstack_tag }}"
otp_sender_port: 9367
otp_sender_api_port: "{{ otp_sender_port }}"
otp_sender_listen_port: "{{ otp_sender_port }}"

agent_enable: "yes"
agent_image: "tos-agent"
agent_tag: "{{ openstack_tag }}"

journal_enable: "true"
journal_image: "tos-journal"
journal_tag: "{{ openstack_tag }}"
journal_port: 9360
journal_api_port: "{{ journal_port }}"
journal_listen_port: "{{ journal_port }}"

dashboard_enable: "yes"
dashboard_image: "tos-dashboard"
dashboard_tag: "{{ openstack_tag }}"
dashboard_secret_key: "4796d3a442b2d51e5e257c07355f023d6a062c0d5209836e8aeb51b93ebc8bae"
dashboard_port: 8080
dashboard_listen_port: "{{ dashboard_port }}"
dashboard_enable_tls_backend: False
dashboard_wsgi_processes: 2
dashboard_wsgi_threads: 1
horizon_external_fqdn: cloud.loc

sanlock_enable: "false"
keystone_internal_port: "5000"

Подготовка файла лицензии

Перед выполнением разворачивания облака файл лицензии размещается на ВМ «Kolla» в каталоге /etc/kolla/config/tos/

Команды подготовки и разворачивания

Процесс развертывания производится следующими командами:

kolla-ansible -vvvv -i /etc/kolla/all-in-one bootstrap-servers 2>&1 | tee /var/log/kolla-ansible.log
kolla-ansible -vvvv -i /etc/kolla/all-in-one prechecks 2>&1 | tee /var/log/kolla-ansible.log
kolla-ansible -vvvv -i /etc/kolla/all-in-one deploy 2>&1 | tee /var/log/kolla-ansible.log
kolla-ansible -vvvv -i /etc/kolla/all-in-one post-deploy 2>&1 | tee /var/log/kolla-ansible.log

bootstrap-servers – подготовка узлов к разворачиванию облака. Например, происходит установка необходимых пакетов. prechecks – проверка готовности узлов к установке deploy - установка post-deploy – заключительные настройки 2>&1 | tee /var/log/kolla-ansible.log – для удобства потоки выводятся в лог.

Приложение 1 Настройка бэкэнд синдер

Настройка бэкэнд cinder LVM

Основной параметр, определяющий использование cinder должен быть включен enable_cinder: «yes” Чтобы использовать бэкенд LVM в Cinder, на сервере должен существовать LVG с именем cinder-volumes и должен быть указан следующий параметр в globals.yml: enable_cinder_backend_lvm: «yes» 1. создать PV pvcreate /dev/sdX 1. создать VG vgcreate cinder-volumes /dev/sdX

Диски для ВМ в процессе эксплуатации будут размещаться по пути: /var/lib/docker/volumes/cinder/_data/volumes Этот вариант подразумевает использования одноимённого бэкэнда на всех узлах роли storage.

Настройка бэкэнд cinder LVM + type

Чтобы настроить volume type и настроить на каждой ноде свой тип на свой LVM, нужно: На каждой ноде создать свою VG 1. создать PV pvcreate /dev/vdb 2. создать VG vgcreate cinder-volumes-1(или 2 или 3) /dev/vdb на машине с kolla создать структуру каталогов: /etc/kolla /etc/kolla/config/cinder /etc/kolla/config/cinder/node1 (или 10.40.130.21) зависит от того, как узел записан в инвентори файле. /etc/kolla/config/cinder/node2 (или 10.40.130.22) /etc/kolla/config/cinder/node3 (или 10.40.130.23) создать конфиги:

nano /etc/kolla/config/cinder/node1/cinder.conf
[DEFAULT]
enabled_backends = lvm-1,lvm-2,lvm-3

[lvm-1]
volume_group = cinder-volumes-1
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvm-1
target_helper = tgtadm
target_protocol = iscsi

nano /etc/kolla/config/cinder/node2/cinder.conf
[DEFAULT]
enabled_backends = lvm-1,lvm-2,lvm-3

[lvm-2]
volume_group = cinder-volumes-2
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvm-2
target_helper = tgtadm
target_protocol = iscsi

nano /etc/kolla/config/cinder/node3/cinder.conf
[DEFAULT]
enabled_backends = lvm-1,lvm-2,lvm-3

[lvm-3]
volume_group = cinder-volumes-3
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvm-3
target_helper = tgtadm
target_protocol = iscsi

После установки облака создать типы бэкэнда и установить свойство volume_backend_name желаемого типа объёма так, чтобы оно соответствовало имени бэкэнда, определённому в конфигурации:

openstack volume type create lvm-node1
openstack volume type create lvm-node2
openstack volume type create lvm-node3
openstack volume type set --property volume_backend_name=lvm-1 lvm-node1
openstack volume type set --property volume_backend_name=lvm-2 lvm-node2
openstack volume type set --property volume_backend_name=lvm-3 lvm-node3

Настройка бэкэнд cinder NFS

Основной параметр, определяющий использование cinder должен быть включен enable_cinder: «yes” Чтобы использовать бэкенд NFS в Cinder, необходимо на сервере NFS в /etc/export указать параметр no_root_squash

nano /etc/exports
/path/to /cinder_storage *(rw,sync,no_root_squash,no_subtree_check)
systemctl restart nfs-kernel-server

На узле с kolla перед деплоем необходимо создать конфигурационный файл

mkdir -p /etc/kolla/config/
nano /etc/kolla/config/nfs_shares
ip_nfs_server:/path/to/cinder_storage

Указать параметры в globals.yml

nano /etc/kolla/globals.yml
enable_cinder: "yes"
enable_cinder_backup: "yes"
enable_cinder_backend_nfs: "yes"

Диски для ВМ в процессе эксплуатации будут размещаться по пути: /var/lib/docker/volumes/cinder/_data/mnt/cb563fe3c065dadb7b4d8744ec50e466

Cinder бэкэнд с внешним хранилищем iSCSI

Основной параметр, определяющий использование cinder должен быть включен enable_cinder: «yes” Чтобы использовать внешнюю систему хранения данных (например, от EMC или NetApp), необходимо указать следующий параметр в globals.yml: enable_cinder_backend_iscsi: «yes» Также enable_cinder_backend_lvm должно быть установлено на «no» в этом случае. Далее необходимо настроить драйвер синдера соответствующий устройству (СХД).

Приложение 2 Использование хранилища Ceph

Создание кластера Ceph с помощью cephadm

  1. Описание стенда

Операционная система RedOS 8.0c Ceph 19.2.2 из репозитория RedOS

По-умолчанию cephadm использует podman на RedHat-совместимых системах. На нужно использовать docker для последующей установки Openstack с помощью kolla-ansible.

Развертывание Openstack производится с отдельного сервера, на котором развертывается kolla-ansible. Kolla-ansible в свою очередь использует ранее созданные образы контейнеров с помощью kolla-build из пакета kolla.

Развертывание Ceph производится на одном из серверов, которые будут использоваться как узлы хранения данных.

  1. Подготовка стенда.

Ceph у нас будет устанавливаться на 3х узлах: node1.test.loc, node2.test.loc, node3.test.loc. В нашем случае будет использоваться упрощенная схема сети, в которой сеть internal Openstack совпадает с сетью хранилища Ceph.

Для корректной работы ПО, используемые доменные имена должны резовится в прямой и обратной зонах DNS.

Для корректной работы ceph и Openstack необходимо отключить selinux, синхронизировать системные часы. Также рекомендую провести установку и настройку docker средствами kolla-ansible, так как они возможно будут перезапускать docker для донастройки, что может вызвать нарушение работы установленного ceph.

Отключение selinux.

Измените строку SELINUX=disabled в файле /etc/selinux/config и перезапустите сервер.

Синхронизация системных часов

Установите chrony

# dnf install chrony -y

Добавьте свой сервер времени (если он у вас имеется в локальной сети) в файл /etc/chrony.conf и перезапустите службу.

# systemctl restart chrony

Запустите команду

# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp1.vniiftri.ru              1  10   377   700  -1998us[-2063us] +/-   28ms
^* ntp2.vniiftri.ru              1  10   377   138  -1621us[-1688us] +/-   28ms
^+ ntp3.vniiftri.ru              1  10   377   102   -744us[ -744us] +/-   27ms
^+ ntp4.vniiftri.ru              1  10   377   388   -513us[ -580us] +/-   27ms

Stratum (S): Количество «прыжков» (hops) до эталонных часов (атомные часы, GPS). Значение 1 — максимально точный источник, 16 — источник недоступен.

Установите kolla-ansible на сервере, с которого будут развертываться службы опенстека, и настройте параметры для registry в /etc/kolla/globals.yml

# dnf install kolla-ansible -y

Правим параметры файла /etc/kolla/globals.yml

kolla_base_distro: "redos"
openstack_release: "2023.1"
openstack_tag: "2023.1-redos-8.0c"
docker_registry: 10.40.12.220:5000
docker_registry_insecure: "yes"
docker_namespace: "openstack.kolla.redos"
# далее параметры, если вы используете zun в конфигурации
docker_configure_for_zun: "yes"
containerd_configure_for_zun: "yes"
containerd_grpc_gid: 42463

Прописываем сервера стенда в файл описания оборудования и установки служб /etc/kolla/multinode

Выполняем установку docker на серверах

# kolla-ansible -vvvv  \
     --configdir /etc/kolla \
     -i /etc/kolla/multinode \
     bootstrap-servers

Данная команда устанавливает пакеты на серверах стенда, включая docker-ce и настраивает файл /etc/docker/daemon.json. После чего docker запускается с нужными параметрами

  1. Описание установки

Устанавливаем cephadm на 1м узле ceph

# dnf install cephadm

Устанавливаем первый монитор, используя ip-адрес того сервера, с которого производится развертывание Ceph.

# cephadm --docker bootstrap --mon-ip 10.40.131.3 \
     --allow-fqdn-hostname --allow-overwrite

Разрешаем удаление пулов командами ceph (не обязательно)

# ceph config set global mon_allow_pool_delete true

Переносим ключи ssh для корректной работы cephadm с другими серверами

# ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2.test.loc
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3.test.loc
# ceph orch host add node2.test.loc
# ceph orch host add node3.test.loc

Расширяем количество мониторов до 3х.

#ceph orch apply mon --placement="3 node1.test.loc node2.test.loc node3.test.loc"

Просмотр доступных блочных устройств для развертывания OSD

# ceph orch device ls

Устройства могут оказаться недоступными, если содержат файловую систему, смонтированы в операционной системе или просто используются devmapper.

Возможные команды очистки:

# umount /dev/блочное_устройство
# dd if=/dev/zero of=блочное_устройство bs=1M count=1000
# dmsetup remove /dev/блочное_устройство (dm-0 например)

Пока блочное устройство не станет доступным, развертывание на нем OSD будет недоступно.

Создаем OSD Ceph

# ceph orch daemon add osd node1.test.loc:/dev/nvme0n1
# ceph orch daemon add osd node2.test.loc:/dev/nvme0n1
# ceph orch daemon add osd node3.test.loc:/dev/nvme0n1

Для All-Flash сценария нет смысла выносить WAL (Write-Ahead Log) или DB (RocksDB) на отдельное устройство - сам диск уже обеспечивает достаточную скорость и низкую задержку:

# ceph config set global ceph_volume_lvm_batch_no_dedicated_wal_db true

Включение RGW

# ceph mgr module enable rgw

По умолчанию используется порт 80, что может вызвать конфликт со службами Openstack. Поэтому меняем порт на 4080.

# ceph orch apply rgw rgw_name --port 4080

Развертывание RGW на 3х узлах

# ceph orch apply rgw rgw_name \
     --placement="3 node1.test.loc node2.test.loc node3.test.loc"

Включение CephFS

# ceph fs volume create cephfs --placement="3 node1.test.loc node2.test.loc node3.test.loc"

Интеграция Ceph и Openstack

Создание пулов

# ceph osd pool create volumes
# ceph osd pool create images
# ceph osd pool create backups
# ceph osd pool create vms
# ceph osd pool create manila_data
# ceph osd pool create manila_metadata
# ceph osd pool create gnocchi

# rbd pool init volumes
# rbd pool init images
# rbd pool init backups
# rbd pool init vms
# rbd pool init manila_data
# rbd pool init manila_metadata
# rbd pool init gnocchi

Создание “пользователей” Ceph

# ceph auth get-or-create client.glance \
  mon 'profile rbd' \
  osd 'profile rbd pool=images' \
  mgr 'profile rbd pool=images'

# ceph auth get-or-create client.cinder \
  mon 'profile rbd' \
  osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images' \
  mgr 'profile rbd pool=volumes, profile rbd pool=vms'

# ceph auth get-or-create client.cinder-backup \
  mon 'profile rbd' \
  osd 'profile rbd pool=backups' \
  mgr 'profile rbd pool=backups'

# ceph auth get-or-create client.gnocchi \
  mon 'allow r' \
  osd 'allow rwx pool=gnocchi'

# ceph auth get-or-create client.manila \
  mon 'allow r' \
  mds 'allow rw' \
  osd 'allow rw pool=manila_data, allow rw pool=manila_metadata' \
  mgr 'allow rw'

Создание ключей для доступа

# ceph auth get-or-create client.glance | \
     ssh node1.test.loc sudo tee /etc/ceph/ceph.client.glance.keyring

# ceph auth get-or-create client.cinder | \
     ssh node1.test.loc sudo tee /etc/ceph/ceph.client.cinder.keyring

# ceph auth get-or-create client.cinder-backup | \
     ssh node1.test.loc sudo tee /etc/ceph/ceph.client.cinder-backup.keyring

# ceph auth get-or-create client.manila | \
     ssh node1.test.loc sudo tee /etc/ceph/ceph.client.manila.keyring

# ceph auth get-or-create client.gnocchi | \
     ssh node1.test.loc sudo tee /etc/ceph/ceph.client.gnocchi.keyring

Установка Openstack

Проверка возможных конфликтов

# kolla-ansible prechecks  --configdir /etc/kolla -i /etc/kolla/multinode

Копирование ключей на сервер с kolla-ansible

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.conf \
     /etc/kolla/config/ceph.conf

Убираем табуляцию из ceph.conf

# sed -i "s/\t//" /etc/kolla/config/ceph.conf

Создаем симлинки на ceph.conf

# ln -s /etc/kolla/config/ceph.conf /etc/kolla/config/glance/ceph.conf
# ln -s /etc/kolla/config/ceph.conf /etc/kolla/config/cinder/ceph.conf
# ln -s /etc/kolla/config/ceph.conf /etc/kolla/config/gnocchi/ceph.conf
# ln -s /etc/kolla/config/ceph.conf /etc/kolla/config/manila/ceph.conf
# ln -s /etc/kolla/config/ceph.conf /etc/kolla/config/nova/ceph.conf

Копируем ключи “пользователей” ceph

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.cinder-backup.keyring \
     /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder-backup.keyring

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.cinder.keyring \
     /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder.keyring

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.cinder.keyring \
     /etc/kolla/config/cinder/cinder-volume/ceph.client.cinder.keyring

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.cinder.keyring \
     /etc/kolla/config/nova/ceph.client.cinder.keyring

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.manila.keyring \
     /etc/kolla/config/manila/ceph.client.manila.keyring

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.glance.keyring \
     /etc/kolla/config/glance/ceph.client.glance.keyring

# scp -i /etc/kolla/kolla \
     kolla@10.40.131.3:/etc/ceph/ceph.client.gnocchi.keyring \
     /etc/kolla/config/gnocchi/ceph.client.gnocchi.keyring

Запускаем развертывание контейнеров Openstack

# kolla-ansible deploy  --configdir /etc/kolla \
     -i /etc/kolla/multinode \
     -vvvv

Настройка cinder.conf на ВМ Kolla

Создание каталога настроек

mkdir /etc/kolla/config/cinder

Создание файла конфигурации

nano /etc/kolla/config/cinder/cinder.conf
[DEFAULT]
enabled_backends = ceph
glance_api_version = 2
backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1

Описание настроек:

[DEFAULT] - enabled_backends = ceph: Включает использование бекэнда Ceph в качестве основного устройства хранения. Название должно соответствовать названию раздела в файле конфигурации. - glance_api_version = 2: Версия API сервиса Glance (хранит образы виртуальных машин), используемого совместно с Cinder. - backup_driver = cinder.backup.drivers.ceph: Тип драйвера резервного копирования — в данном случае выбран драйвер для Ceph. - backup_ceph_conf = /etc/ceph/ceph.conf: Файл конфигурации Ceph, используемый для подключения к кластеру Ceph. - backup_ceph_user = cinder-backup: Пользователь Ceph, который будет использоваться для операций резервного копирования. - backup_ceph_chunk_size = 134217728: Размер блока (chunk size) для резервных копий в байтах. Значение 134217728 соответствует 128 мегабайт. - backup_ceph_pool = backups: Пул Ceph, предназначенный специально для хранения резервных копий. - backup_ceph_stripe_unit = 0, backup_ceph_stripe_count = 0: Эти параметры отключают сегментирование данных при создании новых блоков в Ceph. - restore_discard_excess_bytes = true: если включено, удаляются лишние байты при восстановлении данных обратно из резервной копии.

[ceph] - volume_driver = cinder.volume.drivers.rbd.RBDDriver: Драйвер устройства хранения — RBDDriver, поддерживающий работу с Ceph RBD (RADOS Block Device). - volume_backend_name = ceph: Назначение имени данному устройству хранения, соответствующее значению в разделе [DEFAULT]. - rbd_pool = volumes: Основной пул Ceph, где будут храниться объёмы данных. - rbd_ceph_conf = /etc/ceph/ceph.conf: Используется тот же файл конфигурации Ceph, что и для backup-драйвера. - rbd_flatten_volume_from_snapshot = false: Отключено создание плоского образа диска из снэпшота. Вместо этого сохраняется структура слоёв (snapshot-based copy-on-write). - rbd_max_clone_depth = 5: Максимальное количество уровней клонов для каждого тома. Предотвращает чрезмерное увеличение глубины иерархии клонов. - rbd_store_chunk_size = 4: Число полос (stripes) для операции записи (например, 4 полосы позволяют параллелизировать процесс записи на 4 уровня). - rados_connect_timeout = -1: устанавливается бесконечное ожидание соединения с Ceph (неограниченное время ожидания соединения).

Настройка ceph на ВМ Kolla

Настройка ceph в kolla заключается в размещении в соответствующих каталогах аутентификационных ключей клиентов, а также конфигурационного файла ceph.conf. Ниже представлено ДЕРЕВО КАТАЛОГОВ И ФАЙЛОВ /etc/kolla, включающее в себя каталог config, который содержит настройки ceph

Дерево каталогов и файлов /etc/kolla с настройками ceph

Создадим каталоги

mkdir /etc/kolla/config/cinder/cinder-backup
mkdir /etc/kolla/config/cinder/cinder-volume
mkdir /etc/kolla/config/glance
mkdir /etc/kolla/config/nova

Для переноса ключей с node1 на ВМ Kolla можно использовать команды:

ceph auth get-or-create client.glance | ssh <admin>@<ip ВМ Kolla> sudo tee /etc/kolla/config/glance/ceph.client.glance.keyring

В нашем случае это будет команда:

ceph auth get-or-create client.glance | ssh u@10.40.130.2 sudo tee /etc/kolla/config/glance/ceph.client.glance.keyring

Аналогичными командами скопируем ключи для Cinder и Nova:

ceph auth get-or-create client.cinder-backup | ssh u@10.40.130.2 sudo tee /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder-backup.keyring
ceph auth get-or-create client.cinder | ssh u@10.40.130.2 sudo tee /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder | ssh u@10.40.130.2 sudo tee /etc/kolla/config/cinder/cinder-volume/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder | ssh u@10.40.130.2 sudo tee /etc/kolla/config/nova/ceph.client.cinder.keyring

Также в каталоги /etc/kolla/config/{cinder, nova, glance}/ необходимо разместить файл глобальных настроек кластера ceph

cat /etc/ceph/ceph.conf | ssh u@10.40.130.2 sudo tee /etc/kolla/config/cinder/ceph.conf
cat /etc/ceph/ceph.conf | ssh u@10.40.130.2 sudo tee /etc/kolla/config/nova/ceph.conf
cat /etc/ceph/ceph.conf | ssh u@10.40.130.2 sudo tee /etc/kolla/config/glance/ceph.conf

Настройки ceph в globals.yml

cinder_backend_ceph: "yes"
cinder_backup_driver: "ceph"

# Glance
ceph_glance_keyring: "ceph.client.glance.keyring"
ceph_glance_user: "glance"
ceph_glance_pool_name: "images"
# Cinder
ceph_cinder_keyring: "ceph.client.cinder.keyring"
ceph_cinder_user: "cinder"
ceph_cinder_pool_name: "volumes"
ceph_cinder_backup_keyring: "ceph.client.cinder-backup.keyring"
ceph_cinder_backup_user: "cinder-backup"
ceph_cinder_backup_pool_name: "backups"
# Nova
ceph_nova_keyring: "{{ ceph_cinder_keyring }}"
ceph_nova_user: "{{ ceph_cinder_user }}"
ceph_nova_pool_name: "vms"

########################
# Glance - Image Options
########################
# Configure image backend.
glance_backend_ceph: "yes"

################################
# Cinder - Block Storage Options
################################
# Enable / disable Cinder backends
cinder_backend_ceph: "yes"

cinder_backup_driver: "ceph"

########################
# Nova - Compute Options
########################
nova_backend_ceph: "yes"

Приложение 3 Настройка блочного устройства ISCSI на примере glance

ВНИМАНИЕ! Команда bootstrap-servers удаляет open-iscsi, поэтому это нужно учесть и выполнить её до настройки подключения блочных устройств с помощью iscsi. Второе, на что стоит обратить внимание – при настройке backend cinder = lvm устанавливается контейнер iscsid, который выполняет ту же роль, что и open-iscsi, поэтому совместно в системе они существовать не могут. Ниже рассматривается пример, когда backend cinder = nfs и контейнеры iscsid tgtd не используются. Образы glance хранятся в папке /var/lib/docker/volumes/glance/_data/images Необходимо создать папку для glance

mkdir -p /var/lib/docker/volumes/glance/_data/images

После bootstrap и precheck выполнить:

  • установку open-iscsi
apt install open-iscsi -y
systemctl enable open-iscsi
  • выявить таргеты на СХД
iscsiadm -m discovery -t st -p ip_СХД
  • подключить блочное устройство выделенное для glance
iscsiadm -m node -l -T iqn.2009-02.test.accentos:glance
  • выполнить настройки автоматического подключения блочного устройства(диска)
#iscsiadm -m discovery -t sendtargets -p ip_СХД (данная команда представлена выше)
#iscsiadm -m node -T iqn.2009-02.test.accentos:glance -p ip_СХД –login (данная команда представлена выше)
iscsiadm -m node -T iqn.2009-02.test.accentos:glance -p ip_СХД --op update -n node.startup -v automatic
  • создание на диске раздела
fdisk /dev/sdX
  • установку ocfs2-tools
apt install ocfs2-tools -y
  • создание на разделе файловой системы ocfs2
mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2node -N 16 --global-heartbeat -T vmstore /dev/sdX1
  • создать кластер ocfs2 (Например, имя кластера будет «ocfs2node». Создание кластера выполняется только на одной ноде, а на остальные копируется конфигурация /etc/ocfs2/cluster.conf и запускается регистрация кластера)
dpkg-reconfigure ocfs2-tools (нужно ввести имя кластера, остальные параметры можно оставить по-умолчанию)
o2cb add-cluster ocfs2node
o2cb add-node --ip ip_node1 --port 7777 --number 1 ocfs2node node1
o2cb add-node --ip ip_node2 --port 7777 --number 2 ocfs2node node2
o2cb add-node --ip ip_node3 --port 7777 --number 3 ocfs2node node3
o2cb register-cluster ocfs2node
o2cb heartbeat-mode ocfs2node global
o2cb add-heartbeat ocfs2node <UUID filesystem disk>

ВНИМАНИЕ! Необходимо указать UUID файловой системы диска в верхнем регистре и без дефисов. Например, вместо: o2cb add-heartbeat ocfs2node 9b5eb3f5-e140-4e56-813c-3567d1fa8ba8 команда будет выглядеть так: o2cb add-heartbeat ocfs2node 9B5EB3F5E1404E56813C3567D1FA8BA8

o2cb start-heartbeat ocfs2node
o2cb cluster-status

На нодах 2 и 3: Копируем с ноды1 /etc/ocfs2/cluster.conf o2cb register-cluster ocfs2node o2cb start-heartbeat ocfs2node o2cb cluster-status

Далее необходимо настроить монтирование дисков в нужный момент. Пример для glance: на всех нодах с ролью Control выполнить:

nano /etc/fstab и добавить:
UUID=9b5eb3f5-e140-4e56-813c-3567d1fa8ba8 /var/lib/docker/volumes/glance/_data/images ocfs2 _netdev 0 0
mount -av
systemctl daemon-reload

mkdir -p /etc/systemd/system/o2cb.service.d
nano /etc/systemd/system/o2cb.service.d/override.conf
[Unit]
After=iscsid.service open-iscsi.service network-online.target
Wants=iscsid.service open-iscsi.service
Requires=open-iscsi.service
Description=O2CB cluster services (with iSCSI dependency)

systemctl daemon-reload

Проверка:

systemctl show o2cb.service --property=After --property=Wants --property=Requires
systemctl list-dependencies o2cb.service
reboot

После перезагрузки проверяем монтирование дисков в папки на всех нодах

Краткий пример вышеописанного с добавлением второго диска для новы:

mkdir -p /var/lib/docker/volumes/glance/_data/images
mkdir -p /var/lib/docker/volumes/nova_compute/_data/instances
apt install open-iscsi ocfs2-tools -y
systemctl enable open-iscsi
iscsiadm -m discovery -t st -p 10.40.22.99
iscsiadm -m node -T iqn.2026-04.loc.accentos:glance -p 10.40.22.99 --login
iscsiadm -m node -T iqn.2026-04.loc.accentos:glance -p 10.40.22.99 --op update -n node.startup -v automatic
iscsiadm -m node -T iqn.2026-04.loc.accentos:nova -p 10.40.22.99 --login
iscsiadm -m node -T iqn.2026-04.loc.accentos:nova -p 10.40.22.99 --op update -n node.startup -v automatic

#1# Выполнение только на первой ноде
fdisk /dev/sda
fdisk /dev/sdb
mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2node -N 16 --global-heartbeat -T vmstore /dev/sda1
mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=ocfs2node -N 16 --global-heartbeat -T vmstore /dev/sdb1
dpkg-reconfigure ocfs2-tools
o2cb add-cluster ocfs2node
o2cb add-node --ip 10.40.22.91 --port 7777 --number 1 ocfs2node node1
o2cb add-node --ip 10.40.22.92 --port 7777 --number 2 ocfs2node node2
o2cb add-node --ip 10.40.22.93 --port 7777 --number 3 ocfs2node node3
o2cb register-cluster ocfs2node
o2cb heartbeat-mode ocfs2node global
o2cb add-heartbeat ocfs2node 674DDAB785A1462286DC419ABB38EA4B
o2cb add-heartbeat ocfs2node A2A92DFABAA14A718C213106531F1F1E

#23# Выполнение на остальных нодах
scp astra@10.40.22.91:/etc/ocfs2/cluster.conf /etc/ocfs2/.
dpkg-reconfigure ocfs2-tools
o2cb register-cluster ocfs2node

o2cb start-heartbeat ocfs2node
o2cb cluster-status
echo '
UUID=a2a92dfa-baa1-4a71-8c21-3106531f1f1e /var/lib/docker/volumes/glance/_data/images ocfs2 _netdev 0 0' >> /etc/fstab
echo '
UUID=674ddab7-85a1-4622-86dc-419abb38ea4b /var/lib/docker/volumes/nova_compute/_data/instances ocfs2 _netdev 0 0' >> /etc/fstab
mount -av
systemctl daemon-reload
mount -av
mkdir -p /etc/systemd/system/o2cb.service.d
nano /etc/systemd/system/o2cb.service.d/override.conf

[Unit]
After=iscsid.service open-iscsi.service network-online.target
Wants=iscsid.service open-iscsi.service
Requires=open-iscsi.service
Description=O2CB cluster services (with iSCSI dependency)

systemctl daemon-reload
reboot

Приложение 4 Дополнительные настройки

  • Если у узлов, например, сетевые интерфейсы имеют разное именование, то можно это указать в отдельных файлах конфигураций. Это yaml файлы.
nano /etc/kolla/host_vars/node1
---
network_interface: enp1s0
neutron_external_interface: enp9s0

nano /etc/kolla/config/node2
---
network_interface: enp7s0
neutron_external_interface: enp9s0

nano /etc/kolla/config/node3
---
network_interface: enp7s0
neutron_external_interface: enp3s0

Либо эти параметры можно добавить в инвентори файл

[control]
10.40.130.21    network_interface=enp1s0 neutron_external_interface=enp9s0
10.40.130.22    network_interface=enp7s0 neutron_external_interface=enp9s0
10.40.130.23    network_interface=enp7s0 neutron_external_interface=enp9s0
  • Для настройки параметра tos-agent необходимо на ВМ с kolla в /etc/kolla/config/tos создать файл agent.conf с содержимым:
[Default]
agent_type = control
  • Столкнулись с таким моментом, когда после перезапуска rabbitmq он переставал работать с ошибкой, указывающей на параметр «durable». Durable очереди (устойчивые/постоянные) — это очереди, которые сохраняются после перезапуска брокера RabbitMQ. При настройке такой очереди параметр durable устанавливается в true. Чтобы избежать такой ошибки нужно в globals.yml добавить параметр om_rabbitmq_queue_durable: «false»
  • Настройка 4
  • Настройка 5

Приложение 5 Материалы, относящиеся к разворачиванию тестового облака в облаке

При настройке нод необходимо отключить безопасность порта

Отключение безопасности порта (1) Отключение безопасности порта (2)

Приложение 6 Очистка системы

Пересборка пакетов:

Для того, чтобы заново пересобрать пакеты необходимо на узле docker-registry выполнить команды:

systemctl stop docker-registry.service
rm -R /var/lib/docker-registry/docker/registry/v2
systemctl start docker-registry.service

Так же на узле kolla очистить кеш:

удалить все контейнеры:

docker rm --f $(docker ps -aq)
# -aq — Выводит только ID всех контейнеров, что позволяет избежать ошибок с использованием aws

удалить все образы:

docker image rm -f $(docker image ls -q)
# -q — Выводит только ID всех образов, что позволяет избежать ошибок с использованием aws (Если тэг будет содержать пробел – aws попытается выбрать вторую часть тэга, а не image id)

После данных действий можно пересобрать пакеты:

kolla-build -b astra --namespace openstack.kolla --tag 2023.1-astra-1.8 --registry 10.40.130.5:5000 --push 2>&1 | tee /var/log/kolla/kolla.log

Redeploy пересобранных пакетов:

Перед переустановкой облака происходит его очистка с помощью команды:

kolla-ansible -vvvv -i /etc/kolla/multinode destroy --yes-i-really-really-mean-it 2>&1 | tee /var/log/kolla-ansible.log

Внимание! Для полной очистки облака необходимо удалить все виртуальные машины. В противном случае очистка оборвется и завершится с ошибкой. После следует на каждой ноде:

  1. удалить все контейнеры:
docker rm -f $(docker ps -aq)

удалить кеш docker-а и все созданные тома, с помощью команды:

docker system prune -af –volumes
# --volume – позволяет также удалить неиспользуемые тома (удалятся все тома: анонимные и именованные, тк все контейнеры были удалены)
  1. удалить конфигурацию на нодах:
rm -rf /etc/kolla/*
rm -rf /var/log/kolla/*
rm -rf /etc/systemd/system/kolla*
rm -rf /etc/systemd/system/multi-user.target.wants/kolla*
rm -rf /var/run/openvswitch
rm -rf /var/run/libvirt
  1. удалить VIP адрес, если он остался на одной из нод, с помощью команды:
ip a d $(ip ad show $(ip route | grep default | awk '{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}') | grep /32 | awk -F ' ' {'print $2'}) dev $(ip route | grep default | awk '{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}')
  1. Проверить остались ли интерфейсы OVS. Если остались, то для их удаления следует перезагрузить ноды.

После выполнения данных команд можно выполнять bootstrap-servers, prechecks, deploy, post-deploy.