# Настройки конфигурации Конфигурационный ресурс - основной источник информации о системе для gs-ctk. Документация по доступным настройкам будет формироваться автоматически позже. Пока для ознакомления со всеми опциями предлагаем вам пример максимальной конфигурации с кратким описанием всех настроек. ## Пример конфигурационного ресурса ```{tip} Обратите внимание, что некоторые опции (admin_secret, send_metrics_to_external_system, external_prometheus_endpoint: external.prometheus.domain, external_loki_endpoint) повторяются в настройках группы и книг ресурсов. В таких случаях вы можете установить только одну настройку, только другую или обе - опция из книги ресурсов переопределяет более общую настройку для группы ресурсов. ``` Указывать опции для которых указано значение по умолчанию необязательно. ```yaml 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: ```bash ./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` ```{attention} Обратите внимание, что архивы содержат в себе *содержимое* соответствующих папок комплекта приложений. Так `applip.zip` содержит в себе непосредственно модули, а не папку `applib` с модулями. ``` 2. Рядом с каждым из архивов должен лежать файл c хэш-суммой архива, полученной по алгоритму команды `sha1sum` из GNU Core Utilities. Название файла должно соответствовать названию архива и иметь суффикс `.sha1`. Так, например, в комплекте приложений должен находиться архив `applip.zip` и рядом с ним файл `applip.zip.sha1` с текстом `4f3b71ee067f146d68a8795b3bde1e5c0f8956d7`. Вы можете сгенерировать эти файлы при помощи следующего shell-скрипта: ```sh 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`.