Экспорт данных#
На этом этапе происходит сбор исходных данных и формируется миграционный артефакт – единый архив с копиями баз данных, секретными ключами и пользовательскими конфигурациями, необходимыми для восстановления платформы в кластере Kubernetes.
Цель этапа:
собрать данные, необходимые для подключения к базам данных;
создать копии всех баз данных с помощью утилиты
pg_dump;собрать секретные ключи компонентов;
экспортировать пользовательские конфигурации;
упаковать все данные в единый переносимый артефакт.
Сбор информации о базах данных#
Перед созданием резервной копии и подготовкой секретов Kubernetes необходимо собрать полную информацию о всех базах данных, которые использует текущая платформа. Неполные или неточные данные могут привести к ошибкам при восстановлении в кластере Kubernetes.
Вам потребуются следующие данные:
список баз данных и пользователей с административными привилегиями;
параметры подключения.
Для удобства следует собрать эти данные в сводную таблицу для передачи ее на шаг подготовки секретов в Kubernetes.
Предварительные требования#
Сбор данных предъявляет следующие требования:
доступ по SSH к узлам (Automation Controller, Private Automation Hub, Platform Gateway, Event-Driven Automation, узел СУБД);
доступ к СУБД с привилегиями администратора;
на узле, где выполняете сбор информации, доступны утилиты
ssh,psql,grep,jq.
Сбор списка баз данных и ролей#
Получите необходимую информацию о базах данных и их пользователях:
Подключитесь к узлу, где развернута СУБД PostgreSQL, и выполните команду для получения списка баз:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \ "sudo -u postgres psql -p <pg_port> -c '\l'" | grep -E 'Name|awx|automation'
Получите список пользователей и их ролей в PostgreSQL:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \ "sudo -u postgres psql -p <pg_port> -c '\du'" | grep -v 'postgres'
Поиск паролей в конфигурационных файлах#
Найдите в конфигурационных файлах компонентов параметры database, host, port, user, password.
Выполняйте команды на соответствующих узлах:
Platform Gateway:
ssh -i <ssh_key> <ssh_user>@<gateway_ip> \ "sudo grep -iE 'database|password|host|port|user' /etc/astra-automation/gateway/settings.py 2>/dev/null | grep -v '^#'"
Automation Controller:
ssh -i <ssh_key> <ssh_user>@<controller_ip> \ "sudo grep -iE 'database|password|host|port|user' /etc/tower/conf.d/postgres.py 2>/dev/null || \ sudo grep -iE 'database|password|host|port|user' /etc/tower/settings.py 2>/dev/null"
Private Automation Hub:
ssh -i <ssh_key> <ssh_user>@<hub_ip> \ "sudo grep -i 'DATABASES' -A 20 /etc/pulp/settings.py 2>/dev/null"
Контроллер Event-Driven Automation:
ssh -i <ssh_key> <ssh_user>@<eda_ip> \ "sudo grep -iE 'database|password|host|port|user' /etc/astra-automation/eda/settings.yaml 2>/dev/null | grep -v '^#'"
Сводная таблица#
Сохраните собранные данные в одном файле, например:
database-info.txt#Component | DB Name | DB User | DB Password | DB Host | DB Port
-------------|--------------------------|------------------------|--------------|----------------|---------
Controller | awx | awx | <password> | <pg_host_ip> | 5432
Hub | automationhub | automationhub | <password> | <pg_host_ip> | 5432
Gateway | automationgateway | automationgateway | <password> | <pg_host_ip> | 5432
EDA | automationedacontroller | automationedacontroller| <password> | <pg_host_ip> | 5432
PostgreSQL | postgres | postgres | <password> | <pg_host_ip> | 5432
Подготовка структуры экспорта#
Выполните следующие операции на установочном узле исходной платформы:
Подключитесь к установочному узлу по SSH:
ssh -i <ssh_key> <ssh_user>@<node_ip>
Создайте структуру каталогов:
mkdir -p migration-export/{controller/custom_configs,hub,gateway,eda}
Перейдите в каталог
migration-export/:cd migration-export
Создайте файл для хранения секретов, в котором вы будете коллекционировать секреты из текущей платформы:
touch secrets.yml
В результате выполнения этой серии команд вы получаете следующую структуру:
migration-export/
├── controller
| └── custom_configs
├── eda
├── gateway
└── hub
└── secrets.yml
Остановка сервисов#
Для предотвращения изменения данных остановите сервисы всех компонентов.
Важно
Службы PostgreSQL и Redis останавливать нельзя. Они необходимы для создания копий.
На каждом узле выполните соответствующую команду:
Platform Gateway:
ssh -i <ssh_key> <ssh_user>@<gateway_ip> \ "sudo supervisorctl stop all"
Automation Controller:
ssh -i <ssh_key> <ssh_user>@<controller_ip> \ "sudo supervisorctl stop all"
Private Automation Hub:
ssh -i <ssh_key> <ssh_user>@<hub_ip> \ "sudo systemctl stop pulpcore-api pulpcore-content pulpcore-worker@1 pulpcore-worker@2"
Event-Driven Automation:
ssh -i <ssh_key> <ssh_user>@<eda_ip> \ "sudo systemctl stop automation-eda-controller.target"
Создание копий баз данных#
Необходимо создать и сохранить копии баз данных платформы для последующего восстановления данных в новой среде.
Проверка размера баз данных#
Перед созданием копий убедитесь, что на файловой системе достаточно свободного места:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \
"sudo -u postgres psql -p <pg_port> -c '\l+'"
Создание копий баз данных#
Используя подключение по SSH к серверу PostgreSQL, создайте копии баз данных и сохраните их на локальном узле в подготовленной структуре каталогов.
Platform Gateway:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \ "sudo -u postgres pg_dump -F c automationgateway" > gateway/gateway.pgc
Automation Controller:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \ "sudo -u postgres pg_dump -F c awx" > controller/controller.pgc
Private Automation Hub:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \ "sudo -u postgres pg_dump -F c automationhub" > hub/hub.pgc
Event-Driven Automation:
ssh -i <ssh_key> <ssh_user>@<pg_host_ip> \ "sudo -u postgres pg_dump -F c automationedacontroller" > eda/eda.pgc
Проверка копий#
Проверьте готовность созданных копий:
Убедитесь, что копии созданы и имеют ненулевой размер:
ls -lh */*.pgc
Проверьте тип файлов:
file */*.pgc
Ожидаемый результат для каждого файла:
Сбор секретных ключей#
Секретные ключи необходимы для шифрации и дешифрации данных.
Без них невозможно будет запустить сервисы после восстановления баз данных.
Выведите значения секретных ключей и соберите их в файле secrets.yml, созданном ранее:
Platform Gateway:
ssh -i <ssh_key> <ssh_user>@<gateway_ip> \ "sudo cat /etc/astra-automation/gateway/SECRET_KEY"
Добавьте полученное значения в поле
gateway_secret_keyв файлеsecrets.yml.Automation Controller:
ssh -i <ssh_key> <ssh_user>@<controller_ip> \ "sudo cat /etc/tower/SECRET_KEY"
Добавьте полученное значения в поле
controller_secret_keyв файлеsecrets.yml.Private Automation Hub:
ssh -i <ssh_key> <ssh_user>@<hub_ip> \ "sudo grep SECRET_KEY /etc/pulp/settings.py"
Добавьте полученное значения в поле
hub_secret_keyв файлеsecrets.yml.ssh -i <ssh_key> <ssh_user>@<hub_ip> \ "sudo cat /etc/pulp/certs/database_fields.symmetric.key"
Добавьте полученное значения в поле
hub_db_fields_encryption_keyв файлеsecrets.yml.Event-Driven Automation:
ssh -i <ssh_key> <ssh_user>@<eda_ip> \ "sudo cat /etc/astra-automation/eda/SECRET_KEY"
Добавьте полученное значения в поле
eda_secret_keyв файлеsecrets.yml.
Экспорт пользовательских конфигураций#
Если в платформе используются пользовательские настройки Automation Controller, сохраните их отдельно.
Примечание
Файлы, управляемые установщиком, копировать нельзя:
postgres.py;channels.py;caching.py;cluster_host_id.py.
Создайте архив с пользовательскими конфигурациями (файлы custom_*.py), передайте его на локальную машину, распакуйте и сохраните в локальном каталоге controller/custom_configs/:
ssh -i <ssh_key> <ssh_user>@<controller_ip> \
"sudo tar czf - -C /etc/tower/conf.d custom_*.py 2>/dev/null" \
| tar xzf - -C controller/custom_configs/ || true
Создание файла manifest.yml#
Создайте файл manifest.yml с описанием исходной инфраструктуры:
---
aap_version: 2.0
platform: vm
source_topology:
bastion: bastion (<installation_node_ip>)
gateway: gw1 (<gateway_ip>)
controller: ac-01 (<controller_ip>)
hub: hub01 (<pah_ip>)
eda: eda01 (<eda_ip>)
database: db (<db_ip>)
execution_node: ex01 (ex_ip)
components:
- name: gateway
database: automationgateway
- name: controller
database: awx
- name: hub
database: automationhub
- name: eda
database: automationedacontroller
migration_date: $(date +%Y-%m-%d)
Создание контрольных сумм#
Создайте файл sha256sum.txt с контрольными суммами для всех копий:
Удалите файл контрольных сумм, если он уже существует:
[ -f sha256sum.txt ] && rm -f sha256sum.txt
Сформируйте контрольные суммы для всех копий баз данных и файлов конфигурации:
find . -type f \( -name "*.pgc" -o -name "*.yml" \) \ -exec sha256sum {} \; >> sha256sum.txt
Проверьте содержимое файла:
cat sha256sum.txt
Упаковка артефакта#
Все собранные данные упакуйте в архив:
Создайте архив:
tar czf artifact.tar.gz migration-export/
Создайте контрольную сумму архива:
sha256sum artifact.tar.gz > artifact.tar.gz.sha256
Проверьте целостность:
sha256sum --check artifact.tar.gz.sha256
Копирование артефакта#
Если вы создали артефакт на отдельном узле, передайте его на установочный узел, который вы будете использовать для управления Kubernetes:
scp [-i <ssh_key>] artifact.tar.gz artifact.tar.gz.sha256 <ssh_user>@<node_ip>:/tmp/