Kubernetes
Раздел описывает развёртывание платформы Citeck в среде Kubernetes: управление ресурсами подов и контейнеров, настройку Helm chart, а также генерацию ключей шифрования.
Менеджмент ресурсов подов и контейнеров
Ниже описаны минимальные требования к ресурсам MEM/CPU для стабильной работы микросервисов в сочетании с XMX/XMS параметрами java. На данной конфигурации было произведено нагрузочное тестирование в 1000 одновременно работающих пользователей, длительностью в 1 час.
Состав сценария и распределение нагрузки:
логин в систему и просмотр главной страницы с загрузкой меню, дашборда, информации о пользователе (20%);
просмотр журнала контрактов (30%);
переход на страницу просмотра контракта с загрузкой всех виджетов: информация о контракте, действия, задачи, комментарии, связи, история версий и т.д. (30%);
просмотр журнала активных задач (30%);
создание документов (20%);
старт процессов по документам (10%);
выполнение задач по процессу (50%).
В ходе нагрузки было сгенерировано 2 043 398 запросов, из них 1 запроса (0.00 %) завершилось с ошибками или превысило лимит времени выполнения.
Среднее время отклика - 6.88 миллисекунд.
Медиана - 6 миллисекунд.
90% всех запросов обрабатывались менее чем за 16 миллисекунд.
95% всех запросов обрабатывались менее чем за 25 миллисекунд.
99% всех запросов обрабатывались менее чем за 47 миллисекунд.
Ecos Registry
EcosRegistryApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 300m
memory: 1Gi
Ecos Model
EcosModelApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 2
memory: 1Gi
requests:
cpu: 2
memory: 1Gi
Ecos Gateway
EcosGatewayApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 2
memory: 1Gi
requests:
cpu: 2
memory: 1Gi
Ecos Apps
EcosAppsApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Process
EcosProcessApp:
environments:
javaOpts: "-Xmx2G -Xms2G"
resources: |
limits:
cpu: 1
memory: 3548Mi
requests:
cpu: 1
memory: 3548Mi
Ecos Uiserv
EcosUiservApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 1
memory: 1Gi
Ecos History
EcosHistoryApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Integrations
EcosIntegrationsApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Notifications
EcosNotificationsApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Transformations
EcosTransformationsApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Ecom
EcosEcomApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Service Desk
EcosServiceDeskApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Edi
EcosEdiApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Content
EcosContentApp:
environments:
javaOpts: "-Xmx256m -Xms256m"
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
Ecos Proxy
EcosProxyApp:
resources: |
limits:
cpu: 1
memory: 512Mi
requests:
cpu: 300m
memory: 256Mi
Microservices Posgtresql
EcosMicroservicesPostgresqlApp:
resources: |
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 2
memory: 2Gi
Mongo DB
MongoDBApp:
resources: |
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 300m
memory: 512Mi
Zookeeper
ZookeeperApp:
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 500m
memory: 1Gi
RabbitMQ
RabbitmqApp:
resources: |
limits:
cpu: 1
memory: 1Gi
requests:m
cpu: 500
memory: 1Gi
Ecos Indentity
EcosIdentityApp:
resources: |
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 300m
memory: 1Gi
Onlyoffice
OnlyofficeApp:
resources: |
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 100m
memory: 2Gi
Параметры конфигурации Helm chart
Примечание
Доступно только в Enterprise версии.
Раздел описывает параметры Helm chart, используемые для тонкой настройки развёртывания платформы Citeck в Kubernetes-кластере. Параметры позволяют управлять ресурсами, репликами, переменными окружения и другими характеристиками микросервисов.
Описание параметров представлено в примере Helm chart.
Общее описание
Примечание
<mSRV> заменяется на имя микросервиса, например EcosApp, RabbitmqApp и т.д.
Общие параметры
.Values.FQDN: Доменное имя платформы.Values.TenantID: Уникальный идентификатор тенанта.Values.clusterDomain: Домен кластера Kubernetes
Управление микросервисами
.Values.<mSRV>.enabled: Включение/отключение микросервисов.Values.<mSRV>.clearData: Очистка данных при старте контейнера.Values.<mSRV>.type: Тип ingress.Values.<mSRV>.apiVersion: Версия API ingress.Values.<mSRV>.secretName: Используемый TLS сертификат.Values.<mSRV>.albIngress.enabled: Использовать ALB ingress контроллер
Контейнеры и образы
.Values.<mSRV>.image.registry: Реестр образов.Values.<mSRV>.image.repository: Репозиторий образов.Values.<mSRV>.image.tag: Тег образа.Values.<mSRV>.image.pullSecrets: Секреты для доступа к реестру.Values.<mSRV>.initContainers.image.*: Настройки init-контейнеров
Vault и секреты
.Values.<mSRV>.vault.enabled: Включение Vault.Values.<mSRV>.vault.*: Переменные окружения и пароли для сервисов (MongoDB, PostgreSQL, Keycloak и др.)
Переменные окружения
.Values.<mSRV>.environments.username/password: Логин/пароль администратора.Values.<mSRV>.environments.javaOpts: Java-опции старта микросервисов.Values.<mSRV>.environments.*: Специфичные переменные (Solr, Alfresco, Flowable и др.)
Хранилища и PVC
.Values.<mSRV>.persistence.enabled: Включение persistent-хранилища.Values.<mSRV>.persistence.size: Размер PVC.Values.<mSRV>.persistence.storageClass: StorageClass PVC.Values.<mSRV>.persistence.accessModes: Режим доступа PVC.Values.<mSRV>.persistence.existingClaim: Использовать существующий PVC.Values.<mSRV>.persistence.backup*: Параметры PVC для бэкапов
Метрики и мониторинг
.Values.<mSRV>.metrics.enabled: Включение экспорта метрик.Values.<mSRV>.metrics.config: Конфигурация jmx-exporter.Values.<mSRV>.metrics.serviceMonitor.*: Настройки ServiceMonitor.Values.<mSRV>.metrics.service.ports.*: Порты метрик.Values.<mSRV>.metrics.containerSecurityContext.*: Контекст безопасности контейнера.Values.<mSRV>.metrics.startupProbe.*: Startup Probe.Values.<mSRV>.metrics.readinessProbe.*: Readiness Probe.Values.<mSRV>.metrics.livenessProbe.*: Liveness Probe
Ресурсы и ограничения
.Values.<mSRV>.resources: CPU и память для микросервисов.Values.<mSRV>.tolerations: Tolerations для Pods
Прочее
.Values.<mSRV>.webapp.properties.webUrl: URL для Spring-приложений.Values.<mSRV>.x509.certs: Сертификаты (неясное назначение)
Генерация уникального ключа шифрования
При развертывании нового сервера необходимо каждый раз генерировать уникальный ключ шифрования.
Используйте следующий код для генерации AES-ключа:
fun main() {
val keyGen = KeyGenerator.getInstance("AES")
keyGen.init(128) // AES key size 128
val secretKey = keyGen.generateKey()
val base64Key = Base64.getEncoder().encodeToString(secretKey.encoded)
println("Base64 Key: $base64Key")
}
Убедитесь, что ключ по умолчанию заменен на новый. Если этого не сделать, система выдаст предупреждение в логах.