Представленный шаблон позволяет развернуть сервис eltex-bob в кластере OpenShift.
Подготовка к установке:
- должен быть развёрнут и запущен кластер OpenShift версии не ниже 3.11
- должен быть настроен механизм создания PersistantVolumeClaim - GlusterFS, Ceph RBD, iSCSI, etc.
- должен быть доступ по ssh к ноде кластера с ролью master
Порядок установки:
- в случае использования Atomic Registry предварительно настроить соответствующий ImageStream
- сохранить приложенный шаблон в файл eltex-bob-template.yaml на ноде кластера с ролью master
применить шаблон при помощи команды
oc apply -f eltex-bob-template.yaml
- находясь в Application Console, развернуть приложение из шаблона, указав следующие параметры:
- Name of service - имя приложения в OpenShift
- Image Name - имя docker-образа или путь к нему
- Database connection string: строка подключения к серверу MySQL в формате jdbc:mysql://[mysql_host][/database][?properties]
- Database login: логин для подключения к БД
- Database password: пароль для подключения к БД
- AP search domain mask - маска для поиска домена
- если для работы сервиса необходим словарь ВСП, то дополнительно проделать следующие шаги:
- создать PersistantVolumeClaim, указав используемый в кластере StorageClass
- в созданном Volume необходимо создать каталог eltex-bob, в который необходимо поместить файл словаря vsp.xlsx
- к созданному Deployment необходимо добавить Storage, указав следующие параметры:
- Mount Path - точка монтирования внутри контейнера
- Subpath - пусть к файлу на подключаемом Volume
- Volume Name - уникальное имя для идентификации этого Volume
- в результате OpenShift запустит новый экземпляр приложения с новой конфигурацией
- проверить работу сервиса в соответствии с его документацией
eltex-bob-template.yaml
kind: Template apiVersion: v1 metadata: name: eltex-bob-template annotations: description: "Eltex-bob application template" openshift.io/display-name: "The Eltex BOB" openshift.io/provider-display-name: "Eltex" iconClass: "icon-openjdk" objects: - apiVersion: v1 kind: ConfigMap metadata: name: ${INSTANCE_NAME}-config data: application.properties: |- spring.application.name=bob spring.datasource.url=${DB_URL} spring.datasource.hikari.maximum-pool-size=1 spring.datasource.username=${DB_LOGIN} spring.datasource.password=${DB_PASS} domain_search.mask=${AP_SEARCH_MASK} domain_search.regex=^root/Ap/(.*)$ domain_search.replacement=$1 vsp_search.regex=/(\\d{2,}[-_]\\d{2,})[^/]*$ log.include.stacktrace=false mac.splitter=":" auth.enabled=false auth.username=user auth.password=password excel.config.file=/etc/eltex-bob/excel_config.yaml server.port=9190 excel_config.yaml: |- vspExcelFile: /etc/eltex-bob/vsp.xlsx vspSheetName: Операторы type: NUMBER columns: vsp: 5 bank: 2 region: 12 office: 3 address: 9 city: 8 log4j2.xml: |- <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Properties> <Property name="maxSize" value="5MB"/> <Property name="maxCount" value="7"/> <Property name="logDir" value="/var/log/eltex-bob"/> <Property name="defaultPattern" value="%d{ISO8601} [%t] %-5p %logger{1} %C{1}.%M(line:%L). %m%n"/> <Property name="gelfHost" value="udp:lab3-test.eltex.loc"/> <Property name="gelfPort" value="12201"/> <Property name="gelfLevel" value="OFF"/> <Property name="filenamePrefix" value="eltex-bob"/> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout> <Pattern>${defaultPattern}</Pattern> </PatternLayout> </Console> <Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="${filenamePrefix}" extractStackTrace="true" originHost="%host{fqdn}" maximumMessageSize="8192" > <Field name="thread" pattern="%t" /> <Field name="level" pattern="%level" /> <Field name="severity" pattern="%-5level" /> <Field name="logger" pattern="%logger{1}" /> <Field name="location" pattern="%C{1}.%M(line:%L)" /> </Gelf> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="STDOUT"/> <AppenderRef ref="Gelf" level="${gelfLevel}"/> </Root> </Loggers> </Configuration> - apiVersion: v1 kind: DeploymentConfig metadata: labels: app: ${INSTANCE_NAME} name: ${INSTANCE_NAME} spec: replicas: 1 selector: app: ${INSTANCE_NAME} strategy: type: "Rolling" template: metadata: labels: app: ${INSTANCE_NAME} spec: containers: - name: ${INSTANCE_NAME}-container image: ${IMAGE_NAME} volumeMounts: - name: config-volume mountPath: /etc/eltex-bob/application.properties subPath: application.properties - name: config-volume mountPath: /etc/eltex-bob/excel_config.yaml subPath: excel_config.yaml - name: config-volume mountPath: /etc/eltex-bob/log4j2.xml subPath: log4j2.xml livenessProbe: httpGet: path: /actuator/health port: 9190 scheme: HTTP initialDelaySeconds: 30 readinessProbe: httpGet: path: /GetAPList port: 9190 scheme: HTTP initialDelaySeconds: 30 volumes: - name: config-volume configMap: name: ${INSTANCE_NAME}-config items: - key: application.properties path: application.properties - key: excel_config.yaml path: excel_config.yaml - key: log4j2.xml path: log4j2.xml triggers: - type: "ConfigChange" - apiVersion: v1 kind: Service metadata: name: ${INSTANCE_NAME}-service spec: ports: - port: 9190 protocol: TCP selector: app: ${INSTANCE_NAME} - apiVersion: v1 kind: Route metadata: name: ${INSTANCE_NAME}-route spec: to: kind: Service name: ${INSTANCE_NAME}-service parameters: - name: INSTANCE_NAME displayName: Name of service description: Name of service in openshift required: true value: eltex-bob - name: IMAGE_NAME displayName: Image name description: Image name or pull spec required: true value: hub.eltex-co.ru/softwlc/eltex-bob:latest - name: DB_URL displayName: Database connection string description: Database for eltex-bob required: true value: jdbc:mysql://lab3.eltex.loc:3306/eltex_ems?useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC - name: DB_LOGIN displayName: Database login description: Database login required: true value: root - name: DB_PASS displayName: Database password description: Database password required: true value: root - name: AP_SEARCH_MASK displayName: AP search domain mask description: AP search domain mask required: true value: "[a-zA-Z0-9.-_]*.ap.root" message: "... The Eltex Bob with name ${INSTANCE_NAME} is starting ..."