Сценарии администрирования EVTP#

Предусловия#

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

Правила эксплуатации#

Не применимо.

Описание механизмов безопасности#

Не применимо.

Последовательность выполнения#

Сценарий 1. Создание архивных копий компонентов EVTP#

  1. Перед обновлением версии EVTP рекомендуется создавать архивные копии компонентов EVTP (включает в себя архивацию директорий установки компонентов EVTP).

  2. Необходимо заполнить параметры в конфигурационном файле vars.yml

  • в разделе flink:

    • backup_installdir_to: — директория создания архивных копий для директории установки EVTP;

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

Ручной способ:

На сервере, с которого производилась установка, выполните команду:

ansible-playbook -i inventories/<ID>/inventory flink.yml --ask-vault-pass -t backup_create -l <host>

, где:

  • ID — имя созданного inventory;

  • host — доп. параметр для указания конкретных hosts, если требуется выполнение на конкретных hosts. Данной операцией создается архивная копия для EVTP.

При помощи Jenkins:

  1. Для создания архивной копии директории установки EVTP необходимо запустить задание Jenkins SYN_custom (поставляется в дистрибутиве) с выбором playbook flink.yml c тегом backup_create. Результатом выполнения задачи Jenkins является архив с названием flink_backup.tar.gz, расположенный в директории, указанной в параметрах конфигурационного файла vars.yml.

В целях предотвращения переполнения директории хранения архивов, созданные архивные копии хранятся в директориях в единичном экземпляре. При попытке создания архивных копий компонентов повторно выполнение задания Jenkins будет прерываться, если в указанной директории уже создан ранее архив. Поэтому необходимо перед созданием нового архива предварительно удалить существующие архивные копии из данных директорий. Для этого необходимо запустить задание Jenkins SYN_custom с выбором соответствующего playbook с тегом backup_remove.

Теги backup_remove и backup_create можно совмещать в одном запуске задания Jenkins для экономии времени.

Настраиваемые параметры задания Jenkins SYN_custom:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook(s). По умолчанию не указывается;

  • jenkins_slave — Slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url - полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url - полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url - полный путь в HashiCorp Vault. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • inventory — выбрать кластер, для которого необходимо получить список топиков;

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — список тегов для запуска;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • ssl_verify — проверить, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты.

Сценарий 2. Восстановление из архивных копий компонентов EVTP#

  1. Необходимо заполнить параметры в конфигурационном файле vars.yml

  • в разделе flink:

    • backup_installdir_to: — директория создания архивных копий для директории установки EVTP;

Ручной способ:

На сервере, с которого производилась установка, выполните команду:

ansible-playbook -i inventories/<ID>/inventory flink.yml --ask-vault-pass -t backup_restore -l <host>

, где:

  • ID — имя созданного inventory;

  • host — доп. параметр для указания конкретных hosts, если требуется выполнение на конкретных hosts. Данной операцией производится восстановление директории установки EVTP из архива.

При помощи Jenkins:

  1. Для восстановления EVTP из архивной копии необходимо запустить задание Jenkins SYN_custom (поставляется в дистрибутиве) с выбором playbook flink.yml c тегом backup_restore. Результатом будет являться восстановление директории установки EVTP из архива, помещенного в указанную в файле vars.yml директорию.

Настраиваемые параметры задания Jenkins SYN_custom:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook. По умолчанию не указывается;

  • jenkins_slave — Slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url - полный путь в HashiCorp Vault до имени пользователя и пароля. Например {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url - полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url - полный путь в HashiCorp Vault. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • inventory — выбрать кластер, для которого необходимо получить список топиков;

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — список тегов для запуска;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • ssl_verify — проверить, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты.

Сценарий 3. Перезапуск компонентов EVTP#

Ручной способ:

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

Если требуется перезапустить Job Manager, то выполните действия:

  1. Остановите сервис sudo systemctl stop flink_jobmanager.service.

  2. Остановите Job Manager opt/Apache/flink/bin/jobmanager.sh stop-all.

  3. Запустите Job Manager opt/Apache/flink/bin/jobmanager.sh start.

  4. Запустите сервис sudo systemctl start flink_jobmanager.service.

Если требуется перезапустить Task Manager, то выполните действия:

  1. Остановите сервис sudo systemctl stop flink_taskmanager.service.

  2. Остановите Job Manager opt/Apache/flink/bin/taskmanager.sh stop-all.

  3. Запустите Job Manager opt/Apache/flink/bin/taskmanager.sh start.

  4. Запустите сервис sudo systemctl start flink_taskmanager.service.

При помощи Jenkins:

Для перезапуска компонентов с помощью Jenkins используйте задание SYN_custom:

  • с выбором playbook flink.yml с тегами jobmanager_stop, jobmanager_start (перезапустит JobManager EVTP);

  • с выбором playbook flink.yml с тегами taskmanager_stop, taskmanager_start (перезапустит TaskManager EVTP);

Настраиваемые параметры задания Jenkins SYN_custom:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook(s). По умолчанию не указывается;

  • jenkins_slave — Slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url — полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url - полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url — полный путь в HashiCorp Vault. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • inventory — выбрать кластер, для которого необходимо получить список топиков;

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — список тегов для запуска;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты.

В выбранном inventory достаточно указать минимальную конфигурацию:

  • hosts;

  • логин/пароль для доступа на сервер;

  • путь установки, если он отличается от пути по умолчанию.

Сценарий 4. Получение информации о кластере для EVTP#

Получение адреса лидера Jobmanager#

В REST интерфейс добавлен endpoint /jobmanagers/leader для получения адреса лидера JM.

Пример использования:

curl http://localhost:8081/jobmanagers/leader

Пример ответа:

{"host":"localhost","address":"pekko.tcp://flink@localhost:6123/user/rpc/dispatcher_0"}

Получение данных по установленным компонентам продукта#

Для получения данных по установленным компонентам продукта можно воспользоваться утилитой discovery_component.py.

На стороне компонента, если соответствующий порт для компонента уже занят, будет открыт следующий первый свободный порт. Утилита discovery_component.py принимает на вход название компонента и опционально IP адрес, маску подсети, discovery порт, значение тайм-аута и флаг расширенного логирования.

При запуске происходит выборка целевых IP адресов по IP адресу и маске подсети. По каждому IP адресу последовательно производится проверка на доступность интересующего порта и валидность возвращаемого ответа на запрос /discovery. По мере сканирования в стандартный вывод консоли возвращается информация о найденных установленных компонентах.

Для использования утилиты необходимо выполнить команду:

discovery_component.py [-h] --component COMPONENT [--discovery-port DISCOVERY_PORT] [--mask MASK] [--ip IP] [--closed-port-threshold CLOSED_PORT_THRESHOLD] [--timeout TIMEOUT] [--verbose]

Аргументы:

Параметр

Назначение

-h, –help

show this help message and exit.

–component COMPONENT

Четырехсимвольный код компонента для поиска. Возможное значение: „EVTP“.

–discovery-port DISCOVERY_PORT

Discovery порт компонента который будет опрашиваться на хостах подсети. По умолчанию берется discovery порт в зависимости от компонента: {„EVTP“: 24000}. Если порт занят - сервер пытается найти свободный порт, увеличивая его на 1 (24001, 24002 и т.д).

–mask MASK

Маска подсети для поиска компонент в нотации CIDR. По умолчанию: 24.

–ip IP

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

–closed-port-threshold CLOSED_PORT_THRESHOLD

Порог количества закрытых подряд портов для перехода проверки на следующий хост. По умолчанию: 5.

–timeout TIMEOUT

Тайм-аут на ожидание подключения к порту сканируемого хоста в секундах. По умолчанию: 0.1 секунды.

–verbose

Расширенное логирование сканирования.

Пример возвращаемых данных компонента EVTP при обращении на discovery порт:

{
    'product': 'EM',
    'component': 'EVTP',
    'version': '3.2.0',
    'cpuCount': '4'
    }

Подробнее с параметрами утилиты можно ознакомиться в файле README.txt, размещенном в папке discovery архива EM-*-metadata-distrib.zip в пакете продукта EM-*-distrib.zip.

Сценарий 5. Просмотр списка запущенных обработчиков для EVTP#

Ручной способ:

На узле, на котором расположен Job Manager, выполните команду /opt/Apache/flink/bin/flink list -a.

При помощи Jenkins:

Для перезапуска компонентов с помощью задания Jenkins используйте SYN_custom с выбором playbook flink.yml с тегом status (отображает список запущенных обработчиков EVTP).

Настраиваемые параметры задания Jenkins SYN_custom:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook. По умолчанию не указывается;

  • jenkins_slave — Slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url — полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url — полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url — полный путь в HashiCorp Vault. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • inventory — выбрать кластер, для которого необходимо получить список topic(s);

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — список тегов для запуска;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • ssl_verify — проверить, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты.

Сценарий 6. Запуск обработчика EVTP#

Ручной способ:

На узле, на котором расположен Job Manager, выполните команду:

/opt/Apache/flink/bin/flink run -d -p 1 -C file:///<полный путь до fat Jar универсального обработчика> -c ru.sbt.cep.flow.event.process.Main <полный путь до Jar универсального обработчика> --config "<полный путь до конфигурации обработчика>" --defaults "<полный путь до файла с настройками транспорта>" --telemetryConfig "<Путь до файла конфигурации телеметрии>"

Описание файла defaults.json находится в разделе «Настройки транспорта».

Дополнительно может использоваться параметр -s "<полный путь до сохраненного состояния>" для запуска обработчика из сохраненного состояния.

При помощи Jenkins:

Для запуска компонентов с помощью задания Jenkins используйте в папке Release задание Jenkins flink_config_deploy с выбором тега start_flink_jobs (запускается EVTP выбранной версии в выбранном кластере).

Настраиваемые параметры:

  • inventory — кластер, для которого необходимо запустить EVTP;

  • parallelism — указать параллелизм.

Сценарий 7. Остановка обработчика EVTP#

Ручной способ:

  1. На узле, на котором расположен Job Manager, выполните команду для получения списка идентификаторов обработчиков:

    /opt/Apache/flink/bin/flink list -a
    
  2. Выполните команду для остановки обработчика:

    /opt/Apache/flink/bin/flink stop <идентификатор запущенного обработчика>
    

При помощи Jenkins:

Для остановки компонентов с помощью задания Jenkins используйте в папке Release задание Jenkins flink_config_deploy с выбором тега stop_flink_jobs (остановка EVTP выбранной версии (из nexus) в выбранном кластере).

Настраиваемые параметры:

  • inventory — выбрать кластер, для которого необходимо остановить EVTP;

  • parallelism — указать параллелизм.

Для остановки обработчика необходимо установить параметр savepointSave. При этом сохранится состояние обработчика.

Сценарий 8. Прерывание работы обработчика EVTP#

Ручной способ:

  1. На узле, на котором расположен Job Manager, выполните команду для получения списка идентификаторов обработчиков:

    /opt/Apache/flink/bin/flink list -a
    
  2. Выполните команду для прерывания работы обработчика:

    /opt/Apache/flink/bin/flink cancel <идентификатор запущенного обработчика>
    

    При этом не сохранится состояние обработчика.

При помощи Jenkins:

Для остановки компонентов с помощью задания Jenkins используйте в папке Release задание Jenkins flink_config_deploy с выбором тега stop_flink_jobs (остановит EVTP выбранной версии (из Nexus) в выбранном кластере).

Настраиваемые параметры:

  • inventory — выбрать кластер, для которого необходимо остановить EVTP;

  • parallelism — указать параллелизм.

  • Для остановки обработчика необходимо отключить параметр savepointSave. При этом не сохранится состояние обработчика.

Сценарий 9. Перезапуск обработчиков EVTP#

Ручной способ:

  1. На узле, на котором расположен Job Manager, выполните команду для получения списка идентификаторов обработчиков:

    `/opt/Apache/flink/bin/flink list -a`
    
  2. Выполните команду для остановки обработчика:

    `/opt/Apache/flink/bin/flink stop <идентификатор запущенного обработчика>`
    
  3. Выполните команду для запуска обработчика:

    /opt/Apache/flink/bin/flink run -d -p 1 -C file:///<полный путь до fat Jar универсального обработчика> -c ru.sbt.cep.flow.event.process.Main <полный путь до Jar универсального обработчика> --config "<полный путь до конфигурации обработчика>" --defaults "<полный путь до файла с настройками транспорта>"
    

Дополнительно может использоваться параметр -s "<полный путь до сохраненного состояния>" для запуска обработчика из сохраненного состояния.

При помощи Jenkins:

Для перезапуска компонентов с помощью заданий Jenkins используйте в папке Release задание Jenkins flink_config_deploy с выбором тегов stop_flink_jobs, start_flink_jobs (перезапустит EVTP выбранной версии (из Nexus) в выбранном кластере).

Настраиваемые параметры:

  • inventory — выбрать кластер, для которого необходимо перезапустить EVTP;

  • parallelism — указать параллелизм.

Сценарий 10. Удаление системных и пользовательских сервисов обслуживания для EVTP#

Описание процесса создания системных и пользовательских сервисов обслуживания в документе: «Руководство по установке« в разделе «Подготовка окружения EVTP» (подраздел «Создание системных и пользовательских сервисов обслуживания для EVTP»).

Пререквизиты для удаления системных сервисов обслуживания#

Необходимо выдать права пользователю (например,flink) права на удаление, остановку и редактирование сервисов Flink Jobmanager и Flink Taskmanager. Для этого под пользователем root добавьте строки в файл /etc/sudoers:

  flink ALL= NOPASSWD: /bin/systemctl start flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl stop flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl status flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl restart flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl enable flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl disable flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl daemon-reload
   flink ALL= NOPASSWD: /bin/sudoedit /etc/systemd/system/flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/rm /etc/systemd/system/flink_jobmanager.service
   flink ALL= NOPASSWD: /bin/systemctl start flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/systemctl stop flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/systemctl status flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/systemctl restart flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/systemctl enable flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/systemctl disable flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/systemctl daemon-reload
   flink ALL= NOPASSWD: /bin/sudoedit /etc/systemd/system/flink_taskmanager.service
   flink ALL= NOPASSWD: /bin/rm /etc/systemd/system/flink_taskmanager.service
Ручное удаления системного сервиса обслуживания EVTP#

Под пользователем flink выполните следующие действия:

  1. Остановить и выключить системный сервис flink_jobmanager.service. Для этого выполните команду sudo systemctl stop flink_jobmanager.service && sudo systemctl disable flink_jobmanager.service.

  2. Удалить unit файл системного сервиса flink_jobmanager.service. Для этого выполните команду sudo rm /etc/systemd/system/flink_jobmanager.service

  3. Для применения изменений выполните команду sudo systemctl daemon-reload.

Под пользователем flink выполните следующие действия:

  1. Остановить и выключить системный сервис flink_taskmanager.service. Для этого выполните команду sudo systemctl stop flink_taskmanager.service && sudo systemctl disable flink_taskmanager.service.

  2. Удалить unit файл системного сервиса flink_taskmanager.service. Для этого выполните команду sudo rm /etc/systemd/system/flink_taskmanager.service

  3. Для применения изменений выполните команду sudo systemctl daemon-reload.

Ручное удаление пользовательского сервиса обслуживания EVTP#

Под пользователем flink выполните следующие действия:

  1. Остановить и выключить пользовательский сервис flink_jobmanager.service. Для этого выполните команду systemctl stop flink_jobmanager.service --user && systemctl disable flink_jobmanager.service --user.

  2. Удалить unit файл пользовательского сервиса flink_jobmanager.service. Для этого выполните команду rm ~/.config/systemd/user/flink_jobmanager.service

  3. Для применения изменений выполните команду systemctl daemon-reload --user.

Автоматическое удаление системных и пользовательских сервисов обслуживания с помощью Jenkins#

  1. Выберите соответствующий playbook в Jenkins job, в параметре «playbook»:

  • flink_system_service_delete.yml - удаление системного сервиса обслуживания EVTP;

  • flink_user_service_delete.yml - удаление пользовательского сервиса обслуживания EVTP.

  1. Выберите сервер (host), параметр «only_on_host» или «select_all_hosts» для установки на всех хостах.

  2. Запустите работу Jenkins Job.

  3. Проверьте статус Jenkins Job, для успешной работы должно быть - Finished: SUCCESS.

Сценарий 11. Подключение стандарта OpenTelemetry для EVTP#

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

Ручной способ при установке#
  1. Для настройки OpenTelemetry необходимо в файле vars.yaml задать параметры настройки конфигурации:

  • enable: — включение/ выключение OpenTelemetry;

  • endpoint — host экспортера;

  • service.name — имя сервиса.

  telemetry: # Конфигурация для Open Telemetry
    enable: false # Включение/выключение
#    config: # Ниже представлен пример описания конфигурации Open Telemetry
#      file_format: "0.1"
#      resource:
#        attributes:
#          service.name: "<имя сервиса>"
#      propagators: [ tracecontext ]
#      tracer_provider:
#        processors:
#          - simple:
#              exporter:
#                otlp:
#                  endpoint: http://<host>:<port>
#        sampler:
#          always_on: { }
  1. Если при установке компонента EVTP в файле vars.yaml указан параметр enable: true — файл telemetry.json сформируется автоматически. Также в файле telemetry.json задаются параметры endpoint и service.name из файла vars.yaml.

При помощи Jenkins#

Для включения или отключения OpenTelemetry с помощью Jenkins используйте задание SYN_custom с выбором playbook flink с тегом telemetry.

Пример конфигурации Open Telemetry в формате JSON#
{
  "file_format": "0.1",
  "tracer_provider": {
    "processors": [
      {
        "simple": {
          "exporter": {
            "otlp": {
              "endpoint": "http://<host>:<port>"
            }
          }
        }
      }
    ],
    "sampler": {
      "always_on": {}
    }
  },
  "propagators": [
    "tracecontext"
  ],
  "resource": {
    "attributes": {
      "service.name": "<имя сервиса>"
    }
  }
}

Атрибуты трассировки#

Наименование поля

Тип

Описание

Комментарии

step.name

String

Имя исполняемого шага обработки сообщения

Параметр берется из конфигурации шага в поле name

step.type

String

Тип исполняемого шага обработки сообщения

Параметр берется из конфигурации шага в поле type

Сценарий 12. Перешифрование паролей в конфигурационных файлах при установке EVTP#

В случае компрометации чувствительных данных или при изменении алгоритма шифрования можно запустить принудительное перешифрование паролей в конфигурационных файлах с помощью запуска playbook reencrypt_passwords.yml.

Перед осуществлением данной операции рекомендуется всегда создавать архивную копию EVTP.

Предварительно необходимо добавить в конфигурационный файл vars.yml блок настроек:

reencrypt_passwords:
  old_algorithm: PBEWithHmacSHA512AndAES_256 # алгоритм, с которого осуществляется перешифрация (допустимы PBEWithMD5AndTripleDES, PBEWithHmacSHA512AndAES_256)
  new_algorithm: PBEWithHmacSHA512AndAES_256 # алгоритм, на который перешифровываем (допустимы PBEWithMD5AndTripleDES, PBEWithHmacSHA512AndAES_256)
  change_key: false # удалить старый ключ encrypt.pass и сгенерировать новый, которым требуется перешифровать пароли; false - замены ключа не требуется.

Ручной способ#

На сервере, с которого производилась установка, выполнить команду:

ansible-playbook -i inventories/<ID>/inventory reencrypt_passwords.yml --ask-vault-pass

, где ID — имя созданного inventory.

С помощью Jenkins#

Наименование задания Jenkins: SYN_custom. Запустить данную Jenkins Job с ниже перечисленными параметрами.

Параметры запуска:

  • job_config_renew — отвечает за обновление Jenkins Job. При установке приложения должен быть выключен (false). Для обновления текущих параметров и сохранения значений по умолчанию должен быть включен (true);

  • inventory — укажите имя inventory для установки;

  • nexusUrl — укажите ссылку на переданный дистрибутив ./EVTP-flink-[version]-distrib;

  • emailto — укажите адрес электронной почты, на которую придет рассылка о статусе установки приложения;

  • playbook — укажите значение reencrypt_passwords.yml;

  • tags — используемые теги. Если ни один тег не выбран, то отрабатывается весь playbook;

  • flinkJobs — укажите конкретные flink job для работы с ними;

  • select_all_hosts — отвечает за выполнение playbook на всех host из выбранного inventory;

  • only_on_host — отвечает за выполнение playbook на выбранных host;

  • custom_vault_password — отвечает за ручной ввод пароля для Ansible Vault;

  • jenkins_slave — выбор jenkins slave;

  • jdk_tool — выбор jenkins tool для java, используемой при установке;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — укажите Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;

  • nexus_user_credJenkins username with password credential ID для выкачивания дистрибутива. При задании secman_url — полный путь в HashiCorp Vault до user и пароля. Например: {Jenkins vault app role credential ID для получения секретов из SecMan}|path/to/nexus:{user},{password};

  • vault_credJenkins secret file credential ID со строкой для расшифровки паролей (ansible vault) (несколько через запятую). При задании secman_url — полный путь в HashiCorp Vault до пароля. Например: {Jenkins vault app role credential ID_1}|/path/to/vault:{password_1}, {Jenkins vault app role credential ID_2}|/path/to/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например, myVaultBase64;

  • server_ssh_cred — укажите Jenkins ssh key Credential ID для подключения к серверам при задании параметра secman_url — указать полный путь в Hashicorp Vault до секрета. Например: {Jenkins vault app role credential ID для получения секретов из Hashicorp Vault}|/.../KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • ssl_verify — проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo, inventories_branch, inventories_path — необязательные параметры. Выкачивание inventory из стороннего репозитория.

Процесс перешифрации паролей#

Запускается перешифрация паролей во всех конфигурационных файлах.

В случае, если в vars.yml задан параметр change_key: true, старый ключ, хранящийся в файле /conf/encrypt.pass, будет удален, а затем будет автоматически сгенерирован новый ключ, которым будут перешифрованы пароли в конфигурационных файлах.

После перешифрации паролей производится запуск и проверка на корректный старт Job Manager и Task Manager.

Если проверка корректного старта после перешифрации паролей завершилась неудачно, то выполнение задачи Jenkins прерывается. В таком случае, необходимо либо восстановить архивную копию компонента EVTP, либо проанализировать логи, исправить ошибки конфигурации и повторно запустить процесс перешифровки паролей компонента EVTP.

Сценарий 13. Обновление сертификатов для EVTP#

  1. Должен быть заполнен параметр в конфигурационном файле vars.yml

  • в разделе rolling_update_flink_jks:

    • ignore_dn_mismatch — параметр, позволяющий игнорировать несовпадение DN старого и нового сертификата в кластере брокеров при его замене. При значении false несовпадение DN сертификатов не будет проигнорировано и запущенный процесс (или задание Jenkins) упадет с ошибкой New and old CN not match!!!. Доступные значения: true or false. Значение по умолчанию: false.

Ручной способ:

  1. Перейдите на узел, на котором будет производиться замена сертификатов EVTP.

  2. Обновите необходимые сертификаты.

  3. Выполните команды для перезапуска TaskManager и JobManager EVTP. Команды запуска описаны в подразделе «Перезапуск компонентов EVTP».

Последним всегда обновляется сертификат для лидера JobManager (лидер определяется по самым свежим логам).

При помощи Jenkins:

Для обновления сертификатов необходимо:

  1. Получите новый сертификат;

  2. Подложите новый сертификат в папку ssl в соответствующем репозитории Bitbucket;

  3. Запустите задание Jenkins SYN_customс выбором playbook rolling_update_flink_jks.yml.

Настраиваемые параметры задания Jenkins SYN_custom:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook(s). По умолчанию не указывается;

  • jenkins_slave — slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url - полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url - полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url - полный путь в HashiCorp Vault. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • inventory — выбрать кластер, для которого необходимо получить список топиков;

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — список тегов для запуска;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • ssl_verify — проверить, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты.

Сценарий 14. Использование скриптов автоматизации для EVTP#

Перезапуск компонентов EVTP#

Ручной способ:

Перезапуск JobManager EVTP на сервере, с которого производилась установка, выполняется командой:

ansible-playbook -i inventories/<ID>/inventory flink.yml --ask-vault-pass -t jobmanager_start,jobmanager_stop

Перезапуск TaskManager EVTP на сервере, с которого производилась установка, выполняется командой:

ansible-playbook -i inventories/<ID>/inventory flink.yml --ask-vault-pass -t taskmanager_start,taskmanager_stop

Здесь ID — имя созданного inventory.

Для указания конкретных узлов используйте параметр -l <fqdn узла>.

При помощи Jenkins:

Для перезапуска компонентов с помощью Jenkins используется задание SYN_custom:

  • с выбором playbook flink.yml с тегами jobmanager_stop, jobmanager_start (перезапустит JobManager EVTP);

  • с выбором playbook flink.yml с тегами taskmanager_stop, taskmanager_start (перезапустит TaskManager EVTP);

Настраиваемые параметры задания Jenkins SYN_custom:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook(s). По умолчанию не указывается;

  • jenkins_slave — slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url — полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url - полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2} . В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url — полный путь в HashiCorp Vault. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64;

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • inventory — выбрать кластер, для которого необходимо получить список топиков;

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — список тегов для запуска;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты. При использовании Jenkins выберите нужный контур, playbook flink.yml параметры start и stop, узлы на которых будет выполняться операция перезапуска компонентов EVTP, или оставьте пустыми для выполнения перезапуска компонентов EVTP на всех узлах.

Сценарий 15. Установка и перезапуск задач EVTP с помощью Jenkins#

Ручной способ:

Заполните в соответствующем inventory файл group_vars/all/vars.yml:

flink:
  jobs:
    my_job: # имя обработчика
      distr: "jobs/event-process-flow.jar"
      jobclass: "ru.sbt.cep.flow.event.process.Main"
      parallelism: 1
      args:
        config: <Относительный путь до файла конфигурации обработчика>
      args_from_flink_presets:
        - job_restart
        - job_checkpoint

Для создания сущностей используется команда:

ansible-playbook -i inventories/<ID>/inventory flink.yml --ask-vault-pass -t start_flink_jobs

, где ID — имя созданного inventory.

Для удаления сущностей используем команду:

ansible-playbook -i inventories/<ID>/inventory flink.yml --ask-vault-pass -t stop_flink_jobs

, где ID — имя созданного inventory.

При помощи Jenkins:

Описание процесса создания Jenkins Job подробнее в документе: «Руководство по установке», раздел: «Создание Jenkins Job для автоматической установки EVTP».

Работа с сущностями ведется посредством конфигурационных дистрибутивов.

Создание конфигурационных дистрибутивов осуществляется с помощью задания Jenkins flink_config_create.

Необходимо заполнить параметры:

  • NexusUrl — URL-ссылка на папку, в которую необходимо поместить дистрибутив;

  • NexusCred — ID credential для публикации дистрибутива в указанной папке Nexus.

При запуске задания Jenkins с указанными параметрами дистрибутив EVTP будет создан в указанной папке.

Для создания сущностей используется задание Jenkins flink_config_deploy с выбором соответствующего конфигурационного дистрибутива, playbook flink.yml с тегом start_flink_jobs.

Для удаления сущностей используется задание Jenkins flink_config_deploy с выбором соответствующего конфигурационного дистрибутива, playbook flink.yml с тегом stop_flink_jobs.

Выполнить перезапуск и быстро восстановить работоспособность задач EVTP можно с помощью задания Jenkins flink_config_deploy.

Для перезапуска задач EVTP необходимо выбрать:

  • параметр all_releases_from_conf — если требуется запустить все задачи EVTP, указанные в настройке inventory (запустятся все задачи EVTP, указанные в файле flink_releases.conf);

  • в параметре custom_releases_from_conf выбрать те версии дистрибутивов, которые необходимо запустить (в данном параметре подгружается список всех версий дистрибутивов из файла flink_releases.conf из настроек inventory, можно выбрать конкретную версию задачи Apache Flink, работоспособность которой необходимо восстановить).

При работе с одним из этих параметров скачивания дистрибутивов из пространства nexus может не производиться, вследствие чего возможно сократить время работы задания Jenkins (при указании соответствующих настроек).

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

Шаблон заполнения файла flink_releases.conf

Варианты заполнения файла:

  • Для скачивания дистрибутива из Nexus — «<версия дистрибутива> <параллелизм>» (параметры указываются через пробел)

  • Для использования дистрибутива со стенда — «<версия дистрибутива>,<параллелизм>,<версия_обработчика>,<имя_конфигурации>,<имя_задачи>», где:

    • <версия_обработчика> — содержимое файла job.release из дистрибутива;

    • <имя_конфигурации> — имя папки внутри roles/flink/custom_files/mapping из дистрибутива;

    • <имя_задачи> — поле flow.name в файле roles/flink/custom_files/mapping/<имя_конфигурации>/<имя_конфигурации>.conf

Примеры заполнения файла:

  • D-01.001.00-15 4 — со скачиванием из Nexus.

  • D-30.002.00-39,1,SP-02.004.03-02,SMV2FCCM,SMV2FCCM — без скачивания из Nexus, используются дистрибутивы со стенда.

Порядок строк в данном файле имеет значение. Перезапуск или установка обработчиков осуществляется в порядке, указанном в файле, сверху вниз.

Сценарий 16. Создание конфигурационных дистрибутивов для EVTP#

Данный сценарий администрирования выполняется только при помощи Jenkins.

Создание конфигурационных дистрибутивов осуществляется с помощью задания Jenkins flink_config_create.

Необходимо заполнить параметры:

  • NexusUrl — url-ссылка на папку, в которую необходимо поместить дистрибутив. Поддерживает ссылки на Nexus версий 2 и 3.

  • NexusCred — ID credential для публикации дистрибутива в указанной папке Nexus.

При запуске задания Jenkins с указанными параметрами дистрибутив EVTP будет создан в указанной папке.

Сценарий 17. Ограничение нагрузки на EVTP#

Установка ограничений осуществляется на узлах Apache Kafka. Как установить ограничения на продюсер/консьюмер описано в документе «Руководство администратора», раздел «Сценарии администрирования EVTD» (подраздел «Установка ограничений на клиенты и пользователей»).

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

Сценарий 18. Обновление библиотек и конфигураций EVTP#

  1. Перед обновлением библиотек должен быть заполнен параметр в конфигурационном файле vars.yml из inventory следующим блоком:

rolling_upgrade:
  distr: flink.zip # путь до приложения относительно /files
  installdir: /opt/Apache/flink/.new_release # временная директория для новых бинарных файлов
  same_version_upgrade: false # запускать ли обновление, если уже установлена такая же версия

Ручной способ:

На сервере, с которого производилась установка, выполните команду:

ansible-playbook -i inventories/<ID>/inventory rolling_upgrade.yml --ask-vault-pass

, где ID — имя созданного inventory.

Последним всегда обновляется лидер JobManager (лидер определяется по самым свежим логам).

При помощи Jenkins:

Для обновления всех библиотек Apache Flink и конфигураций EVTP, прописанных в заданном inventory, с помощью Jenkins используйте задание SYN_custom с выбором playbook rolling_upgrade.yml без указания тегов.

Настраиваемые параметры:

  • job_config_renew — параметр, использующийся для перенастройки задания Jenkins. Его необходимо включить, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbook. По умолчанию не указывается;

  • jenkins_slave — Slave Jenkins;

  • ansible_branch — ветка скриптов развертывания;

  • ansible_version — версия используемого Ansible;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива. При задании параметра secman_url — полный путь в HashiCorp Vault до имени пользователя и пароля. Например: {ID credential типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:{user},{password};

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (можно указывать несколько через запятую). При задании параметра secman_url - полный путь в HashiCorp Vault до пароля. Например: {ID credential }|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_1},{ID credential _2}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:{password_2}. В качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчиващимся на Base64, например myVaultBase64;

  • server_ssh_cred — ID credential типа ssh key для подключения к серверам. При задании параметра secman_url — полный путь в HashiCorp Vault. Например: {ID credential  типа vault app role для получение секретов из SecMan}|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/ssh:{user},{key},{passphrase}. В качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчиващимся на Base64, например myPrivateKeyBase64);

  • secman_url — URL для подключения к HashiCorp Vault;

  • jdk_tool — указание Jenkins Tool с необходимой версией JDK;

  • ssl_verify — проверяем, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;

  • inventory — выбрать кластер, для которого необходимо обновить библиотеки и конфигурации;

  • nexusUrl — полный путь до дистрибутива (можно указать несколько через запятую);

  • emailto — список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;

  • playbook — выбрать необходимый playbook;

  • tags — используемые теги. Если ни один тег не выбран, то играется весь playbook;

  • flinkJobs — используется фильтр с конкретными flink job;

  • select_all_hosts — запуск задания Jenkins на всех hosts из указанного inventory;

  • only_on_host — отметить галочками необходимые hosts;

  • custom_vault_password — указываем, если нужен ручной ввод пароля для Ansible Vault;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.

Если не выбран ни один из параметров only_on_host, select_all_hosts выполнение задания Jenkins прервется с ошибкой Не выбраны хосты.

Сценарий 19. Настройка транспорта для EVTP#

После завершения установки EVTP на серверах в папке /opt/Apache/flink/mapping создается файл defaults.json с настройками транспорта. Файл создается автоматически из настроек файла vars.yml, блок flink_presets:

Пример созданного файла defaults.json:

{
    "defaults": {
        "flinkInstalldir": "/opt/Apache/flink",
        "kafka": {
            "bootstrap.servers": "<список узлов брокеров Apache Kafka>",
            "secret": "/opt/Apache/flink/conf/encrypt.pass",
            "security.protocol": "SSL",
            "ssl.endpoint.identification.algorithm": "",
            "ssl.key.password": "",
            "ssl.keystore.location": "/opt/Apache/flink/ssl/flink.jks",
            "ssl.keystore.password": "",
            "ssl.truststore.location": "/opt/Apache/flink/ssl/flink.jks",
            "ssl.truststore.password": "",
            "type": "kafka"
        }
    }
}

Ознакомиться с примером можно в документе «Руководство по установке», раздел «Подготовка окружения EVTP» (подраздел «Пример заполненного файла vars.yml для EVTP»).

Сценарий 20. Просмотр событий системного журнала и событий мониторинга для EVTP#

Просмотр событий мониторинга#

Подробнее в разделе Мониторинг EVTP.

Просмотр событий системного журнала#

Подробнее в разделе Системный журнал EVTP.

Результат#

Сценарии администрирования выполнены.