Утилита для управления установкой AW
awctl - утилита с интерфейсом командной строки, предназначенная для управления установками AW.
Термины
профиль - именованная конфигурация установки AW на один или несколько серверов
Директории
В процессе работы awctl использует следующие директории и файлы:
Директории:
- $HOME/.awctl - основная директория в которой храняться данные
- $HOME/.awctl/releases - директория в которой хранятся выпуски AW
- $HOME/.awctl/profiles - директория в которой хранятся конфигурационные файлы для профилей
Файлы: - $HOME/.awctl.yml - основной конфигурационный файл, содержит пути к директориям где храняться выпуски AW и конфигурационные файлы профилей - $HOME/.awctl/profiles/<имя_профиля>/config.yml - конфигурационный файл профиля
Установка
Утилита awctl написана на ЯП Python и скомпилирована в исполняемый файл с помощью компилятора nuitka и распространяется в формате rpm и deb пакетов пригодных для автономной установки на дистрибутивы Linux. awctl рассчитан на запуск с рабочего компьютера администратора под управлением Linux.Для работает под управлением ОС Windows 10 рекомендуется использовать систему WSL.
Для установки awctl нужно скопировать пакет на целевой компьютер и выполнить следующую команду: * для дистрибутивов Linux на основе rpm пакетов: sudo rpm -i <путь_к_пакету> * для дистрибутивов Linux на основе deb пакетов: sudo dpkg -i <путь_к_пакету>
Установка выполняется в директорию /opt/awctl Команда для запуска: /opt/awctl/awctl
Начальная настройка
При первом запуске awctl создаст файл $HOME/.awctl.yml с начальным конфигом и директорию $HOME/.awctl с поддиректориями. Для успешного продолжения работы нужно убедиться что следующие опции присутствуют в файл и их значения корректны:
- aw_registry: registry.analyticworkspace.ru/aw
- registry_user: '
' - registry_password: '
' - download_url: https://registry.analyticworkspace.ru/release/
- download_user: '
' - download_password: '
'
Принцип работы
На основе файла конфигурации $HOME/.awctl/profiles/<имя_профиля>/config.yml awctl создает директории для каждого хоста, описанного в конфигурации, и формирует три файла: - docker-compose.yml - содержит сервисы, их переменные и тома для запуска на соответствующем хосте, - docker-compose.prod.yml - содержит список Docker - образов для запуска сервисов на соответствующем хосте, - .env - переменные для сервисов.
В процессе работы awctl старается автоматически разрещать зависимости между сервисами т.е. назначать экспортируемые порты и подставляеть адреса в случае необходимости.
Команды
awctl list
Выводит список доступных профилей
awctl init
/opt/awctl/awctl init <имя_профиля> выполняет следующие действия: - проверяет наличие скачанных релизов, находит последний и запоминает версию, - если скачанных релизов нет, то получает список доступных релизов с сервера, запоминает версии последнего доступного, - если скачанных релизов нет, то скачивает последний доступный, - создает директорию $HOME/.awctl/profiles/<имя_профиля>, - создает конфигурационный файл $HOME/.awctl/profiles/<имя_профиля>/config.yml с минимальной конфигураций на основе версии релиза полученной на предудущих шагах.
Дополнительные опции:
- --version
- задает версию AW на основе которой инициализировать профиль
- --release-path
- путь к, заранее загруженному, архиву с релизом, если опция установлена то --version
и --release-type
игнорируются
- --release-type
- тип релиза inet
или full
(автономная установка), применяется при наличие доступа к регистри
- --preset
- преподготовленный шаблон распределения сервисов для распределенной установки на 2, 3 или 4 сервера
awctl md
/opt/awctl/awctl md <имя_профиля> - предназначена для предварительного создания каталогов для установки AW. Полезно при настройки NFS для распределенной установки
awctl gen
/opt/awctl/awctl gen <имя_профиля> предназначена для генерации конфигурационных для установки AW, выполняет следующие действия: - читает конфигурацию из файла $HOME/.awctl/profiles/<имя_профиля>/config.yml, - проверяет скачан ли релиз AW версии указанной в config.yml, - скачивает релиз AW соответствующей версии если необходимо, - на основе config.yml подготавливает файлы конфигурации для установки AW для каждого хоcта.
awctl download
/opt/awctl/awctl download <имя_профиля> - скачивает релиз AW версии указанной в config.yml.
awctl install
/opt/awctl/awctl install <имя_профиля> - выполняет установку на хост\хосты: - считывает config.yml, - для каждого хоста в config.yml создает директорию указанную в параметре aw_home, - для каждого хоста в config.yml копирует файлы из $HOME/.awctl/profiles/<имя_профиля>/<имя_хоста> в aw_home, - для каждого хоста в config.yml копирует файлы из $HOME/.awctl/releases/<версия_AW>/ в aw_home, - для каждого хоста в config.yml выполняет авторизацию в docker registry, - для каждого хоста в config.yml запускает на исполненне скрипт aw_home/create_project_dirs.sh для создания необходимых директорий, - для каждого хоста в config.yml запускает на исполнение команду docker-compose pull для загрузки образов, - для каждого хоста в config.yml останавливает запущенные контейнеры AW если такие есть, - для каждого хоста в config.yml запускает новые контейнеры.
Дополнительные опции:
- --host
- позволяет запустить установку только для определенного хоста
- --config-only
- выполняет только копирование сгенерированных конфигурационных файлов
awctl migrate
/opt/awctl/awctl migrate <имя_профиля> - выполняет миграции для сервисов etl-api и backend: - считывает config.yml, - находит хост на котором запущен сервис backend, - подключается но ssh и запускает на исполнение команду миграции БД, - находит хост на котором запущен сервис etl-api, - подключается но ssh и запускает на исполнение команду миграции.
awctl pull
/opt/awctl/awctl pull <имя_профиля> - для каждого хоста из config.yml выполняет загрузку docker-образов AW.
Дополнительные опции:
- --host
- позволяет запустить скачивание образов только для определенного хоста
awctl start
/opt/awctl/awctl start <имя_профиля> - для каждого хоста из config.yml выполняет запуск контейнеров AW (docker-compose up -d --force-recreate)
Дополнительные опции:
- --host
- позволяет выполнить запуск контейнеров только для определенного хоста
awctl stop
/opt/awctl/awctl stop <имя_профиля> - для каждого хоста из config.yml выполняет остановку контейнеров AW (docker-compose down -v)
Дополнительные опции:
- --host
- позволяет остановить контейнеры только на определенном хосте
awctl restart
/opt/awctl/awctl restart <имя_профиля> - для каждого хоста из config.yml выполняет последовательно остановку а затем запуск контейнеров AW.
Дополнительные опции:
- --host
- позволяет выполнить перезапуск контейнеров только на определенном хосте
awctl show
/opt/awctl/awctl show <имя_профиля> - выводит run-time конфигурацию профиля.
Формат конфигурационного файла профиля
config.yml - текстовый конфигурационный файл профиля в формате yaml на основе которого выполняется генерация установочных файлов и последующая установка AW. Файл состоит из двух секций: aw и hosts. Секция aw содержит общие настройки, применимые ко всем хостам, ниже приведен список доступных опций секции:
- aw_version - строка содержащая число, версия AW для установки,
- compose_file - строка, содержащая список docker-compose файлов с разделителем, пример 'docker-compose.yml:docker-compose.prod.yml',
- docker_compose_separator - символ служащий расделителнм docker-compose файлов,
- aw_rel_type - тип используемого архива, inet или full
- aw_home - директория в которую будет произведена установка AW.
- with_extra_hosts - строка, булевое - использовать extra_hosts для формирования DNS.
Секция hosts сотержит перечень хостов, на которые будет произведена установка AW, с параметрами. Каждой хост должен содержать как минимум список сервисов AW для установки. Список параметров для хостов:
- aw_host - строка, может содержать IP адрес или имя хоста, это значение будет использовано для установки подключения по SSH и как адрес для сервисов
- aw_home - строка, полный путь к директории в которую будет производиться AW,
- aw_ssh_user - строка, имя пользователя для подключения по ssh,
- aw_ssh_host - строка, IP адрес или FQDN хоста для подключения по ssh,
- aw_ssh_port - число, порт для подключения по ssh
- aw_ssh_pass - пароль для подключения по SSH
- dns - массив из адресов DNS серверов, будет добавлен с соответствующие секции в сгенерированном docker-compose файле,
- env - массив типа ключ - значения для переопредления значения переменных окружения, пары будут записаны в сгенерированный .env файл,
- services - список сервисов для установки на хост.
Пример config.yml для одного хоста:
aw:
aw_compose_file: docker-compose.yml:docker-compose.prod.yml
aw_docker_compose_separator: ':'
aw_home: /opt/aw/app
aw_install_type: docker-compose
aw_rel_type: inet
aw_version: '1.30'
hosts:
aw:
services:
- frontend
- backend
- widget-export
- clear-storage
- model-changes
- model-sync
- websocket
- puppeteer
- db
- pgbouncer
- clickhouse-server
- rabbitmq
- memcached
- etl-broker
- etl-airflow-db
- etl-airflow
- etl-spark
- etl-api
- etl-data-preview
- etl-tasks
- java-puller
- file-puller
- odata-puller
- etl-pusher
- etl-stats
- etl-mlflow
- etl-mlflow-db
- auth-bridge
- data-master
- minio
- minio-init
- diag
- clickhouse-parser
- preview
- sender
- file-builder
- cron
- swagger
Пример config.yml для установки на 3 хоста (backends, etl, clickhouse):
---
aw:
aw_compose_file: docker-compose.yml:docker-compose.prod.yml
aw_docker_compose_separator: ':'
aw_home: /opt/aw/app
aw_install_type: docker-compose
aw_rel_type: inet
with_extra_hosts: true
aw_version: '1.30'
hosts:
aw:
aw_ssh_user: awuser
aw_home: '/opt/aw/app'
aw_host: 192.168.0.110
dns:
- 77.88.8.8
- 77.88.8.1
env:
FRONTEND_URL: http://aw.example.ru
services:
- frontend
- backend
- widget-export
- clear-storage
- model-changes
- model-sync
- websocket
- puppeteer
- db
- pgbouncer
- rabbitmq
- memcached
- auth-bridge
- data-master
- minio
- minio-init
- diag
- clickhouse-parser
- preview
- sender
- file-builder
- cron
- swagger
clk:
aw_ssh_user: awuser
aw_home: '/opt/aw/app'
aw_host: 192.168.0.130
services:
- clickhouse-server
etl:
aw_ssh_user: awuser
aw_home: '/opt/aw/app'
aw_host: 192.168.0.120
services:
- etl-broker
- etl-airflow-db
- etl-airflow
- etl-spark
- etl-api
- etl-data-preview
- etl-tasks
- java-puller
- file-puller
- odata-puller
- etl-pusher
- etl-stats
- etl-mlflow
- etl-mlflow-db