# Установка платформы monq

Данное руководство поможет вам установить платформу monq.

ВНИМАНИЕ

Перед установкой monq обязательно ознакомьтесь с требованиями и архитектурой продукта.

Установка платформы monq делится на два основных этапа:

Воспользуйтесь ссылками для быстрого перехода к нужному этапу установки.

# Настройка системного программного обеспечения

# Подготовка инфраструктуры с помощью пакета infra_{version}.tar.gz

⚠️ Инструкция описывает подготовку окружения сервера к запуску monq.
Предоставляется в ознакомительных целях.

ПОДСКАЗКА

В случае поставки monq в виде образа VM, сразу перейдите к вторичной настройке СПО.

# Подготовка рабочего места к запуску установщика

ВНИМАНИЕ

Для установки платформы monq, на целевом сервере рекомендуется использование CentOS 7.8 (opens new window)
Тестирование на других дистрибутивах не производилось.

  1. Установите операционную систему.
  2. Назначьте серверу IP-адрес <ip-address-vm>.
  3. Создайте на машине, с которой будет запущен сценарий установки СПО, пользователя ansible и сгенерируйте ключ SSH:
    SOME_NAME=ansible && adduser ${SOME_NAME}
    mkdir -p /home/${SOME_NAME}/.ssh/
    ssh-keygen -t rsa -f /home/${SOME_NAME}/.ssh/id_rsa
    chown -R ${SOME_NAME}:${SOME_NAME} /home/${SOME_NAME}/.ssh/id_*
    
  4. Создайте на целевом сервере пользователя ansible, скопируйте открытую часть SSH ключа из предыдущего пункта:
    SOME_NAME=ansible && adduser ${SOME_NAME}
    echo "${SOME_NAME}     ALL=(ALL:ALL)   NOPASSWD:ALL" > /etc/sudoers.d/${SOME_NAME}
    mkdir -p /home/${SOME_NAME}/.ssh/
    echo 'ssh-rsa <содержимое id_rsa.pub из пункта 3> ansible@ansible' >> /home/${SOME_NAME}/.ssh/authorized_keys
    
  5. Установите на машине, с которой будет устанавливаться monq, пакет ansible соответствующей версии.
  6. Скопируйте сценарий развертывания в локальный каталог.
  7. Извлеките сценарий из архива.

# Первичная настройка СПО

  1. Перейдите в каталог с извлеченным сценарием развертывания.
  2. Подготовьте к запуску playbook, а именно – объявите нужные переменные:
    • dockerRegUri – адрес docker-репозитория разработчика
    • dockerRegLogin – логин docker-репозитория разработчика
    • dockerRegPassword – пароль docker-репозитория разработчика
    • infraDomain – DNS зона для инфраструктурных объектов, обычно monq.local
    • ansible_ssh_host – IP-адрес сервера, на котором будет установлен monq
    • ansible_ssh_port – порт SSH-сервера, на котором будет установлен monq, обычно 22
    • ansible_ssh_private_key_file – путь к SSH-ключу, обычно это /home/ansible/.ssh/id_rsa.pub
  3. Запустите playbook:
    ansible-playbook -i hosts -u ansible -e "rename_server=true \
    registry_password=${dockerRegPassword} registry_user=${dockerRegLogin} docker_registry=${dockerRegUri} \
    ansible_ssh_private_key_file=${ansible_ssh_private_key_file} ansible_ssh_port=${ansible_ssh_port} \
    infra_domain=${infraDomain} ansible_ssh_host=${ansible_ssh_host}" infra.yaml -t prepare_env    
    
  4. После запуска сценария:
    • Установлены docker, kubernetes и прочие необходимые пакеты.
    • Развернут локальный репозиторий (в него будут импортированы инфраструктурные контейнеры).
    • Запущен контейнер, содержащий сценарии запуска СПО и ППО. В локальный репозиторий будут импортированы docker контейнеры ППО.

# Вторичная настройка СПО

ВНИМАНИЕ

Если установка monq выполняется с помощью образа VM:

  • Авторизационные данные администратора VM – root/root.
  • Значение переменной infraDomainmonq.local.
  1. Выполните импорт образа в систему виртуализации. Создайте на виртуальной машине сетевой интерфейс, назначьте IP адрес и перезагрузите VM.

    Образ установщика подготовлен для импорта в VMware vSphere 6.5, VMware Workstation, VMWare Player. Если вы используете VMware vSphere 5.5 обратите внимание на следующие нюансы. IP-адрес и DNS-сервер должны быть назначены вручную. Использование DHCP не допускается.

    dns=8.8.8.8
    gw=192.168.1.1
    ipa=192.168.1.28/24
     
    nmcli connection modify "Wired connection 1" ipv4.dns ${dns} ipv4.addresses ${ipa} ipv4.gateway ${gw} ipv4.method manual
    
  2. Обеспечьте разрешение имен на машине, с которой производится установка – сконфигурируйте файл hosts:

    <IP-адрес-сервера> installer.in.<infraDomain>
    

Дальнейшие действия производятся в веб-интерфейсе:

  1. Перейдите в веб-интерфейс installer.in.<infraDomain>:888
  2. Авторизуйтесь под учетной записью admin/admin
  3. Перейдите в PROJECTSinfraJOBS и запустите 2 infra install
  4. Задайте значения переменных:
    • infraDomain – зона DNS для инфраструктурных объектов, обычно monq.local, можно оставить по умолчанию.
    • global_domain – основное доменное имя, после запуска система будет доступна по данному доменному имени, например – monq.example.ru.
    • nodeIp – IP-адрес целевого сервера, на котором устанавливается monq.
    • lan_network_subnet – адрес локальной сети, в которой развернута система. Из данной сети будут доступны инфраструктурные объекты СПО, например, 192.168.7.0/24.
    • pod_network_cidr – оставьте по умолчанию.
    • service_network_cidr – оставьте по умолчанию.
  5. Запустите сценарий в веб-интерфейсе – нажмите Run Job Now.
  6. После выполнения сценария на сервере будут запущены инфраструктурные объекты и копия данного установщика внутри kubernetes.

# Настройка прикладного программного обеспечения

# Установка ППО

ВНИМАНИЕ

Обязательным требованием перед запуском данного сценария является выполнение вторичной настройки СПО.

  1. Перейдите в веб-интерфейс установщика по адресу installer.in.<infraDomain>.

    ПОДСКАЗКА

    Обратите внимание, что, в данном случае, используется доменное имя без указания порта – это связано с тем, что работа ведется с уже развернутой копией установщика.

  2. Перейдите в PROJECTSmonqJOBS и запустите 1 monq install.
  3. Задайте значения переменных
    • nodeIp – IP-адрес сервера, на котором будет продолжена установка monq.
    • global_domain – основное доменное имя. После запуска, система будет доступна по данному доменному имени, например, monq.example.ru.
    • tls_crt, tls_key – файлы сертификатов, существует 3 варианта заполнения:
      1. У вас есть подписанные сертификаты для доменного имени monq.example.ru с полной цепочкой, при этом, цепочка сертификата должна быть сформирована следующим образом:
        cat your_domain.crt  somename.ca-bundle  >> fullchain.pem
        
        В данном случае, загрузите сертификаты в установщик (tls_crtВыберите файл и tls_keyВыберите файл, соответственно).
      2. У вас есть самоподписанные, внутрикорпоративные сертификаты – в данном случае загрузите сертификаты позже, при назначении алиасного домена.
      3. У вас нет сертификата – в данном случае ничего не загружайте, сертификаты будут созданы и применены при назначении алиасного домена.

        ВНИМАНИЕ

        Алиасный домен обязательно! должен отличаться от global_domain.

  4. Запустите сценарий в веб-интерфейсе – нажмите Run Job Now.
  5. Перейдите в журнал выполнения – нажмите Log Output.
  6. В логе последней операции выполнения сценария отобразится информация для подключения к веб-интерфейсу monq:
    TASK [sm : echo ui interface credentials] **************************************
    ok: [d-head] => {
    "msg": [
        "save you credentials:",
        "- ui interface: <доменное имя>",
        "- ui interface username: <имя пользователя>",
        "- ui interface password: <пароль>"
            ]
        }
    
    Авторизационные данные для доступа к monq и его инфраструктурным объектам будут сохранены в секретах kubernetes pl_auth и system_auth. В случае утери авторизационных данных, пароль можно восстановить следующим образом – выполните на целевом сервере команду от имени учетной записи root:
    kubectl get secrets -n production pl-auth -o json | jq -r .data.pl_auth | base64 --decode | jq .identity_connect_info.identity_users.UserProfileAdmin.identity_user_password
    
  7. Если вы использовали валидные сертификаты – то на данном этапе установка monq завершена, в противном случае – выполните назначении алиасного домена.

# Назначение алиасного домена

  1. Перейдите в веб-интерфейс установщика по адресу installer.in.<infraDomain>.
  2. Перейдите в PROJECTSmonqJOBS и запустите 2 monq add alias domain.
  3. Задайте значения переменных:
    • global_domain – основное доменное имя, после запуска система будет доступна по данному доменному имени, например, ansible.monq.ru..
    • new_global_domain – дополнительное доменное имя, после запуска система будет доступна по данному доменному имени, например, new-ansible.monq.ru.
    • nodeIp – IP-адрес сервера, на котором устанавливается monq.
    • tls_crt, tls_key – файлы сертификатов, существует 2 варианта заполнения:
      • У вас есть самоподписанные, внутрикорпоративные сертификаты – в данном случае загрузите сертификаты в установщик (tls_crtВыберите файл и tls_keyВыберите файл, соответственно).
      • У вас нет сертификата – в данном случае сертификат будет создан и применен автоматически.

        ВНИМАНИЕ

        Алиасный домен обязательно! должен отличаться от global_domain.

  4. Запустите сценарий в веб-интерфейсе, кнопка Run Job Now.

# Удаление ППО

Если установка завершилась с ошибкой или допущена опечатка в доменном имени, рекомендуется очистить СПО от следов ППО – для этого выполните специальный сценарий:

  1. Перейдите в веб-интерфейс установщика по адресу installer.in.<infraDomain>.
  2. Перейдите в PROJECTSmonqJOBS и запустите 3 monq erase.
  3. Задайте значение переменной nodeIp – IP-адрес сервера, на котором устанавливается monq.
  4. Запустите сценарий в веб-интерфейсе, кнопка Run Job Now.

# Проверка инсталляции после запуска

Проверка сводится к выполнению простейших операций и анализу логов. На этапе новой установки можно получать данные напрямую, на функционирующем MONQ уже потребуется использовать специализированные инструменты для сбора и анализа логов.

Ниже описан метод, который используется в 90% случаев. В иных случаях необходимо проверять логи серверов, БД и прочих инфраструктурных компонентов.

  1. Перейдите на головной сервер d-head , запросите логи у балансировщика в режиме следования. При этом подключитесь к балансировщику, который расположен на ноде, указанной в качестве точки обмена данными (в данном примере используется первая нода):

    kubectl get po -n kube-system -o wide | awk '/nginx/ && /d-node-1/'
    nginx-ingress-controller-wrddt              1/1     Running       0          139m   10.19.0.5    d-node-1   <none>           <none>
    
    kubectl logs -n kube-system -f --tail=100 nginx-ingress-controller-zzlj2
    

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

  2. Запустите браузер, включите режим отладчика (для Google Chrome горячая клавиша F12).

  3. Пройдите авторизацию в интерфейсе, выполните типовые операции. В примере, при переходе на главный экран, запрос не может получить данные, так как статус ответа – 500, из-за чего не прогружается интерфейс.

  4. Запросите лог с балансировщика по коду ошибки:

    kubectl logs -n kube-system nginx-ingress-controller-zzlj2 -f --tail=100 | awk '/ 500 /'
    77.232.49.236 – [77.232.49.236] – – [15/May/2020:14:31:32 +0000] "POST /api/webui/sm/v1/events-history/realtime-statuses HTTP/2.0" 500 0 "https://d3-ansible.monq.ru/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" 390 0.108 [production-sm-gateway-api-service-80] [] 10.244.1.99:5005 0 0.107 500 7a6ec356e4f075ddfa4b1108c1b9a93a
    
  5. Ошибку вызывает запрос на микросервис sm-gateway-api-service – подключитесь к нему, выполните запрос заново и проверьте лог:

    kubectl get po -n production | grep sm-gateway-api-service
    sm-gateway-api-service-78474d5d79-d8wjj                           1/1     Running   2          11m
    kubectl logs -n production sm-gateway-api-service-78474d5d79-d8wjj -f --tail=100
    
  6. Запрос проваливается после обращения к подчиненному микросервису http://api.d3-ansible.monq.ru/api/sm/synthetic-triggers/events-history/realtime-statuses.

    Log

  7. Подключитесь к логу подчиненного микросервиса, для этого повторно обратитесь к логам балансировщика, но уже по другому коду – 502, т.к. запрос проваливается именно с этим кодом:

    kubectl logs -n kube-system nginx-ingress-controller-zzlj2 -f --tail=100 | awk '/ 502 /'
    10.244.1.99 – [10.244.1.99] – – [15/May/2020:14:36:37 +0000] "POST /api/sm/synthetic-triggers/events-history/realtime-statuses HTTP/1.1" 502 163 "-" "-" 393 0.000 [production-sm-synthetic-triggers-api-service-80] [] 0.0.0.1:80 0 0.000 502 2e946753876ee52fb329780ef28cd40b
    
  8. Запрос направляется к микросервису sm-synthetic-triggers-api-service, подключитесь к нему и выполните отладку:

    kubectl get po -n production | grep sm-synthetic-triggers-api-service
    # пустой ответ
    kubectl get all -n production | grep sm-synthetic-triggers-api-service
    
    service/sm-synthetic-triggers-api-service                ClusterIP   10.16.0.99    <none>        80/TCP    120m
    
  9. Из полученного ответа можно сделать вывод, что манифест развертывания для микросервиса не был создан в оркестраторе.

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

# Особенности установщика

# Страница с режимом обслуживания

Режим обслуживания – заглушка на главном экране с таймером окончания технических работ. Инсталлятором предусмотрено автоматическое размещение файлов режима обслуживания внутри контейнера с фронтовой частью системы. Каталог внутри контейнера примонтирован к файловому хранилищу.

# Файловое хранилище

В базовой инсталляции на сервере d-head размещено файловое хранилище в виде сервера nfs – с данного хранилища в k8s кластер монтируются каталоги с данными.

# Импорт образа в VMware ESXI 5.5

  1. Скачайте образ установщика в виде VM

    Образ содержит 2 файла:

    • monq_{version}.ovf
    • monq_{version}-disk1.vmdk
      Файл с расширением monq_{version}.ovf подготовлен для VMware vSphere 6.5 и соответственно несовместим с VMware vSphere 5.5.
  2. Загрузите в datastore вашего гипервизора файл monq_{version}-disk1.vmdk любым удобным способом.
  3. Подключитесь к гипервизору по протоколу SSH и выполните следующую команду для импорта образа диска:
    vmkfstools -i {путь к файлу monq_{version}-disk1.vmdk} {путь к новому образу диска.vmdk}
    
  4. Создайте виртуальную машину, обратите особое внимание на следующие параметры при создании:
    • SCSI controller - LSI Logic Parallel
    • Use an existing virtual disk - Выберите новый импортированный диск в п.3
  5. Сохраните параметры, включите виртуальную машину и переходите к дальнейшей установке monq.
✏️: 21.07.2021