Перейти к содержанию

Утилита для управления установкой 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