Автоматизированная установка сервиса с использованием 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=<Обязательно к заполнению>
Перечень конфигурационных файлов#
batch-scheduler.all.conf— общие параметры для компонента, например: URL подключения к БД;batch-scheduler.istio.all.conf— параметры для интеграции с Synapse Service Mesh;batch-scheduler.k8s.all.conf— параметры для системы оркестрации контейнерами Kubernetes;batch-scheduler.ott-sidecar.all.conf— параметры для интеграции с OTT;batch-scheduler.secman.all.conf— параметры для интеграции с SecMan;scheduler-dispatcher.conf— параметры для микросервиса scheduler-dispatcher;scheduler-dispatcher.istio.conf— параметры Istio для микросервиса scheduler-dispatcher;scheduler-gc.conf— параметры для микросервиса gc;scheduler-gc.istio.conf— параметры Istio для микросервиса gc;scheduler-journal-applier.conf— параметры для микросервиса journal-applier;scheduler-journal-applier.istio.conf— параметры Istio для микросервиса journal-applier;scheduler-server.conf— параметры для микросервиса server;scheduler-server.istio.conf— параметры Istio для микросервиса server.
В конфигурационных файлах к каждому параметру приведено описание с его назначением. Конфигурационные файлы расположены по пути: package/conf/config/parameters/*.conf.
Изменение клиентских настроек в файле logback.xml#
Если необходимо изменить клиентские настройки в файле logback.xml:
В архиве
binaries-schd-<version>-distrib.zipпо пути:/package/data/logbackскопируйте файлlogback.xmlдля каждого микросервиса (scheduler-dispatcher, scheduler-gc, scheduler-journal-applier, scheduler-server).Переместите файлы в репозиторий
batch_common_main/browse/ххх/ansible/files/logback.При необходимости внесите и сохраните изменения в файле
logback.xml.
При запуске автоматизированной установки с помощью Deploy Tools файл logback.xml автоматически загружается из репозитория в файл, например, configmap-scheduler-dispatcher.yaml. Наименование файла определяется для каждого микросервиса соответственно.
Изменение клиентских настроек в файле configmap-fluentbit.yaml#
Если необходимо изменить клиентские настройки в файле configmap-fluentbit.yaml:
В архиве
binaries-schd-<version>-distrib.zipпо пути:/package/data/fluent-bitскопируйте файлыfluent-bit.confиparsers.conf.Переместите файлы в репозиторий
batch_common_main/browse/ххх/ansible/files/fluent-bit.При необходимости внесите и сохраните изменения в файлах
fluent-bit.confиparsers.conf.
При запуске автоматизированной установки с помощью Deploy Tools файлы fluent-bit.conf и parsers.conf автоматически загружаются из репозитория в файл configmap-fluentbit.yaml.
Управление ACL-фильтром#
Для автоматической подстановки заголовков CN:
В конфигурационном файле
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
В файле
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:
В системе оркестрации контейнерами создайте манифест ServiceAccount, задав параметр
name—deploytoken.Во вкладке Role Bindings нажмите Create Binding и на открывшейся странице:
в поле name введите —
deploytokenrb;в поле namespace из выпадающего списка выберите необходимый namespace;
в поле Role Name из выпадающего списка выберите
admin;в поле Subject выберите ServiceAccount;
в поле Subject Namespace из выпадающего списка выберите необходимый namespace;
в поле Subject Name введите —
deploytoken;нажмите Create.
Перейдите во вкладку ServiceAccount и в блоке Secrets выберите токен.
На открывшейся странице из поля token скопируйте значение токена.
Перейдите в Jenkins Job Deploy Tools и откройте вкладку Credentials.
Добавьте учетные данные, нажав кнопку Add Credentials.
В открывшейся форме заполните поля:
Kind —
Secret text;Secret — скопированный токен из системы оркестрации контейнерами;
ID — вставьте наименование токена
deploytoken-<namespace>.
Перейдите на страницу Pipeline DEPLOY, нажав кнопку Собрать с параметрами.
На открывшейся странице в поле CONFIG_DIR из выпадающего списка выберите созданную вами директорию блока, например,
scheduler.В поле SUBSYSTEM из выпадающего списка выберите — BATCH_SCHEDULER.
В поле DISTRIB_VERSION из выпадающего списка выберите необходимую версию дистрибутива.
В поле выбора кластера выберите VDC01.
В таблице выберите следующие playbooks:
DB_UPDATE — «запуск liquibase скриптов»;
OPENSHIFT_INGRESS_EGRESS_DEPLOY — «деплой Ingress/Egress в OpenShift»;
MIGRATION_FP_CONF — «миграция конфигурационных файлов ФП»;
OPENSHIFT_DEPLOY — «установка в OpenShift».
Нажмите кнопку Собрать.