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: Сертификаты (неясное назначение)

Генерация уникального ключа шифрования

  1. При развертывании нового сервера необходимо каждый раз генерировать уникальный ключ шифрования.

  2. Используйте следующий код для генерации 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")

}
  1. Убедитесь, что ключ по умолчанию заменен на новый. Если этого не сделать, система выдаст предупреждение в логах.

Подробнее о шифровании секретов