Автоматизированная установка сервиса с использованием Deploy Tools#

Дистрибутив поддерживает установку с помощью централизованного инструмента развертывания — компонента Deploy Tools (CDJE) продукта Platform V DevOps Tools (DOT). Рекомендованная версия конвейера указывается в требованиях к комплексу технических средств для размещения среды виртуализации и Platform V.

С описанием компонента Deploy Tools и его настройкой можно ознакомиться в соответствующей документации по продукту Platform V DevOps Tools (DOT).

Note

Рекомендуемая версия Jenkins Pipeline для dropApp — D-01.042.133, для OpenShift — D-01.040.320-1273.

Пререквизиты#

Перед установкой компонента Batch Scheduler:

  • в репозитории common в файле subsystem.json добавьте блок BATCH_SCHEDULER.

Пример блока:

"BATCH_SCHEDULER": {
  "fpi_name": "xxxxx",
  "nexus_repo": "xxxxx",
  "groupId": "xxxxx",
  "artifactId": "CI90000158_batch",
  "versionFilter": "xxxxx",
  "sqlReport": "false",
  "openshiftProjectName": "<namespace k8s/ose>",
  "openshiftToken": "<токен авторизации>",
  "strict": false,
  "deployType": "parallel",
  "fpType": "fp"
}

где fpi_name — наименование компонента, например: scheduler.

  • в файле multiClusters.json заполните параметры кластера.

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

{
  "datacenters": {
    "VDC01": {
      "openshiftCluster": "https://api.k8s.xxxxx:xxxx",
      "openshiftSATokenCred": "{{ fpConfig.openshiftToken }}",
      "openshiftProjectName": "{{ fpConfig.openshiftProjectName }}",
      "openshiftNewRoute": "<наименование кластера системы оркестрации контейнерами>",
      "openshiftControlPlane": "<контрольная панель Istio>",
      "openshiftControlPlaneIstiodService": "<Наименование сервиса Istio>",
      "openshiftWebConsole": "<Ссылка на консоль кластера>",
      "overrides": [ ],
      "openshiftRoutersFQDN": [
        "<IP/DNS>"
      ]
    }
  }
}

где "overrides" — наименование системы оркестрации контейнерами, куда производится установка, например: [ ] — Kubernetes, ["openshift"] — OpenShift.

  • в файле common.conf.yml вставьте блок DB Scheduler:

jdbc.scheduler_postgres.schema.main: "{{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['db_schema_name'] }}"
jdbc.scheduler_postgres.schema.si: "{{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['db_schema_name'] }}"
  • в файле globalInventory вставьте блок подключения к основной (SCHEDULER.Main.PostgreSQL) БД. Пример заполненного блока основной БД:

  [SCHEDULER.Main.PostgreSQL]
  psql_scheduler_main ansible_host='<IP>' dns_name='<DNS>'

[SCHEDULER.Main.PostgreSQL:vars]
db_name=<наименование БД>
db_schema_name=<схема БД>
db_user_name=<пользователь БД>
db_port=<порт БД>
db_mesh_port=<порт Istio БД>
db_url='jdbc:postgresql://{{ ansible_host }}:{{ db_port }}/{{ db_name }}'
  • в файле globalInventory вставьте блок подключения к репликационной (SCHEDULER.Si.PostgreSQL) БД. Пример заполненного блока репликационной БД:

  [SCHEDULER.Si.PostgreSQL]
  psql_scheduler_si ansible_host='<IP>' dns_name='<DNS>'

[SCHEDULER.Si.PostgreSQL:vars]
db_name=<наименование БД>
db_schema_name=<схема БД>
db_user_name=<пользователь БД>
db_port=<порт БД>
db_mesh_port=<порт Istio БД>
db_url='jdbc:postgresql://{{ ansible_host }}:{{ db_port }}/{{ db_name }}'
  • в файле _global.jdbc.conf настройте БД, вставив блок:

#SCHEDULER
jdbc.scheduler_postgres.url.main=jdbc:postgresql://{{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['dns_name'] }}:{{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['db_port'] }}/{{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['db_name'] }}?currentSchema={{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['db_schema_name'] }}
jdbc.scheduler_postgres.url.si=jdbc:postgresql://{{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['dns_name'] }}:{{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['db_port'] }}/{{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['db_name'] }}?currentSchema={{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['db_schema_name'] }}

jdbc.scheduler_postgres.ip.main={{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['ansible_host'] }}
jdbc.scheduler_postgres.ip.si={{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['ansible_host'] }}

jdbc.scheduler_postgres.host.main={{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['dns_name'] }}
jdbc.scheduler_postgres.host.si={{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['dns_name'] }}

jdbc.scheduler_postgres.db_name.main={{ hostvars[groups['SCHEDULER.Main.PostgreSQL'][0]]['db_name'] }}
jdbc.scheduler_postgres.db_name.si={{ hostvars[groups['SCHEDULER.Si.PostgreSQL'][0]]['db_name'] }}
  • в файле ssl.conf создайте переменные с путями до сертификатов сервисов Прикладной журнал, OTT, Istio, Журналирование и до сертификатов БД:

#Scheduler

# AJ
ssl.schd.aj.keystore=ansible/files/ssl/aj/serverkeystore.jks
ssl.schd.aj.trust=ansible/files/ssl/aj/trust.jks

#DB
ssl.schd.db.root=ansible/files/ssl/db/xxxx.crt
ssl.schd.db.user.crt=ansible/files/ssl/db/xxxx.crt
ssl.schd.db.user.pk=ansible/files/ssl/db/xxxx.crt

#OTT
ssl.schd.ott.client.crt=ansible/files/ssl/ott/batch-scheduler.crt
ssl.schd.ott.client.key=ansible/files/ssl/ott/batch-scheduler.key
ssl.schd.ott.ott-service=ansible/files/ssl/ott/ott-service.crt
ssl.schd.ott.trustCa=ansible/files/ssl/ott/trustCa.crt

ssl.ui.ott.client.crt=ansible/files/ssl/ott/batch-ui.crt
ssl.ui.ott.client.key=ansible/files/ssl/ott/batch-ui.key
ssl.ui.ott.ott-service=ansible/files/ssl/ott/ott-service.crt
ssl.ui.ott.trustCa=ansible/files/ssl/ott/trustCa.crt

#ISTIO
ssl.schd.istio.root=ansible/files/ssl/istio/xxxxx.crt
ssl.schd.istio.egress.crt=ansible/files/ssl/istio/egress/tls.crt
ssl.schd.istio.egress.key=ansible/files/ssl/istio/egress/tls.key
ssl.schd.istio.ingress.crt=ansible/files/ssl/istio/ingress/tls.crt
ssl.schd.istio.ingress.key=ansible/files/ssl/istio/ingress/tls.key

#LOGGER
ssl.schd.logger.client.crt=ansible/files/ssl/logger/batch-logger.crt
ssl.schd.logger.client.key=ansible/files/ssl/logger/batch-logger.key
ssl.schd.logger.logger-ca=ansible/files/ssl/logger/logger-ca.crt
  • в файле _passwords.conf добавьте все учетные данные для сервиса Прикладной журнал:

# Scheduler

# MAIN DB Scheduler
jdbc.batch_scheduler.main.user=<логин пользователя основной БД>
jdbc.batch_scheduler.main.password=<пароль пользователя основной БД>
#SI DB
jdbc.batch_scheduler.si.user=<логин пользователя репликационной БД>
jdbc.batch_scheduler.si.password=<пароль пользователя репликационной БД>

# Владелец схемы для проливки скриптов Liquibase
schd.owner.main.user=<логин пользователя основной БД>
schd.owner.main.password=<пароль пользователя основной БД>

schd.owner.si.user=<логин пользователя репликационной БД>
schd.owner.si.password=<пароль пользователя репликационной БД>
  • в конфигурационных файлах компонента заполнить все обязательные стендозависимые параметры.

Например:

STAND_ID=<Обязательно к заполнению>

Перечень конфигурационных файлов#

В конфигурационных файлах к каждому параметру приведено описание с его назначением. Конфигурационные файлы расположены по пути: package/conf/config/parameters/*.conf.

Изменение клиентских настроек в файле logback.xml#

Если необходимо изменить клиентские настройки в файле logback.xml:

  1. В архиве binaries-schd-<version>-distrib.zip по пути: /package/data/logback скопируйте файл logback.xml для каждого микросервиса (scheduler-dispatcher, scheduler-gc, scheduler-journal-applier, scheduler-server).

  2. Переместите файлы в репозиторий batch_common_main/browse/ххх/ansible/files/logback.

  3. При необходимости внесите и сохраните изменения в файле logback.xml.

При запуске автоматизированной установки с помощью Deploy Tools файл logback.xml автоматически загружается из репозитория в файл, например, configmap-scheduler-dispatcher.yaml. Наименование файла определяется для каждого микросервиса соответственно.

Изменение клиентских настроек в файле configmap-fluentbit.yaml#

Если необходимо изменить клиентские настройки в файле configmap-fluentbit.yaml:

  1. В архиве binaries-schd-<version>-distrib.zip по пути: /package/data/fluent-bit скопируйте файлы fluent-bit.conf и parsers.conf.

  2. Переместите файлы в репозиторий batch_common_main/browse/ххх/ansible/files/fluent-bit.

  3. При необходимости внесите и сохраните изменения в файлах fluent-bit.conf и parsers.conf.

При запуске автоматизированной установки с помощью Deploy Tools файлы fluent-bit.conf и parsers.conf автоматически загружаются из репозитория в файл configmap-fluentbit.yaml.

Управление ACL-фильтром#

Для автоматической подстановки заголовков CN:

  1. В конфигурационном файле custom_property.yml в блоке добавления тенантов добавьте тег common_names со значениями CN. Пример:

tenants:
  - name: <наименование тенанта>
    host: <host системы оркестрации контейнерами>
    port: <порт host тенанта, выбирается самостоятельно>
    egress_port: <промежуточный порт для маршрутизации Istio, выбирается самостоятельно>
    inner_port: <внутренний порт для маршрутизации Istio, выбирается самостоятельно>
    protocol: http/https
    tls_mode: DISABLE/MUTUAL
    timeout: <время таймаута, например, 5s>
    common_names:
      - cn: .*CN=какой-то_CN_1.*
        program_size: 300
      - cn: .*CN=какой-то_CN_2.*
        program_size: 400
      - cn: .*CN=какой-то_CN_3.*
        program_size: 500
  1. В файле batch-scheduler.all.conf укажите значение параметра ACL_ENVOY_FILTER_ENABLED=true.

Note

Для использования файла custom_property.conf.yml необходимо перенести содержимое файла inventory/custom_property.yml вручную, а файл inventory/custom_property.yml удалить вместе с каталогом.

Запуск автоматизированной установки с помощью Deploy Tools#

Для запуска развертывания сервиса с использованием Deploy Tools:

  1. В системе оркестрации контейнерами создайте манифест ServiceAccount, задав параметр namedeploytoken.

  2. Во вкладке Role Bindings нажмите Create Binding и на открывшейся странице:

  • в поле name введите — deploytokenrb;

  • в поле namespace из выпадающего списка выберите необходимый namespace;

  • в поле Role Name из выпадающего списка выберите admin;

  • в поле Subject выберите ServiceAccount;

  • в поле Subject Namespace из выпадающего списка выберите необходимый namespace;

  • в поле Subject Name введите — deploytoken;

  • нажмите Create.

  1. Перейдите во вкладку ServiceAccount и в блоке Secrets выберите токен.

  2. На открывшейся странице из поля token скопируйте значение токена.

  3. Перейдите в Jenkins Job Deploy Tools и откройте вкладку Credentials.

  4. Добавьте учетные данные, нажав кнопку Add Credentials.

  5. В открывшейся форме заполните поля:

  • KindSecret text;

  • Secret — скопированный токен из системы оркестрации контейнерами;

  • ID — вставьте наименование токена deploytoken-<namespace>.

  1. Перейдите на страницу Pipeline DEPLOY, нажав кнопку Собрать с параметрами.

  2. На открывшейся странице в поле CONFIG_DIR из выпадающего списка выберите созданную вами директорию блока, например, scheduler.

  3. В поле SUBSYSTEM из выпадающего списка выберите — BATCH_SCHEDULER.

  4. В поле DISTRIB_VERSION из выпадающего списка выберите необходимую версию дистрибутива.

  5. В поле выбора кластера выберите VDC01.

  6. В таблице выберите следующие playbooks:

  • DB_UPDATE — «запуск liquibase скриптов»;

  • OPENSHIFT_INGRESS_EGRESS_DEPLOY — «деплой Ingress/Egress в OpenShift»;

  • MIGRATION_FP_CONF — «миграция конфигурационных файлов ФП»;

  • OPENSHIFT_DEPLOY — «установка в OpenShift».

  1. Нажмите кнопку Собрать.