Руководство по установке#

В руководстве приведены инструкции по установке компонента «Сбор и анализ метрик» (GATM) продукта Platform V Synapse Service Mesh (SSM).

Термины и определения#

Термин/аббревиатура

Определение

Платформа

Платформа оркестрации приложений со средствами автоматизации и управления на основе политик, например, Kubernetes

Istio SE

Настраиваемая сервисная сеть с открытым исходным кодом, служащая для обеспечения безопасности контейнеров в кластере Kubernetes

Pod / «kind: Pod»

Набор контейнеров внутри узла кластера Kubernetes

Statefullset / «kind: Statefullset»

Статистический набор инструкций для запуска приложения в Kubernetes

Deployment / «kind: Deployment»

Набор инструкций для запуска приложения в Kubernetes

Граничный прокси / IGEG / egressgateway

Компонент Граничный прокси продукта Platform V Synapse Service Mesh

Контрольная панель

Проект, где запущены управляющие приложения Synapse Service Mesh (компонент POLM)

GATM

Программный компонент «Сбор и анализ метрик» (GATM) из состава программного продукта Platform V Synapse Service Mesh (SSM)

SSM

Platform V Synapse Service Mesh — Программный продукт на базе Istio SE, обеспечивающий возможность создания сервисной сети поверх Платформенной в Kubernetes

RHSM

Red Hat Service Mesh — настраиваемая сервисная сеть, служащая для обеспечения безопасности контейнеров в кластере Kubernetes

KFGT / Kafka gateway

Компонент Kafka gateway продукта Platform V Enterprise integration (SEI)

Системные требования#

Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются клиентом при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.

Для установки модулей компонента GATM в среде контейнеризации Kubernetes – рекомендуется устанавливать приложения в рамках одного Pod. Приложения компонента не требуют дополнительной настройки окружения. Все настройки идут на уровне кластера в рамках среды контейнеризации.

Для возможности ручной установки, убедиться, что в рамках персонального компьютера установлен Helm версии не ниже 3.0.

Рекомендуемые настройки безопасности окружения приведены в разделе «Подготовка окружения» данного документа.

Системное программное обеспечение#

Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.

Категория ПО

Обязательность установки (да/нет)*

Наименование ПО

Версия

Продукт, функциональная совместимость с которым подтверждена**

Описание

Операционная система

Да

Alt Linux SP8

10

Рекомендовано. Правообладателем АО «СберТех» также рекомендована ОС – Platform V SberLinux OS Server, см. раздел «Платформенные зависимости»

ОС контейнеров для запуска модулей компонента

Среда контейнеризации

Да

Kubernetes

1.19 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации – Platform V DropApp, см. раздел «Платформенные зависимости»

Платформа контейнеризации для запуска компонентов сервиса

Red Hat OpenShift

4.6 и выше

Опционально

Средство контейнеризации

Да

Docker CE

19.03.14 и выше

Рекомендовано

Инструмент для автоматизации работы с контейнерами

Репозиторий (хранилище дистрибутива/исходного кода)

Да

Nexus-public

3.42.0

Рекомендовано

Репозиторий (хранилище дистрибутива/исходного кода)

Сервис централизованного хранения репозиториев исходного код

Да

GitLab CE

15.7 и выше

Рекомендовано

Сервис централизованного хранения репозиториев исходного код

Сервис интеграции и оркестрации микросервисов в облаке

Нет

Istio

1.6 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, основанный на Istio – Platform V Synapse Service Mesh, см. раздел «Платформенные зависимости»

Панель управления с открытым исходным кодом, служащая для обеспечения безопасности контейнеров в среде контейнеризации Kubernetes

Менеджер пакетов

Нет

Helm

3 и выше

Опционально

Диспетчер пакетов для Kubernetes, упрощающий для разработчиков и операторов упаковку, настройку и развертывание приложений и служб в кластерах Kubernetes

Иное

Нет

kubectl CLI

1.20.5 и выше

Опционально

Интерфейс командной строки для взаимодействия с кластером

Система хранения и распространения secrets

Нет

Hashicorp Vault

1.10 и выше

Опционально

Внешнее хранилище сертификатов и другой «чувствительной» информации

Система мониторинга (сбор и хранение метрик)

Нет

Prometheus

2.37 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения – Объединенный мониторинг Unimon Platform V Monitor, см. раздел «Платформенные зависимости»

Приложение-сервер, способное принимать метрики в собственном формате

Иное

Нет

Apache Kafka

3.0.0 и выше

Опционально

Хранение данных в формате плоского «JSON»

Примечание:

*

  • Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данной категории ПО)

  • Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои основные функции без установки данной категории ПО)

**

  • Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт

  • Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт

Платформенные зависимости#

Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:

Наименование продукта

Код

Версия продукта

Код и наименование компонента

Обязательность установки (да/нет)***

Описание

Аналог других производителей****

Platform V Synapse Service Mesh

SSM

4.1

POLM Управление политиками

Нет

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

Istio control plane 1.6 и выше

IGEG Граничный прокси

Нет

Сервис для обеспечения управляемого вызова интеграционных сервисов прикладной части

Istio proxy 1.6 и выше

SVPX Сервисный прокси

Нет

Прокси-сервер L7 и коммуникационная шина, разработанные для крупных современных сервис-ориентированных архитектур

istio proxy 1.6 и выше

SMDL DevOps инструменты Service Mesh

Нет

Сборка, установка и администрирование сервисов на Synapse

Platform V Synapse Enterprise Integration

SEI

3.7 и выше

KFGT kafka gateway

Нет

Шлюз для взаимодействия с kafka

Platform V SberLinux OS Server

SLO

8.7

INST Операционная система

Нет

ОС контейнеров для запуска модулей компонента

ОС Альт 8 СП

Platform V DropApp

K8S

1.1 и выше

K8SC K8S Core

Нет

Дистрибутив Kubernetes со встроенными механизмами мультитенантности и бессерверным исполнением

Kubernetes, Red Hat OpenShift Container Platform

Примечание:

***

  • Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента)

  • Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента)

**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».

Аппаратные требования#

Для установки компонента требуется следующая рекомендованная конфигурация аппаратного обеспечения:

Контейнер

CPU Request

Memory Request

CPU Limit

Memory Limit

Приложение Agent

500

500

500

500

Приложение Kafka adapter

1000

1000

500

500

Приложение Event exporter

500

500

500

500

Приложение Select

300

300

300

300

Приложение Insert

300

300

300

300

Приложение Storage

1000

2000

300

300

Приложение Alert

500

500

300

300

Состав дистрибутива#

Компонент GATM предоставляет 2 архива:

Элементы поставки:

  • gatm-bin

Элемент дистрибутива

Описание

./package/bh/gatm_agent

Приложение по сбору метрик

./package/bh/gatm_alert

Приложение по агрегации

./package/bh/gatm_insert

Приложение по добавлению метрик

./package/bh/gatm_select

Приложение по запросу метрик

./package/bh/gatm_storage

Приложение по хранению

./package/bh/prometheus-kafka-adapter

Приложение по передаче метрик в Kafka

./package/bh/gatm_event_exporter

Приложение по передаче метрик в Kafka

  • gatm-cfg

Конфигурации для установки.

Элемент дистрибутива

Описание

./conf/k8s/base/helm/*

Базовые конфигурации по установке компонента GATM

Выбор способа установки#

В зависимости от способа развертывания сервиса воспользуйтесь одной из инструкций:

  • целевая автоматизированная установка сервиса с использованием компонента SMDL, «ClientUnpacker»

  • опциональная ручная установка сервиса

Подготовка окружения#

Для выполнения установки программного компонента GATM из состава программного продукта Platform V Service Mesh (SSM) должны быть выполнены следующие условия:

  1. Развернут и настроен кластер «Kubernetes» версии 1.19 или выше в соответствии с требованиями, предъявляемыми к Платформе

  2. В кластере создан проект (namespace), в котором установлена контрольная панель (SSM)

  3. В проекте создана учетная запись с правами на get, list, watch ресурсов Pod и Namespace, при опциональной установке компонента event exporter необходимо также реализовать ролевую модель на get, list, watch к ресурсу «kind: Event»

  4. В проекте имеются свободные ресурсы по limits и requests не менее, чем зарезервировано в конфигурационных артефактах

  5. В проект добавлен секрет для загрузки Docker-образов из целевого Docker-репозитория

  6. В кластере создан проект (namespace), или используется ранее реализованный пользовательский проект, где будут реализованы компонент GATM, так же необходимо будет подключить указанный проект к контрольной панели (SSM)

  7. В рамках реализованного кластера созданы необходимые роли («kind: ClusterRole») и привязки к роли в рамках проекта («kind: RoleBinding»), в рамках ролевой модели компонента GATM

  8. Для установки через консоль на рабочем месте должен быть установлен клиент Kubectl (CLI - command-line interface)

1. Создать директорию установки#

  • Agent (директория - gatm_agent)

  • Storage (директория - gatm_storage)

  • Insert (директория - gatm_insert)

  • Select (директория - gatm_select)

  • Alert (директория - gatm_alert)

  • Event exporter (директория - gatm_event_exporter)

  • Kafka adapter (директория - gatm_kafka_adapter)

Пререквизиты:

  • Базовый образ для сборки docker image загружен в docker registry

Ручная установка:

Публикация базового образа:

  • Загрузить образ из файла командой docker load

  • Поставить тег полученному образу и залить в docker registry (командами docker tag, docker push)

В рамках примера пошагово будет описан процесс сборки образа и загрузка его в registry, аналогичные действия необходимо произвести по всем компонентам.

Шаг

Действия

Описание

Создать директорию для установки

На компьютере, с которого будет производиться установка, создайте папку, например, «synapse-gatm»

Разархивировать файлы

Распакуйте в созданную папку архив с конфигурационными артефактами компонента GATM

Вставить базовый образ в рамках файла Dockerfile

Пройти в каталог «docker/gatm_agent/Dockerfile», открыть и отредактировать файл, в рамках секции «FROM» подставить ссылку на базовый образ

Сохранить и закрыть файл

Авторизуйтесь в Docker Registry

Выполните команду, находясь в корне распакованного архива: «docker login $Registry»

$Registry — это host Docker реестра. Необходимо ввести логин с паролем для авторизации

Соберите Docker образ для установи приложения

Выполните команду, находясь в корне распакованного архива: «docker build . -f docker/gatm_agent/Dockerfile -t $registry_tag:$version»

$registry_tag — полный путь где будет реализован образ, $version — версия образа. Пример заполнения двух параметров «registry/dev/gatm-agent:0.0.1»

Загрузите полученный Docker образ в Registry

Выполните, команду находясь в корне распакованного архива: «docker push $registry_tag:$version»

Сохраните полученный sha256 образа

При выполнении шага "Загрузите полученный Docker образ в Registry" в терминале будет информация о sha256 загруженного образа, пример вывода терминала "$version: digest: sha256:97ded057*** size: 2215". Необходимо скопировать sha256 (пример «sha256:97ded057***»)

Сохраните указанное значение в переменную $sha256

Тем самым получаем image приложений - «IMAGE_$component=$registry_tag@$sha256»

Автоматическая установка:

Для сборки образа рекомендуем использовать инструмент автоматической сборки образа, компонента SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будет собранный образ приложений.

Необходимо обновить параметр из json "teamProducts.json" (при реализации автоматической установки также необходимо провести актуализацию используемых образов по интеграциям).

        {
          "name": "Сбор и анализ метрик",
          "code": "GATM",
          "user": "****",
          "parts": [
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_agent}",
                  "deploymentUnit": "gatm_agent"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"      # регулярное выражение для поиска в конфигурациях развертывания места с указанием image компонента
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_kafka_adapter}",
                  "deploymentUnit": "gatm_kafka_adapter"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_alert}",
                  "deploymentUnit": "gatm_alert"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_insert}",
                  "deploymentUnit": "gatm_insert"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_select}",
                  "deploymentUnit": "gatm_select"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_storage}",
                  "deploymentUnit": "gatm_storage"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.19
                  "version": "${версия компонента gatm_event_exporter}",
                  "deploymentUnit": "gatm_event_exporter"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}{}/{}@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "artifactId": "gatm-cfg",
              "imageLinkMapping": [
                {
                  "regex": "\\{\\{ \\.Values\\.egress\\.imageose \\}\\}",
                  "replace": "registry.redhat.io/openshift-service-mesh/proxyv2-rhel8@sha256:03ba7a4bed6122c842ac0aeca626be7e6f3ec2106acee2ffda017c8cbf36e41b"  # image IGEG для Istio 1.6
                },
                {
                  "regex": "\\{\\{ \\.Values\\.egress\\.imagese \\}\\}",
                  "replace": "sbc.space/ci90000017_synapse/ci90000017_synapse/polm/proxyv2@sha256:49e9527fe5e44711c57eab1c995803c76ba5cf1c0b4fb028235b34b6070efbc0" # image IGEG для Istio 1.12
                },
                {
                  "regex": "\\{\\{ \\.Values\\.egress\\.imagese117 \\}\\}",
                  "replace": "sbc.space/ci90000017_synapse/ci90000017_synapse/polm/proxyv2@sha256:49e9527fe5e44711c57eab1c995803c76ba5cf1c0b4fb028235b" # image IGEG для Istio 1.17
                }
              ]
            }
          ],
  1. Запустить инструмент автоматической сборки продукта SSM, компонента SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будет собранные артефакты для установки приложения (на email сотрудника кто запустил job придет таблица со ссылками на артефакты)

  2. Провести проверку корректной подстановки образов по шаблону указанному в шаге 3, в таблице, которая пришла после запуска job «ClientUnpacker», необходимо загрузить артефакты, которые относятся к компоненту GATM (позиция «product GATM_agent», ссылка на дистрибутив располагается в секции «distribUrl»)

### в рамках приложения gatm_agent располагаются общие конфигурации по установке
### путь к конфигурационному файлу «package/conf/k8s/base/helm/gatm_agent/templates/statefulset.yaml»
### провески поиск по ключу «image»
...
          envFrom:
            - configMapRef:
                name: synapse-kafka-adapter-env
          image: '{{ $registry }}/ci90000017_synapse/ci90000017_synapse/gatm/gatm_kafka_adapter@sha256:****' # пример корректной подстановки образа для компонента gatm_kafka_adapter
...
            - name: synapse-metrics-data
              mountPath: /data
          terminationMessagePolicy: File
          image: '{{ $registry }}/ci90000017_synapse/ci90000017_synapse/gatm/gatm_agent@sha256:****'         # пример корректной подстановки образа для компонента gatm_kafka_adapter
...

Аналогичные проверки необходимо сделать по проверке корректной подстановке образов в рамках «kind: Deployment».

### путь к конфигурационному файлу «package/conf/k8s/base/helm/gatm_agent/templates/deployment-egress.yaml»
### провески поиск по ключу «image»
...
          image: */igeg/proxyv2:istio-release-1.6.14-se-release-1.2.2                # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью RHSM)
...
          image: */igeg/proxyv2:istio-release-1.12.2-se-release-1.12.2               # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью POLM)
...
          image: */igeg/proxyv2:istio-release-1.17.2-se-release-1.17.2               # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью POLM)
...

2. Подключиться к проекту#

  • Через CLI Kubectl

Шаг

Действия

Описание

Выполнить вход в kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount» с правами администратора. Заведите переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация.

Перейти в «namespace», где будет реализован компонент GATM

Введите команду:
kubectl config set-context --current --namespace=<имя namespace>

3. Установить необходимый перечень ресурсов#

В рамках предоставляемого дистрибутива реализованы все необходимые ресурсы для успешного функционирования компонента GATM

  1. Ресурсы в рамках ролевой модели («kind: ClusterRole»/«kind: RoleBinding»/«kind: ServiceAccount»)

  • Через CLI Kubectl

Шаг

Действия

Описание

Добавить необходимый перечень ресурсов

В консоли выполнить, команды которые описаны в данном разделе ниже

Перед запуском заполните параметры, следующей командой:

GATM_NAMESPACE=<имя namespace>
IMAGE_PULL_SECRETS=<имя секрета для скачивания образа>

«kind: ServiceAccount»

Команда:

kubectl apply -n $GATM_NAMESPACE -f - <<EOF
kind: ServiceAccount
apiVersion: v1
metadata:
  name: synapse-metrics-sa
imagePullSecrets:
  - name: $IMAGE_PULL_SECRETS
--- # при установке event exporter
kind: ServiceAccount
apiVersion: v1
metadata:
  name: synapse-metrics-event-exporter
imagePullSecrets:
  - name: $IMAGE_PULL_SECRETS
EOF

Ожидаемый результат:

serviceaccount/synapse-metrics-sa created
serviceaccount/synapse-metrics-event-exporter created

«kind: ClusterRole»

Команда:

kubectl apply -n ${GATM_NAMESPACE} -f - <<EOF
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-agent-role
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ''
    resources:
      - pods
      - namespaces
--- # при установке event exporter
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-event-role
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ''
    resources:
      - events
EOF

Ожидаемый результат:

clusterrole.rbac.authorization.k8s.io/synapse-metrics-agent-role created
clusterrole.rbac.authorization.k8s.io/synapse-metrics-event-role created

«kind: RoleBinding»/«kind: ClusterRoleBinding»

Команда:

kubectl apply -n $GATM_NAMESPACE -f - <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-agent-rb
  namespace: $GATM_NAMESPACE
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-sa
    namespace: $GATM_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: synapse-metrics-agent-role
--- # при установке event exporter
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-event-rb
  namespace: $GATM_NAMESPACE
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-event-exporter
    namespace: $GATM_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: synapse-metrics-event-role
EOF

Ожидаемый результат:

rolebinding.rbac.authorization.k8s.io/synapse-metrics-agent-rb created
rolebinding.rbac.authorization.k8s.io/synapse-metrics-event-rb created

Привязка роли к приложению GATM для успешного запроса к системных метрикам кластера Openshift:

«kind: RoleBinding»/«kind: ClusterRoleBinding»

Команда:

kubectl apply -n $GATM_NAMESPACE -f - <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-agent-rb
  namespace: openshift-monitoring
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-sa
    namespace: $GATM_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: synapse-metrics-agent-role
EOF

Установка#

Автоматическая установка сервиса#

Если выбран вариант автоматической установки, то необходимо предварительно реализовать ряд работ по настройке интеграционных взаимодействий vault/Kafka:

  1. Реализовать хранилище секретов (vault), где предварительно создать сертификаты и ключи:

  • KAFKA-BROKER-CRT - необходимо реализовать сертификаты и ключ для успешного взаимодействия c Kafka (ca-bandle.pem/tls.pem/tls.key), про правила формирования необходимо уточнить в документации используемой Kafka

  • monitoring - опциональный сертификат при организации шифрования на egressgateway по сбору системных метрик (tls.crt - клиентский сертификат для обращения в сервис системных метрик, tls.key - приватный ключ)

При автоматической установке сервиса, необходимо убедиться, что выполнены шаги раздела «1. Создать директорию установки» и «3. Установить необходимый перечень ресурсов».

  1. Заполнить стендозависимые параметры для установки компонента GATM, пример:

### Необходимо реализовать файл values.yaml
### Расположение файла в рамках git ветки job «SynapseInstaller» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»)
### Для компонента gatm_agent - synapse-config-dev-gen/${имя проекта для установки}/package/conf/k8s/base/helm/gatm_agent/values.yaml

values.yaml

release_version: "1.2.0" # указать версию релиза
config_version: "1.2.0"  # указать версию конфигурации
component_type: service

replicas: 1                                         # количество реплик приложения GATM (agent)
registryHost: sbc.space                             # Docker registry где расположены образ приложения GATM
registry_path: /                                    # Docker path где расположены образ приложения GATM
kubeAPIIP: '*.*.*.*'                                # IP-адрес сервиса KubeAPI (kubernetes.default.svc.cluster.local)
kubePort: 443                                       # Port сервиса KubeAPI (kubernetes.default.svc.cluster.local), параметр указывается при установке в Kubernetes кластер (useControl: k8s)
kubeAPIResolution: DNS                              # Используеный resolution в рамках конфигурации «kind: ServiceEntry»
kubeEgressRouting: TLS                              # реализация конфигураций Istio (TLS перехват трафика в рамках tls, TCP перехват трафика по tcp)
federateIP: '*.*.*.*'                               # IP-адрес сервиса federate.openshift (federate.openshift-monitoring.svc.cluster.local), при условии использованя указанного сервиса для сбора системных метрик
namespace: synapse-metrics-system                   # имя namespace куда устанавливается приложение GATM
deploy: all                                         # стратегия сбора метрик, параметр «all» - сборк сетевых метрик с пользовательского namespace, с контейнеров «istio-proxy» и метрик контрольной панели приложения «istiod», параметр «user» - сборк сетевых метрик с пользовательского namespace, параметр «control» - сбор метрик контрольной панели приложения «istiod»
useControl: ose                                     # используемая версия Istio, при использовании версии 1.6 необходимо указать значение «ose», а при использовании контрольной панели POLM реализовать значение «ose-se»
system_metrics: 'false'                             # организация сбора системных метрик(federate.openshift-monitoring.svc.cluster.local), при условии использованя указанного сервиса для сбора системных метрик
system_metrics_ca_crt_name: ca.crt                  # наименование сертификата по обращению к сервису по сбору системных метрик 
projectedKubeAPI: 'false'                           # признак монтирования токена для работы с KubeAPI, если стоит значение false, то токен будет примонитирован автоматически, если true то токен будет примонтирован в рамках Deployment
projectedKubeAPI_openshift_cm: 'true'               # монтирование сертификата (kube-root-ca.crt)
projectedKubeAPI_k8s_cm: 'true'                     # монтирование сертификата (openshift-service-ca.crt)
seccompProfile: 'false'                             # использование параметра seccompProfile, применимо для k8s 1.25 и выше
generate_ephemeral_storage: 'false'                 # указание ephemeral_storage в контейнерах
affinity: 'false'                                   # реализация affinity
enabledPriorityClassName: 'false'                   # указание PriorityClassName
priorityClassName: system-cluster-critical          # priorityClassName (при указании enabledPriorityClassName: 'true')
poddistruptionbudget: 'true'                        # флаг установки конфигурации «kind: PodDistruptionBudget»
use_storage_sm: 'false'                             # установка в рамках Kubernetes, для проведения агрегации (будет произведена установка компонент storage, alert, select, insert), если использется указанная установка, то необходимо устанавливать kafka adapter в отдельный Pod (singlePodAdapter: 'true')
tenant: '0'                                         # тенант для записи собранных метрик
add_kind_sidecar: 'false'                           # реализация конфигурации «kind: sidecar» по ограничению используемых адресов в рамках namespace и контрольной панели istio

k8s_system_metrics:                                 # при установке на Kubernetes (useControl: k8s) указание endpoint по предоставлению системных метрик
  host: federate.monitoring.svc.cluster.local
  port: 9090

peer_authentication:
  install: 'true'                                   # флаг установки конфигурации «kind: PeerAuthentication»
  mtls_mode: STRICT                                 # указание используемого мода

add_serviceaccount: 'false'                         # флаг установки «kind: ServiceAccount»
image_pull_secret: pull                             # наименование imagePullSecrets для успешного обращения в docker registry

enabled_metric_relabel_configs: 'false'             # флаг активации фильтра по передаче метрик, предоставляет возможность передавать в kafka только указываемые метрики по имени
istio_pods_relabel_regex: ''                        # регулярное выражение по фильтру передаваемых метрик в kafka, по istio-proxy в рамках проекта (указывается при установке флага enabled_metric_relabel_configs: 'true')
istio_cp_pods_relabel_regex: ''                     # регулярное выражение по фильтру передаваемых метрик в kafka, по метрикам собранным из контрольной панели приложения «istiod» (указывается при установке флага enabled_metric_relabel_configs: 'true')
istio_pods_relabel_add_label:                       # добавление дополнительных меток при передачи метрик по istio-proxy
  - name: namespace                                 # имя метки
    value: synapse-metrics-system                   # значение метки
istio_cp_pods_relabel_add_label:                    # добавление дополнительных меток при передачи метрик по istiod
  - name: namespace                                 # имя метки
    value: synapse-metrics-system                   # значение метки

scrape_gatm_application:
  agent: "false"                                    # передача метрик с приложения agent GATM

scrape_metrics_istio_operator:                      # параметры для scrape метрик приложения istio-operator
  scrape: 'false'                                   # флаг по реализации scrape
  namespace: istio-operator                         # namespace где установлен istio-operator
  enabled_metric_relabel_configs: 'false'           # флаг активации фильтра по передаче метрик, предоставляет возможность передавать в kafka только указываемые метрики по имени
  istio_operator_pods_relabel_regex: ''             # регулярное выражение по фильтру передаваемых метрик в kafka, по istio-proxy в рамках проекта (указывается при установке флага enabled_metric_relabel_configs: 'true')
  istio_operator_pods_relabel_add_label:            # опциональное добавление дополнительных меток при передачи метрик
    - name: namespace                               # имя метки
      value: synapse-metrics-system                 # значение метки

system_metrics_targets:                             # сбор систменый метрик по списку
  - name:                                           # уникальное имя для идентификатции job по scrape 
    namespace:                                      # namespace для сбора системных метрик
    relabel_regex:                                  # регулярное выражение по фильтру передаваемых метрик в kafka, по системным метрикам (указывается при установке флага enabled_metric_relabel_configs: 'true')
    relabel_add_label:                              # опциональное добавление дополнительных меток при передачи метрик
      - name:                                       # имя метки
        value:                                      # значение метки

podDisruptionBudget:
  apiVersion: policy/v1beta1                        # apiVersion конфигурации «kind: PodDistruptionBudget»
  spec:
    minAvailable: 1                                 # значение параметра в приложении agent minAvailable в конфигурации «kind: PodDistruptionBudget»
  storage:
    spec:
      minAvailable: 1                               # значение параметра в приложении storage minAvailable в конфигурации «kind: PodDistruptionBudget»
  select:
    spec:
      minAvailable: 1                               # значение параметра в приложении select minAvailable в конфигурации «kind: PodDistruptionBudget»
  insert:
    spec:
      minAvailable: 1                               # значение параметра в приложении insert minAvailable в конфигурации «kind: PodDistruptionBudget»
  alert:
    spec:
      minAvailable: 1                               # значение параметра в приложении alert minAvailable в конфигурации «kind: PodDistruptionBudget»

svpx:
  resources:
    limits:
      cpu: 300m                                    # ресурсы limits/cpu приложения SVPX в Pod компонента GATM
      memory: 300Mi                                # ресурсы limits/memory приложения SVPX в Pod компонента GATM
    requests:
      cpu: 300m                                    # ресурсы requests/cpu приложения SVPX в Pod компонента GATM
      memory: 300Mi                                # ресурсы requests/memory приложения SVPX в Pod компонента GATM

vault:
  kv: DEV/A/DEV/GATM/KV                            # путь к секретам vault во внешнем хранилище
  system_metrics_tls_vault: 'false'                # при указание 'true' шифрование будет происходить в рамках egressgateway
  system_metrics_tls_vault_crt_name: 'ca.crt'      # наименование ca сертификата в рамках Pod egressgateway (при указании system_metrics_tls_vault: 'true')
  secret_base64: false                             # формат хранения сертификатов в vault
  resources:                                   # ресурсы для контейнера vault
    limits:
      cpu: 500m
      memory: 128Mi
    requests:
      cpu: 250m
      memory: 64Mi
  pre_populate_only: "true"                        # режим мутации контейнера vault, в рамках IGEG (true - без мутации, false - с мутацией контейнера)
  secmanNamespace: DEV                             # namespace vault во внешнем хранилище
  secmanRole: role-ga-secman-gatm                  # роль vault во внешнем хранилище с доступом на чтение секретов
  auth_path_enabled: 'false'                       # флаг использования аннотации «vault.hashicorp.com/auth-path» в рамках доступа к хранилищу vault
  auth_path: synapse/path                          # значение аннотации «vault.hashicorp.com/auth-path» в рамках доступа к хранилищу vault

kafka_egress_config_apply: 'true'                  # флаг установки конфигураций для организации сетевого взаимодействия через egressgateway
kafkaPort: 9093                                    # внешний порт брокера
kafka_add_external_port_vs: 'true'                 # флаг конкретизации внешнего порта в конфигурации «kind: VirtualService»
kafka_add_sourceLabel: 'false'                     # реализация секции sourceLabel в «kind: VirtualService» для реализации вывода трафика через egressgateway поставляемый в рамках дистрибутива
kafka_se_install: 'true'                           # флаг публикации конфигурации «kind: ServiceEntry» на каждый брокер
kafka_isolate_egress_ef: 'false'                   # флаг для реализации конфигураций «kind: EnvoyFilter» которая реализует функционал конфигурации «kind: DestinationRule» при необходимости использовать сертификаты для шифрования только для передачи метрик
kafka_resolution: DNS                              # значение resolution конфигурцаии «kind: ServiceEntry» на каждый брокер
kafka:                                             # list брокеров, заполняются в зависимости от количества брокеров
  - host: broker1.ru                               # хост брокера №1
    name: brk1                                     # краткое наименование брокера №1
    ip: '*.*.*.*'                                  # ip брокера №1
    egressPort: 19021                              # любой свободный и уникальный порт для брокера №1
  - host: broker2.ru                               # хост брокера №2
    name: brk2                                     # краткое наименование брокера №2
    ip: '*.*.*.*'                                  # ip брокера №2
    egressPort: 19022                              # любой свободный и уникальный порт для брокера №2

install_egress: 'true'                             # установка egressgateway из дистрибутива
user_selector_egress: 'app: user-egress-selector'  # если установка egressgateway реализуется пользователем (install_egress: 'false'), то указывается selector пользовательской реализации, для успешного маршрутизирования
user_egress_secret:                                # путь до сертификатов в рамках Pod пользователського egressgateway (install_egress: 'false'), рекомендуется организовать монтирование секретов посредством vault
  monitoring:                                      # пути к сертификатом для сбора системных метрик
    ca: /etc/config/system-metrics/ca.crt
    crt: /etc/config/system-metrics/tls.crt
    key: /etc/config/system-metrics/tls.key
  kafka:                                           # пути к сертифиакатам для передачи метрик в kafka
    ca: /etc/config/ssl/tengri_ca.cer
    crt: /etc/config/ssl/tengri.pem
    key: /etc/config/ssl/tengri.key
egress:
  replicas: 1                                      # количество реплик IGEG (egressgateway)
  version: '1.17'                                  # при подключении к контрольной панели версии Istio 1.17 и выше
  serviceIstiod: istiod-basic                      # наименование сервиса контрольной панели, компонента «istiod»
  istioControlPlane: federation-istio-system       # наименование namespace контрольной панели, к которой подключен namespace компонента GATM
  imageose:                                        # ссылка на образ приложения IGEG (1.2.2) который поддерживает работоспсобность с Istio версии 1.6.14 (указывается если не использовался job «ClientUnpacker», либо не производилась операция replace образа)
  imagese:                                         # ссылка на образ приложения IGEG (1.12.2) который поддерживает работоспсобность с Istio версии 1.12.* (указывается если не использовался job «ClientUnpacker», либо не производилась операция replace образа)
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 1
    periodSeconds: 2
    successThreshold: 1
    timeoutSeconds: 1
  resources:
    limits:
      cpu: "200m"                                  # ресурсы limits/cpu приложения IGEG (egressgateway)
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы limits/memory приложения IGEG (egressgateway)
    requests:
      cpu: "200m"                                  # ресурсы requests/cpu приложения IGEG (egressgateway)
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы requests/memory приложения IGEG (egressgateway)

singlePodAdapter: 'true'                           # установка приложения kafka_adapter в рамках отдельного Pod
adapter:
  kafkaBatchNumMessages: 20000                     # количество сообщений для пакетной записи. По умолчанию 10000, при (kfgt_integration: enabled, kfgt_proto: HTTP) рекомендуется устанавливать < 5000
  kafkaBrokersList: kafka1.ru:9093,kafka2.ru:9093  # список брокеров
  kafkaTopic: metrics                              # используемый топик Kafka
  kfgt_integration: disabled                       # передача метрик в формате плоского «.JSON» в приложение KFGT (при включении параметр enabled)
  kfgt_proto: HTTP                                 # указывается при (kfgt_integration: enabled), формат взаимодействия HTTP/GRPC
  kfgt_service: service-kfgt                       # kind: service приложения KFGT (kfgt_integration: enabled)
  kfgt_port: 8080                                  # port kind: service приложения KFGT (kfgt_integration: enabled)
  kfgt_batch_period: '15'                          # По умолчанию 15, пользовательское время в секундах между отправками пакетов метрик. Используется для ненагруженных метриками систем, для отправки пакетов метрик в KFGT при ненаборе kafkaBatchNumMessages метрик раз в заданый период
  kfgt_separator: \n                               # По умолчанию \n, разделитель между метриками в рамках одного пакета, отпрпавляемого в KFGT. Значение должно совпадать со значением spring.kafka.producer.batch.separator из конфигурации приложения KFGT. Используется при (kfgt_proto: HTTP) и если в настройках KFGT указан пользовательский параметр spring.kafka.producer.batch.separator
  strategy:                                        # указывается при «singlePodAdapter: 'true'»
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:
    limits:
      cpu: "200m"                                  # ресурсы limits/cpu приложения gatm_kafka_adapter
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы limits/memory приложения gatm_kafka_adapter
    requests:
      cpu: "200m"                                  # ресурсы requests/cpu приложения gatm_kafka_adapter
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы requests/memory приложения gatm_kafka_adapter
  svpx:                                            # указывается при «singlePodAdapter: 'true'» ресырсы для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

agent:
  maxScrapeSize: 1Gib                              # максимальный объем ответа при scrape метрик
  maxDiskUsagePerURL: 1Gib                         # если удаленное хранилище недоступно, то метрики сохраняются в буфере приложения. Размер буфера фиксируется указанным параметром
  scrapeInterval: 1m                               # интервал по scrape
  scrapeTimeOut: 1m                                # timeout на запрос scrape
  scrapeCluster: apps.ocp.syn-dev                  # идентификатор кластера
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  queues: 8                                        # количество очередей для отправки сообщений в удаленное хранилище (по умолчанию 8)
  resources:
    limits:
      cpu: "200m"                                  # ресурсы limits/cpu приложения gatm_agent
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы limits/memory приложения gatm_agent
    requests:
      cpu: "200m"                                  # ресурсы requests/cpu приложения gatm_agent
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы requests/memory приложения gatm_agent
      
install_event_exporter: 'false'                    # необходимость в установке приложения event-exporter
event_exporter:
  use_sa_agent: "false"                            # использование ServiceAccount с наименованием synapse-metrics-sa (при выставлении флага true, нужно расширить ролевую модель ServiceAccount synapse-metrics-sa на get,list,watch Event)
  replicas: 1                                      # количество реплик event_exporter
  event_types: 'warning,normal'                    # типы сбора событий (поддерживается 2 типа - warning,normal)
  get_events_namespaces: 'synapse-metrics-system'  # имена проектов с которых будет производитсья сбор event (пример с указанием нескольких namespace - 'synapse-metrics-system,istio-system')
  add_message: 'enabled'                           # опция добавления в tag мутрики message конфигурации event 
  podDisruptionBudget:                             
    spec:
      minAvailable: 1                              # значение minAvailable в рамках конфигурации «podDisruptionBudget»
  strategy:                                        # параметры strategy в рамках deployment  
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  livenessProbe:                                   
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:                                       # квота на ресурсы
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  svpx:                                            # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi
        
### параметры заполняются при необходимости агрегировать метрики

count_storage:                               # количество реплик приложения storage, для корректной организации записи и чтения метрик index следует организовать начиная с 0 (он же 1 replicas)
  - index: 0                                 # если количество replicas 1 (далее список останавливается)
  - index: 1                                 # если количество replicas 2 (далее список останавливается)

storage:                                     
  replicas: 2                                # количество реплик storage (если количество реплик ровно 2, то необходимо в рамках секции count_storage указать 2 индекса «- index: 0» и «- index: 1»)
  retentionPeriod: 1d                        # время хранения метрик (минимальное значение 1d), также возможно указание часов (h), дней (d), недель (w) и года (y)
  resources:
    limits:
      cpu: 600m                              # ресурсы limits/cpu приложения storage
      ephemeral_storage: 500Mi               # ephemeral_storage
      memory: 600Mi                          # ресурсы limits/memory приложения storage
    requests:
      cpu: 300m                              # ресурсы requests/cpu приложения storage
      ephemeral_storage: 500Mi               # ephemeral_storage
      memory: 300Mi                          # ресурсы requests/memory приложения storage
  livenessProbe:                             # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                            # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                      # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 300m
        memory: 300Mi
      requests:
        cpu: 300m
        memory: 300Mi

select:
  replicas: 1                                # количество реплик select
  dedup_minScrapeInterval: 60s               # интервал, в рамках которого будет производиться анализ по дублям в рамках метрик, рекомендуемое значение = scrapeInterval (при установке приложения Agent)
  strategy:                                  # параметры strategy в рамках deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  resources:                                 # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:                             # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                            # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                      # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

insert:
  replicas: 1                                # количество реплик insert
  strategy:                                  # параметры strategy в рамках deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  resources:                                 # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:                              # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                             # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                       # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

agent_alert:
  maxDiskUsagePerURL: 1Gib                    # если удаленное хранилище недоступно, то метрики сохраняются в буфере приложения. Размер буфера фиксируется указанным параметром
  labelAdd: 'cluster=clusterID'               # добавление метки по агрегированным метрикам (label)
  queues: 8                                   # количество очередей для отправки сообщений в удаленное хранилище (по умолчанию 8)
  livenessProbe:                              # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                             # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:                                  # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi

alert:
  replicas: 1                                 # количество реплик alert
  strategy:                                   # параметры strategy в рамках deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  resources:                                  # квота в рамках ресурсов
    limits: 
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:                               # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                              # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                        # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 300m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi
  rules:                                       # правила агрегации данных, задаются администраторами при установке
    - values:
          openshift-image-registry-image-registry-operator-alerts.yaml: |  # наименование файла, который будет загружен в приложение alert, поддреживается формат «.yaml»
            groups:
              - name: ImageRegistryOperator                        # имя группы для агрегации
                rules:
                  - expr: sum(apiserver_v1_image_imports_total)    # правило агрегации
                    record: :apiserver_v1_image_imports:sum        # новая метрика
  1. Запустить job, компонента SMDL, «SynapseInstaller» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»)

При возникновении сложностей с подстановкой образа, допускается произвести ручное добавление корректных образов приложения, которые формируются после запуска job SMDL «ClientUnpacker».

Ручная установка сервиса#

Перед началом установки убедитесь, что выполнена подготовка окружения.

  1. Реализовать хранилище секретов (vault), где предварительно создать сертификаты и ключи:

  • KAFKA-BROKER-CRT - необходимо реализовать сертификаты и ключ для успешного взаимодействия c Kafka (ca-bandle.pem/tls.pem/tls.key), про правила формирования необходимо уточнить в документации используемой Kafka

  • monitoring - опциональный сертификат при организации шифрования на egressgateway по сбору системных метрик (tls.crt - клиентский сертификат для обращения в сервис системных метрик, tls.key - приватный ключ)

Для ручной установки сервиса выполните следующие действия:

Убедиться что в рамках персонального компьютера установлен Helm версии не ниже 3.0

  1. Загрузить артефакт компонента GATM с конфигурациями для установки (gatm-cfg-*) в рамках дистрибутива SSM

  2. При необходимости провести корректировку конфигураций располагаемых в каталоге «./conf/k8s/base/helm/gatm_agent/templates/» и «./conf/k8s/base/helm/gatm_storage/templates/» (например провести подстановку image приложений agent и adapter)

  3. Перейти в рамках терминала в каталог «./conf/k8s/base/helm/»

  4. Провести авторизацию через терминал в кластер, где планируется установка компонента GATM (пример для Openshift «oc login --token=$ТОКЕН --server=$АДРЕС_КЛАСТЕРА»)

  5. Пройти в namespace, где планируется установка компонента GATM (пример для Openshift «oc project synapse-metrics»)

  6. Провести заполнение файла «./conf/k8s/base/helm/gatm_agent/values.yaml» (описание параметров указана в указанном документе, раздел «Автоматическая установка сервиса»)

  7. Провести установку компонента GAMT - «helm install gatm gatm_agent --values operator/values.yaml»; При необходимости удалить компонент GATM - «helm delete gatm».

При установке в пользовательский namespace

Screenshot Схема. Концептуальная схема забора метрик из пользовательского namespace.

Screenshot Схема. Концептуальная схема установки в рамках Kubernetes (с установкой event exporter)

Screenshot Схема. Концептуальная схема забора метрик из контрольной панели RHSM.

Используется аналогичная схема при реализации сбора метрик с namespace «istio-operator», для успешного сбора необходимо реализовать сетевую доступность из проекта GATM к проекту «istio-operator», также убедиться что при установке «istio-operator» был реализован command «- '–monitoring-port=15014'» в рамках «kind: Deployment».

Конфигурации запуска Kafka adapter (реализуются в рамках «kind: ConfigMap» с наименованием «synapse-kafka-adapter-env»)

Параметр

Пример

Описание

GIN_MODE

release

Управление механизмом отладки gin. Возможные значения: debug или release

KAFKA_BATCH_NUM_MESSAGES

20000

Количество сообщений для пакетной записи. По умолчанию 10000

KAFKA_BROKER_LIST

kafka1.ru,kafka2.ru

Список используемых брокеров Kafka

KAFKA_TOPIC

Synapse.Metrics

Используемый topic Kafka

LOG_LEVEL

info

Уровень логирования, доступны следующие значения: debug, info, warn, error, fatal или panic, по умолчанию info.

PORT

8080

Порт по которому приложение Kafka adapter будет принимать сообщения

SERIALIZATION_FORMAT

json

Формат передачи данных в Kafka.

Конфигурации запуска Agent (Реализуются посредством уcтановки аргументов запуска в «kind: StatefulSet»)

Аргумент

Пример

Описание

-promscrape.config

/scrapeconfig/scrape.yml

Место расположение файлов с scrape конфигурациями

-promscrape.maxScrapeSize

1GiB

Максимальный объем ответа при запросе метрик

-promscrape.cluster.memberNum

$(POD_NAME)

Номер Pod, желательно не менять параметр при расчете

-promscrape.cluster.membersCount

1

Номер Pod, указанный параметр должен быть равен replicas

-promscrape.cluster.name

$(POD_NAME)-$(POD_NAMESPACE)

Уникальный идентификатор Pod

-loggerLevel

INFO

Уровень логирования. Возможное значения - INFO, WARN, ERROR, FATAL, PANIC

-promscrape.streamParse

true

Включение синтетического анализа метрик

-promscrape.suppressDuplicateScrapeTargetErrors

Выключение визуализации ошибок в логе про дублирование метрик

-remoteWrite.maxDiskUsagePerURL

1GiB

Если удаленное хранилище недоступно, то метрики сохраняются в буфере приложения. Размер буфера фиксируется указанным параметром

-remoteWrite.tmpDataPath

/data

Место сохранения данных, в рамках Pod

-remoteWrite.queues

8

Количество очередей для отправки сообщений в удаленное хранилище (по умолчанию 8)

-remoteWrite.url

http://localhost:8080/receive

Адрес хранилища Prometheus, либо адрес Kafka Adapter, для передачи собранных метрик

Опционально, можно настроить шардирование в рамках работы компонент GATM.

При установке рекомендуем реализовать аргументы по шардированию, по следующей логике.

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-agent-env
data:
  GATM_promscrape_cluster_membersCount: '{{ .Values.replicas }}'
....

При установке компонента GATM, более 1 реплики, будет производиться scrape метрик равномерно на каждую пользовательскую Pod, например, в рамках пользовательского проекта реализовано 8 Pod и при установке компонента GATM необходимо заполнить параметры следующим образом:

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-agent-env
data:
  GATM_promscrape_cluster_membersCount: '{{ .Values.replicas }}'
....

При старте приложений каждый Pod GATM будет производить scrape метрик по 4 пользовательским Pod, что позволяет равномерно распределить нагрузку на компонент GATM и исключить дублирование при сборе метрик.

Screenshot

Схема. Концептуальная схема параллельного scrape метрик при работе более 1 реплики Pod GATM

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

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

Необходимые параметры

Параметр

Пример заполнения

Описание

TOKEN

1

Уникальный номер брокера

BROKER

broker1.ru

Хост брокера

BROKER_IP

...

Ip-адресс брокера

GATM_NAMESPACE

namespace

Наименование проекта, куда устанавливается GATM

EGRESS_PORT

19443

Любой свободный порт для egressgateway, должен быть уникальный для каждого брокера

KAFKA_PORT

9093

Внешний порт брокера 9092/9093

Перед запуском заполните параметры, следующей командой:

TOKEN=<ваш параметр>
BROKER=<ваш параметр>
BROKER_IP=<ваш параметр>
GATM_NAMESPACE=<имя namespace где установлен GATM>
EGRESS_PORT=<ваш параметр>
KAFKA_PORT=<ваш параметр>

Пример реализации шаблона для конфигураций:

kubectl apply -n $GATM_NAMESPACE --validate=false -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: kafka-gw-$TOKEN
spec:
  selector:
    istio: egr-syn-metrics-$GATM_NAMESPACE
  servers:
    - hosts: ['$BROKER']
      port:
        name: 'tcp-kafka-$TOKEN'
        number: $EGRESS_PORT
        protocol: TCP
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: kafka-vs-$TOKEN
spec:
  exportTo: [.]
  gateways:
    - kafka-gw-$TOKEN
    - mesh
  hosts: ['$BROKER']
  tcp:
    - match:
        - destinationSubnets: ['$BROKER_IP']
          gateways: [mesh]
      route:
        - destination:
            host: egressgateway-kafka-$TOKEN
            port:
              number: $EGRESS_PORT
    - match:
        - gateways: ['kafka-gw-$TOKEN']
      route:
        - destination:
            host: '$BROKER'
            port:
              number: $KAFKA_PORT
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: kafka-dr-$TOKEN
spec:
  exportTo: [.]
  host: '$BROKER'
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN
    portLevelSettings:
      - port:
          number: $KAFKA_PORT
        tls:
          caCertificates: /etc/config/ssl/tengri_ca.cer
          clientCertificate: /etc/config/ssl/tengri.pem
          mode: MUTUAL
          privateKey: /etc/config/ssl/tengri.key
          sni: $BROKER
---
kind: Service
apiVersion: v1
metadata:
  name: egressgateway-kafka-$TOKEN
spec:
  ports:
    - name: tcp-kafka-$TOKEN
      protocol: TCP
      port: $EGRESS_PORT
      targetPort: $EGRESS_PORT
  selector:
    istio: egr-syn-metrics-$GATM_NAMESPACE
  type: ClusterIP
---
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: kafka-se-$TOKEN
spec:
  addresses:
    - $BROKER_IP
  endpoints:
    - address: $BROKER_IP
  exportTo:
    - .
  hosts:
    - $BROKER
  location: MESH_EXTERNAL
  ports:
    - name: tcp
      number: $KAFKA_PORT
      protocol: TCP
  resolution: DNS
EOF

Ожидаемый результат:

gateway.networking.istio.io/kafka-gw-${token} created
virtualservice.networking.istio.io/kafka-vs-${token} created
destinationrule.networking.istio.io/kafka-dr-${token} created
service/egressgateway-kafka-${token} created
serviceentry.networking.istio.io/kafka-se-${token} created

В рамках конфигурации реализуются механизмы шифрования данных по «mTLS 1.2 и выше » на граничном прокси (egressgateway).

Для взаимной аутентификации и шифрования трафика должны использоваться сертификаты x509.

Системные метрики

Если установка произведена в Openshift, то будет возможность производить scrape системных метрик.

Пример реализации scrape конфигурации:

apiVersion: v1
kind: ConfigMap
metadata:
  name: synapse-metrics-agent-scrapeconfig
data:
  scrape.yml: |
...
    - job_name: federate
      honor_labels: true
      honor_timestamps: true
      params:
        'match[]':
          - '{namespace="$GATM_NAMESPACE"}'
      metrics_path: /federate
      scheme: https
      static_configs:
      - targets:
        - federate.openshift-monitoring.svc.cluster.local:9090
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
        insecure_skip_verify: false

Внешнее хранилище секретов

Пример реализации аннотаций для интеграции на Egressgateway

...
        vault.hashicorp.com/agent-inject-secret-tengri_ca.cer: 'true'
        vault.hashicorp.com/agent-inject-template-tengri.key: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/KAFKA-BROKER-CRT"
          {{`-}}
            {{ index .Data "tls.key" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/agent-inject-secret-tengri.pem: 'true'
        vault.hashicorp.com/namespace: {{ .Values.vault.secmanNamespace }}
        vault.hashicorp.com/role: {{ .Values.vault.secmanRole }}
        vault.hashicorp.com/agent-pre-populate-only: '{{ .Values.vault.pre_populate_only }}'
        {{- if eq .Values.useControl "k8s" }}
        vault.hashicorp.com/agent-run-as-same-user: 'true'
        {{ end }}
        vault.hashicorp.com/secret-volume-path-tengri.pem: /etc/config/ssl
        vault.hashicorp.com/agent-inject-template-tengri_ca.cer: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/KAFKA-BROKER-CRT"
          {{`-}}
            {{ index .Data "ca-bandle.pem" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/agent-inject: 'true'
        vault.hashicorp.com/agent-init-first: 'false'
        vault.hashicorp.com/agent-inject-secret-tengri.key: 'true'
        vault.hashicorp.com/agent-pre-populate: 'true'
        vault.hashicorp.com/secret-volume-path-tengri.key: /etc/config/ssl
        vault.hashicorp.com/agent-inject-template-tengri.pem: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/KAFKA-BROKER-CRT"
          {{`-}}
            {{ index .Data "tls.pem" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/secret-volume-path-tengri_ca.cer: /etc/config/ssl
... # при хранении сертификатов для системных метрик
        vault.hashicorp.com/agent-inject-secret-tls.crt: 'true'
        vault.hashicorp.com/secret-volume-path-tls.crt: /etc/config/system-metrics
        vault.hashicorp.com/agent-inject-template-tls.crt: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/monitoring"
          {{`-}}
            {{ index .Data "tls.crt" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/agent-inject-secret-tls.key: 'true'
        vault.hashicorp.com/secret-volume-path-tls.key: /etc/config/system-metrics
        vault.hashicorp.com/agent-inject-template-tls.key: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/monitoring"
          {{`-}}
            {{ index .Data "tls.key" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
...

Где: - путь к секретам в «Hashicorp Vault» - namespace в рамках «Hashicorp Vault» - наименование роли на чтение секретов в «Hashicorp Vault» - формат хранения сертификатов в «Hashicorp Vault» (true/false)

Более подробно можно ознакомиться в официальной документации «Hashicorp Vault».

Интеграция с компонентом KFGT (kafka gateway) продукта SEI

При необходимости передавать собранные метрики в компонент KFGT необходимо дополнительно реализовать параметры в ConfigMap приложения kafka adapter

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-kafka-adapter-env
data:
  KFGT_INTEGRATION: enabled
  KFGT_PROTO: HTTP                # также поддерживается GRPC
  KFGT_URL: service-kfgt:port     # url kind: service приложения KFGT и port

Обновление#

  • Через CLI Kubectl

Шаг

Действия

Описание

Создать директорию для установки

На компьютере, с которого будет производиться установка, создать папку, например, «synapse-gatm»

Разархивировать файлы

Распаковать в созданную папку архив с конфигурационными артефактами компонента GATM

Подключиться к проекту#

  • Через CLI Kubectl

Шаг

Действия

Описание

Выполнить вход в kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация

Перейдите в нужный «Namespace»

Введите команду:
kubectl config set-context --current --namespace=<имя вашего проекта>

Остановить компонент#

  • Через CLI Kubectl

Шаг

Действия

Описание

Остановка компонента

В консоли выполните команду
kubectl scale --replicas=0 statefulset/<имя>

Удалить артефакты действующей версии#

  • Через CLI Kubectl

Шаг

Действия

Описание

Сохранение Statefulset

В консоли выполнить команду:
kubectl get -o yaml statefulset/<имя> > <путь к файлу>.yaml

Сохранение конфигурации

В консоли выполнить команду:
kubectl get -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Удаление Statefulset

В консоли выполнить команду:
kubectl delete statefulset <имя>

Удаление конфигурации

В консоли выполнить команду:
kubectl delete configmap <имя config map>

При необходимости изменить конфигурацию

Загрузить новую версию#

Необходимо обновить версию используемых CRD, конфигурации можно посмотреть в разделе «Установить необходимый перечень ресурсов», пункт «CustomResourceDefinitions».

  • Через CLI Kubectl

Шаг

Действия

Описание

Загрузка конфигурации

В консоли выполнить команду:
kubectl apply -f ${FILE_NAME}.yml

С новыми конфигурационными файлами

Загрузка Statefulset

В консоли выполнить команду:
kubectl apply -f ${FILE_NAME}.yml

С новой версией «kind: Statefulset»

Запустить новую версию компонента#

  • Через CLI Kubectl

Шаг

Действия

Описание

Запустить новую версию компонента

В консоли выполнить команду
kubectl scale --replicas=${N} statefulset/<имя>

$N — необходимое количество «kind: Pod», рекомендованное значение 2

Удаление#

Подключиться к проекту#

  • Через CLI Kubectl

Шаг

Действия

Описание

Выполнить вход в kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount». Завести переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация.

Перейти в нужный «Namespace»

Ввести команду:
kubectl config set-context --current --namespace=<имя вашего проекта>

Остановить компонент#

  • Через CLI Kubectl

Шаг

Действия

Описание

Остановка приложения

В консоли выполнить команду
kubectl scale --replicas=0 statefulset/<имя>

Удалить артефакты действующей версии#

  • Через CLI Kubectl

Шаг

Действия

Описание

Удалить Statefulset

В консоли выполнить команду:
kubectl delete -o yaml statefulset/<имя> > <путь к файлу>.yaml

Удалить конфигурации

В консоли выполнить команду:
kubectl delete -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Удалить все зависимые ресурсы из раздела «Установить необходимый перечень ресурсов»

В консоли выполнить команду:
kubectl delete -o yaml customresourcedefinitions/<имя custom resource definitions> > <путь к файлу>.yaml

Проверка работоспособности#

Agent#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8429:8429
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8429/ready
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Kafka adapter#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8080:8080
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8080/healthz
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Event exporter#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-event-exporter-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 9102:9102
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:9102/healthz
Команда не должна вывести ошибку.
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Select#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-select-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8481:8481
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8481/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Insert#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-insert-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8480:8480
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8480/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Storage#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-storage-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8482:8482
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8482/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Alert#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-alert-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8880:8880
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8880/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Проверка работоспособности всех интеграций производится на стороне приложений, с которыми мы интегрируемы, подробнее описание можно найти в документации таких приложений (kafka, IGEG, SVPX, KFGT, DropAPP и т.д.).

Откат#

Обратная совместимость поддерживается со всеми прошлыми версиями компонента GATM.

Остановить компонент#

  • Через CLI Kubectl

Шаг

Действия

Описание

Остановка приложения

В консоли выполнить команду
kubectl scale --replicas=0 statefulset/<имя>

Удалить артефакты действующей версии#

  • Через CLI Kubectl

Шаг

Действия

Описание

Сохранение Statefulset

В консоли выполнить команду:
kubectl get -o yaml statefulset/<имя> > <путь к файлу>.yaml

Сохранение конфигурации

В консоли выполнить команду:
kubectl get -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Удаление Statefulset

В консоли выполнить команду:
kubectl delete statefulset <имя>

Удаление конфигурации

В консоли выполнить команду:
kubectl delete configmap <имя config map>

При необходимости изменить конфигурацию

Загрузить сохраненные артефакты#

  • Через CLI Kubectl

Шаг

Действия

Описание

Загрузить конфигурации в рамках компонента

В консоли выполнить команду:
kubectl apply -f ${FILE_NAME}.yml

Переменная $FILE_NAME в рамках добавления необходимых конфигураций компонента («kind: Statefulset»/«kind: ConfigMap»)

Запустить восстановленную версию компонента#

  • Через CLI Kubectl

Шаг

Действия

Описание

Запустить восстановленную версию компонента

В консоли выполнить команду
kubectl scale --replicas=${N} statefulset/<имя>

$N — необходимое количество «kind: Pod», рекомендованное значение 2

Часто встречающиеся проблемы и пути их устранения#

Проблема

Причина

Решение

Ошибка при подключении к проекту

Пользователю не предоставлен доступ в проект.
Нет физического доступа к кластеру

Запросить доступ к проекту у администратора кластера

Ошибка при загрузке артефактов

У пользователя, под которым производится загрузка отсутствуют необходимые права

Запросить доступ к проекту у администратора кластера

Ошибка при Pull docker-образа из репозитория

Отсутствуют права на Pull образа из репозитория.
Недоступен репозиторий.
Неверная ссылка на image в Deployment

Запросить права у администратора registry.
Проверить ссылку, при необходимости скорректировать Deployment

Чек-лист валидации установки#

  1. Успешная установка компонента GATM

  2. Реализована и подключена scrape конфигурация «kind: ConfigMap»

  3. Отсутствует внешние адреса к доступу в storage

Проверка

Действия

Результат

Все артефакты загружены в проект

По списку артефактов найти их в «namespace Kubernetes»

Все Pod шлюза запущены

Найти StatefulSet, перейти на вкладку Pods, проверить, что статус всех Pods — Running

Интеграция с kafka проведена успешно

В log Kafka Adapter 2XX коды об отправке событий в Kafka

Отсутствие ошибок в логах контейнеров

Для каждого Pod проверить на вкладке Logs, что в логе контейнеров Pod отсутствуют ошибки

Проверка корректности реализации интеграции с внешними приложениями

Для каждой интеграции, проверить корректность интеграции согласно документации приложения, с которым производилась данная интеграция

Интеграция корректна