Настройки конфигурации#

Конфигурационный ресурс - основной источник информации о системе для gs-ctk.

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

Пример конфигурационного ресурса#

Совет

Обратите внимание, что некоторые опции (admin_secret, send_metrics_to_external_system, external_prometheus_endpoint: external.prometheus.domain, external_loki_endpoint) повторяются в настройках группы и книг ресурсов. В таких случаях вы можете установить только одну настройку, только другую или обе - опция из книги ресурсов переопределяет более общую настройку для группы ресурсов.

Указывать опции для которых указано значение по умолчанию необязательно.

apiVersion: global-system.ru/v1
kind: GlobalConfiguration
metadata:
  name: gs-ctk-config
spec:
  # type - пока только advanced
  type: advanced
  # resgroups - список групп ресурсов
  resgroups:
    # name - название группы ресурсов
  - name: gs-cluster-1
    # namespace - название пространства имен, в котором необходимо развернуть группу (если развернуто несколько операторов, по умолчанию - пусто)
    namespace: gs-ctk
    # enabled - включена ли группа ресурсов (по умолчанию - true)
    enabled: false
    # appkit - читайте ниже
    appkit:
      applib_sha1: 93c8a473ed8d0b6c20c30b952a8ebcebbad5af9c
      appsrc_sha1:
      globalserver_sha1: d70488cd57b20794be30779dded0c0a86781eb02
      profile_sha1: 15bd21a523102fb41d32b87ffdac8880f3e37427
      globalserver_instance: '2'
      path: appkits/v1
      state: started
    # database_schema_version - читайте ниже
    database_schema_version: '1'
    # groupkit - путь к комплекту группы (по умолчанию - пусто)
    groupkit: groupkits/v1
    # timezone - часовой пояс (по умолчанию - Europe/Moscow)
    timezone: Europe/Moscow
    # database_url - путь к базе данных
    database_url: jdbc:postgresql://host:5432/database
    # database_alias - имя БД в системе
    database_alias: ssng
    # database_secret - секрет с логином и паролем к БД
    database_secret: sng-db
    # search_domains - поисковые домены (по умолчанию - пусто)
    search_domains:
    - mycompany.ru
    # gossiprouters - список хостов/портов gossiprouter (по умолчанию - пусто)
    gossiprouters:
    - host: gr.mycompany.ru
      port: 1100
    # admin_secret - имя единого секрета администратора (по умолчанию - пусто)
    admin_secret:
    # java_version - версия java (по умолчанию - '8')
    java_version: '8'
    # appvol - прикладное хранилище
    appvol:
      type: nfs
      server: nfs.mycompany.ru
      path: /export
    # extra_vols - дополнительные точки монтирования (по умолчанию - пусто)
    extra_vols:
    - name: mp1
      path: mnt/mp1
      volume:
        type: nfs
        server: nfs.mycompany.ru
        path: /export2
    # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
    debug_mode: true
    # rabbitmq - настройки RabbitMQ
    # по умолчанию - берутся из настроек книги ресурсов rabbitmq, если такой нет - RabbitMQ отключен
    # поставьте `rabbitmq: false`, чтобы выключить
    rabbitmq:
      enabled: true # значение по-умолчанию
      host: rabbitmq.mycompany.com
      port: 5672 # порт по-умолчанию
      vhost: globalerp
      secret: rabbitmq-secret
    # точки выгрузки внутренней Grafana, оставляйте пустым, если в целях отладки не требуется другое
    #prometheus_endpoint:
    #loki_endpoint:
    #tempo_endpoint:

    # send_metrics_to_external_system - отправлять данные во внешнюю систему (по умолчанию - false)
    send_metrics_to_external_system: true
    # external_prometheus_endpoint - внешняя точка выгрузки данных Prometheus
    external_prometheus_endpoint: external.prometheus.domain:9090
    # external_loki_endpoint - внешняя точка выгрузки данных Loki
    external_loki_endpoint: external.loki.domain:3100

    # название контура (по умолчанию - название пространства имен)
    project_name: gs-ctk
    # селектор нод, как в Kubernetes
    #node_selector: {}

    # книги ресурсов
    resbooks:

      # global_scheduler - планировщик задач
    - type: global_scheduler
      # name - имя книги
      name: global-scheduler
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # java_xmx - предельный объем кучи виртуальной машины Java (по умолчанию - 800M)
      java_xmx: 800M
      # send_metrics_to_external_system - отправлять данные во внешнюю систему (по умолчанию - false)
      send_metrics_to_external_system: false
      # external_prometheus_endpoint - внешняя точка выгрузки данных Prometheus
      external_prometheus_endpoint: external.prometheus.domain:9090
      # external_loki_endpoint - внешняя точка выгрузки данных Loki
      external_loki_endpoint: external.loki.domain:3100
      # resources - запросы и лимиты ресурсов контейнера с планировщиком (указаны значения по умолчанию)
      resources:
        requests:
          memory: 1G
          cpu: '1'
        limits:
          memory: 1G
          cpu: '1'
      # agent_resources - запросы и лимиты ресурсов контейнера с агентом сбора телеметрии (указаны значения по умолчанию)
      agent_resources:
        requests:
          memory: 250M
          cpu: '1'
        limits:
          memory: 500M
          cpu: '1'
      # scheduler_token_secret - секрет с токеном шедулера
      scheduler_token_secret: scheduler_token

      # global_server_excl - эксклюзивный под Global Server
    - type: global_server_excl
      # name - имя книги
      name: global-server-excl
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # java_xmx - предельный объем кучи виртуальной машины Java (по умолчанию - 3500M)
      java_xmx: 3500M
      # send_metrics_to_external_system - отправлять данные во внешнюю систему (по умолчанию - false)
      send_metrics_to_external_system: false
      # external_prometheus_endpoint - внешняя точка выгрузки данных Prometheus
      external_prometheus_endpoint: external.prometheus.domain:9090
      # external_loki_endpoint - внешняя точка выгрузки данных Loki
      external_loki_endpoint: external.loki.domain:3100
      # resources - запросы и лимиты ресурсов контейнера с сервером приложений (указаны значения по умолчанию)
      resources:
        requests:
          memory: 4G
          cpu: '2'
        limits:
          memory: 4G
          cpu: '2'
      # agent_resources - запросы и лимиты ресурсов контейнера с агентом сбора телеметрии (указаны значения по умолчанию)
      agent_resources:
        requests:
          memory: 250M
          cpu: '1'
        limits:
          memory: 500M
          cpu: '1'
      # admin_secret - имя секрета администратора
      admin_secret: gs-admin
      # service - способ публикации книги ресурсов (по умолчанию - пусто)
      # global_server_excl поддерживает публикацию только через IP
      service:
        type: ip
        external_ip: 10.20.0.5

      # global_server_share - масштабируемые поды Global Server
    - type: global_server_share
      # name - имя книги
      name: global-server-share
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # java_xmx - предельный объем кучи виртуальной машины Java (по умолчанию - 3500M)
      java_xmx: 3500M
      # send_metrics_to_external_system - отправлять данные во внешнюю систему (по умолчанию - false)
      send_metrics_to_external_system: false
      # external_prometheus_endpoint - внешняя точка выгрузки данных Prometheus
      external_prometheus_endpoint: external.prometheus.domain:9090
      # external_loki_endpoint - внешняя точка выгрузки данных Loki
      external_loki_endpoint: external.loki.domain:3100
      # resources - запросы и лимиты ресурсов контейнера с сервером приложений (указаны значения по умолчанию)
      resources:
        requests:
          memory: 4G
          cpu: '2'
        limits:
          memory: 4G
          cpu: '2'
      # agent_resources - запросы и лимиты ресурсов контейнера с агентом сбора телеметрии (указаны значения по умолчанию)
      agent_resources:
        requests:
          memory: 250M
          cpu: '1'
        limits:
          memory: 500M
          cpu: '1'
      # admin_secret - имя секрета администратора
      admin_secret: gs-admin
      # replicas - количество реплик
      replicas: 1
      
      # grafana - под со стеком мониторинга
    - type: grafana
      # name - имя книги
      name: grafana
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # service - способ публикации книги ресурсов (по умолчанию - пусто)
      # grafana поддерживает публикацию через IP и через Ingress (см. haproxy)
      service:
        type: ip
        external_ip: 10.20.0.6
      # resources - запросы и лимиты ресурсов контейнера (указаны значения по умолчанию)
      resources:
        requests:
          memory: 500M
          cpu: '1'
        limits:
          memory: 1Gi
          cpu: '2'
      # storage_class - класс хранилища для постоянного тома Grafana
      storage_class: local-path
      # storage_size - запрашиваемое пространство (по умолчанию - 1Gi)
      storage_size: 4Gi
      # admin_secret - имя секрета администратора
      admin_secret: grafana-secret
      
      # haproxy - под с балансировщиком нагрузки
    - type: haproxy
      # name - имя книги
      name: haproxy
      name: grafana
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # service - способ публикации книги ресурсов (по умолчанию - пусто)
      # haproxy поддерживает публикацию через IP (см. grafana) и через Ingress
      service:
        type: ingress
        ingress_class: nginx
        host: globalerp.mycompany.ru # '' - для публикации на всех хостах
        annotations: {} # дополнительные аннотации
      # resources - запросы и лимиты ресурсов контейнера с балансировщиком (указаны значения по умолчанию)
      resources:
        requests:
          memory: 500M
          cpu: '1'
        limits:
          memory: 1G
          cpu: '2'
      # agent_resources - запросы и лимиты ресурсов контейнера с агентом сбора телеметрии (указаны значения по умолчанию)
      agent_resources:
        requests:
          memory: 250M
          cpu: '1'
        limits:
          memory: 500M
          cpu: '1'
      # statistics_secret - секрет для сбора статистики
      statistics_secret: haproxy-secret
      # tls_secret - секрет для ключа и сертификата TLS (по умолчанию - пусто, TLS отключен)
      tls_secret: ''
      # replicas - количество реплики при работе через Ingress (по умолчанию - 1)
      replicas: 1
      # send_metrics_to_external_system - отправлять данные во внешнюю систему (по умолчанию - false)
      send_metrics_to_external_system: false
      # external_loki_endpoint - внешняя точка выгрузки данных Loki
      external_loki_endpoint: external.loki.domain:3100

      # rabbitmq - под с rabbitmq
    - type: rabbitmq
      # name - имя книги
      name: rabbitmq
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # service - способ публикации консоли администратора книги ресурсов (по умолчанию - пусто)
      # rabbitmq поддерживает публикацию через IP (см. grafana) и через Ingress (см. haproxy)
      service:
      # resources - запросы и лимиты ресурсов контейнера (указаны значения по умолчанию)
      resources:
        requests:
          memory: 2Gi
          cpu: '1'
        limits:
          memory: 4Gi
          cpu: '2'
      # apmq_secret - секрет для соединения между RabbitMQ и GlobalERP
      apmq_secret: apmq-secret
      # admin_secret - секрет администратора (по умолчанию - пусто)
      admin_secret: rabbitmq-admin-secret
      # vhost - название виртуального хоста (по умолчанию - 'globalrabbitmq')
      vhost: globalrabbitmq
      # admin_port - порт консоли администратора (по умолчанию - 15672)
      admin_port: 15672

      # jgroups_dns - включает возможность общения серверов приложений между собой
    - type: jgroups_dns
      # name - имя книги
      name: jgroups-dns

      # gossiprouter - роутер сообщений между серверами приложений, более продвинутое, чем jgroups_dns решение
    - type: gossiprouter
      # name - имя книги
      name: gossiprouter
      # enabled - включена ли книга ресурсов (по умолчанию - true)
      enabled: true
      # debug_mode - выключить перезагрузку подов при ошибках (по умолчанию - false)
      debug_mode: true
      # селектор нод, как в Kubernetes
      #node_selector: {}
      # service - способ публикации книги ресурсов (по умолчанию - пусто)
      # gossiprouter поддерживает публикацию только через IP
      service:
        type: ip
        external_ip: 10.20.0.7
      # java_xmx - предельный объем кучи виртуальной машины Java (по умолчанию - 800M)
      java_xmx: 800M
      # send_metrics_to_external_system - отправлять данные во внешнюю систему (по умолчанию - false)
      send_metrics_to_external_system: false
      # external_prometheus_endpoint - внешняя точка выгрузки данных Prometheus
      external_prometheus_endpoint: external.prometheus.domain:9090
      # external_loki_endpoint - внешняя точка выгрузки данных Loki
      external_loki_endpoint: external.loki.domain:3100
      # resources - запросы и лимиты ресурсов контейнера с планировщиком (указаны значения по умолчанию)
      resources:
        requests:
          memory: 1G
          cpu: '1'
        limits:
          memory: 1G
          cpu: '1'
      # agent_resources - запросы и лимиты ресурсов контейнера с агентом сбора телеметрии (указаны значения по умолчанию)
      agent_resources:
        requests:
          memory: 250M
          cpu: '1'
        limits:
          memory: 500M
          cpu: '1'
      # gossip_router_port - порт GossipRouter (по умолчанию - 12001)
      gossip_router_port: 12001

Комплект группы (appkit) и версия схемы#

Конфигурации группы ресурсов содержит информацию о комплекте приложения и целевой версии схемы базы данных:

  • appkit - Описание текущего комплекта приложений. При изменении настроек комплекта приложений, после применения конфигурации сервера приложений будут автоматически перезапущены с новой версией компекта приложений.

    • applib_sha1, appsrc_sha1, globalserver_sha1 и profile_sha1 - хеш-суммы соответствующих компонентов appkit. Из всех только appsrc_sha1 может не указываться.

    • globalserver_instance - версия сервера приложений, желательно обновлять при каждом изменении appkit.

    • path - путь к комплекту на системном NFS-хранилище.

    • state - состояние комплекта приложений. Возможные значения:

      • started - запущен, сервера принимают пользователей

      • stopped - остановлен, сервера отключены

      • drained - осушен, доступ через балансировщик закрыт, непривилегированные пользователи отключены

  • database_schema_version - версия схемы БД. При изменении целевой версии схемы базы данных - автоматически запущено обновление БД. Информация о текущей версии хранится в ресурсе, в поле status.

Обновление без nscli#

Может показаться, что nscli все еще требуется для манипуляции с комплектами группы и версиями схемы, но это не совсем так. Вот инструкция, как сделать без nscli то же, что и эти команды nscli:

./appkit.sh push --namespace gs-ctk-ns --source workspace/appkit --destination appkit/v1 # загрузка комплекта приложений на NFS (требует доступа к кластеру)
./appkit.sh switch_local --config-path ./new_config.yaml --resgroup gs-cluster-1 --local-appkit workspace/appkit --remote-appkit appkit/v1 # переключение комплекта приложений
./appkit.sh upgrade --config-path ./new_config.yaml --resgroup gs-cluster-1 # обновление счетчика версии БД
  1. Сформировать комплект приложения в виде трех zip-архивов:

    • globalserver.zip

    • applip.zip

    • profile.zip

    Внимание

    Обратите внимание, что архивы содержат в себе содержимое соответствующих папок комплекта приложений. Так applip.zip содержит в себе непосредственно модули, а не папку applib с модулями.

  2. Рядом с каждым из архивов должен лежать файл c хэш-суммой архива, полученной по алгоритму команды sha1sum из GNU Core Utilities. Название файла должно соответствовать названию архива и иметь суффикс .sha1.

    Так, например, в комплекте приложений должен находиться архив applip.zip и рядом с ним файл applip.zip.sha1 с текстом 4f3b71ee067f146d68a8795b3bde1e5c0f8956d7.

    Вы можете сгенерировать эти файлы при помощи следующего shell-скрипта:

    for archive in appkit/*.zip
    do
     sha1sum < "$archive" | tr -d ' -' | tr -d '\n' > "$archive.sha1"
    done
    
  3. Загрузите архивы и хеш-суммы на системное NFS-хранилище.

  4. Замените в конфигурации поля с хэш-суммами (applib_sha1, appsrc_sha1, globalserver_sha1 и profile_sha1) и путем к комплекту (path) на новые. Обновите значения счетчиков globalserver_instance и database_schema_version.