Инструкция по развертыванию среды 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¶
- Описание стенда
Операционная система RedOS 8.0c Ceph 19.2.2 из репозитория RedOS
По-умолчанию cephadm использует podman на RedHat-совместимых системах. На нужно использовать docker для последующей установки Openstack с помощью kolla-ansible.
Развертывание Openstack производится с отдельного сервера, на котором развертывается kolla-ansible. Kolla-ansible в свою очередь использует ранее созданные образы контейнеров с помощью kolla-build из пакета kolla.
Развертывание Ceph производится на одном из серверов, которые будут использоваться как узлы хранения данных.
- Подготовка стенда.
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 запускается с нужными параметрами
- Описание установки
Устанавливаем 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
Создадим каталоги
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 Материалы, относящиеся к разворачиванию тестового облака в облаке¶
При настройке нод необходимо отключить безопасность порта
Приложение 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
Внимание! Для полной очистки облака необходимо удалить все виртуальные машины. В противном случае очистка оборвется и завершится с ошибкой. После следует на каждой ноде:
- удалить все контейнеры:
docker rm -f $(docker ps -aq)
удалить кеш docker-а и все созданные тома, с помощью команды:
docker system prune -af –volumes
# --volume – позволяет также удалить неиспользуемые тома (удалятся все тома: анонимные и именованные, тк все контейнеры были удалены)
- удалить конфигурацию на нодах:
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
- удалить 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)}')
- Проверить остались ли интерфейсы OVS. Если остались, то для их удаления следует перезагрузить ноды.
После выполнения данных команд можно выполнять bootstrap-servers, prechecks, deploy, post-deploy.