Руководство по установке#
В руководстве приведены инструкции по установке компонента «Сбор и анализ метрик» (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.
Рекомендуемые настройки безопасности окружения приведены в разделе «Подготовка окружения» данного документа.
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки (да/нет) |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
10 |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована ОС – Platform V SberLinux OS Server, см. раздел «Платформенные зависимости» |
ОС контейнеров для запуска модулей компонента |
|
Среда контейнеризации |
Да |
1.19 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации – Platform V DropApp, см. раздел «Платформенные зависимости» |
Платформа контейнеризации для запуска компонентов сервиса |
|
4.6 и выше |
Опционально |
||||
Средство контейнеризации |
Да |
19.03.14 и выше |
Рекомендовано |
Инструмент для автоматизации работы с контейнерами |
|
Репозиторий (хранилище дистрибутива/исходного кода) |
Да |
3.42.0 |
Рекомендовано |
Репозиторий (хранилище дистрибутива/исходного кода) |
|
Сервис централизованного хранения репозиториев исходного код |
Да |
15.7 и выше |
Рекомендовано |
Сервис централизованного хранения репозиториев исходного код |
|
Сервис интеграции и оркестрации микросервисов в облаке |
Нет |
1.6 и выше |
Опционально. Правообладателем АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, основанный на Istio – Platform V Synapse Service Mesh, см. раздел «Платформенные зависимости» |
Панель управления с открытым исходным кодом, служащая для обеспечения безопасности контейнеров в среде контейнеризации Kubernetes |
|
Менеджер пакетов |
Нет |
3 и выше |
Опционально |
Диспетчер пакетов для Kubernetes, упрощающий для разработчиков и операторов упаковку, настройку и развертывание приложений и служб в кластерах Kubernetes |
|
Иное |
Нет |
1.20.5 и выше |
Опционально |
Интерфейс командной строки для взаимодействия с кластером |
|
Система хранения и распространения secrets |
Нет |
1.10 и выше |
Опционально |
Внешнее хранилище сертификатов и другой «чувствительной» информации |
|
Система мониторинга (сбор и хранение метрик) |
Нет |
2.37 и выше |
Опционально. Правообладателем АО «СберТех» также рекомендован сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения – Объединенный мониторинг Unimon Platform V Monitor, см. раздел «Платформенные зависимости» |
Приложение-сервер, способное принимать метрики в собственном формате |
|
Иное |
Нет |
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) должны быть выполнены следующие условия:
Развернут и настроен кластер «Kubernetes» версии 1.19 или выше в соответствии с требованиями, предъявляемыми к Платформе
В кластере создан проект (namespace), в котором установлена контрольная панель (SSM)
В проекте создана учетная запись с правами на get, list, watch ресурсов Pod и Namespace, при опциональной установке компонента event exporter необходимо также реализовать ролевую модель на get, list, watch к ресурсу «kind: Event»
В проекте имеются свободные ресурсы по limits и requests не менее, чем зарезервировано в конфигурационных артефактах
В проект добавлен секрет для загрузки Docker-образов из целевого Docker-репозитория
В кластере создан проект (namespace), или используется ранее реализованный пользовательский проект, где будут реализованы компонент GATM, так же необходимо будет подключить указанный проект к контрольной панели (SSM)
В рамках реализованного кластера созданы необходимые роли («kind: ClusterRole») и привязки к роли в рамках проекта («kind: RoleBinding»), в рамках ролевой модели компонента GATM
Для установки через консоль на рабочем месте должен быть установлен клиент 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
}
]
}
],
Запустить инструмент автоматической сборки продукта SSM, компонента SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будет собранные артефакты для установки приложения (на email сотрудника кто запустил job придет таблица со ссылками на артефакты)
Провести проверку корректной подстановки образов по шаблону указанному в шаге 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» с правами администратора. Заведите переменную |
– |
Перейти в «namespace», где будет реализован компонент GATM |
Введите команду: |
– |
3. Установить необходимый перечень ресурсов#
В рамках предоставляемого дистрибутива реализованы все необходимые ресурсы для успешного функционирования компонента GATM
Ресурсы в рамках ролевой модели («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:
Реализовать хранилище секретов (vault), где предварительно создать сертификаты и ключи:
KAFKA-BROKER-CRT - необходимо реализовать сертификаты и ключ для успешного взаимодействия c Kafka (ca-bandle.pem/tls.pem/tls.key), про правила формирования необходимо уточнить в документации используемой Kafka
monitoring - опциональный сертификат при организации шифрования на egressgateway по сбору системных метрик (tls.crt - клиентский сертификат для обращения в сервис системных метрик, tls.key - приватный ключ)
При автоматической установке сервиса, необходимо убедиться, что выполнены шаги раздела «1. Создать директорию установки» и «3. Установить необходимый перечень ресурсов».
Заполнить стендозависимые параметры для установки компонента 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 # новая метрика
Запустить job, компонента SMDL, «SynapseInstaller» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»)
При возникновении сложностей с подстановкой образа, допускается произвести ручное добавление корректных образов приложения, которые формируются после запуска job SMDL «ClientUnpacker».
Ручная установка сервиса#
Перед началом установки убедитесь, что выполнена подготовка окружения.
Реализовать хранилище секретов (vault), где предварительно создать сертификаты и ключи:
KAFKA-BROKER-CRT - необходимо реализовать сертификаты и ключ для успешного взаимодействия c Kafka (ca-bandle.pem/tls.pem/tls.key), про правила формирования необходимо уточнить в документации используемой Kafka
monitoring - опциональный сертификат при организации шифрования на egressgateway по сбору системных метрик (tls.crt - клиентский сертификат для обращения в сервис системных метрик, tls.key - приватный ключ)
Для ручной установки сервиса выполните следующие действия:
Убедиться что в рамках персонального компьютера установлен Helm версии не ниже 3.0
Загрузить артефакт компонента GATM с конфигурациями для установки (gatm-cfg-*) в рамках дистрибутива SSM
При необходимости провести корректировку конфигураций располагаемых в каталоге «./conf/k8s/base/helm/gatm_agent/templates/» и «./conf/k8s/base/helm/gatm_storage/templates/» (например провести подстановку image приложений agent и adapter)
Перейти в рамках терминала в каталог «./conf/k8s/base/helm/»
Провести авторизацию через терминал в кластер, где планируется установка компонента GATM (пример для Openshift «oc login --token=$ТОКЕН --server=$АДРЕС_КЛАСТЕРА»)
Пройти в namespace, где планируется установка компонента GATM (пример для Openshift «oc project synapse-metrics»)
Провести заполнение файла «./conf/k8s/base/helm/gatm_agent/values.yaml» (описание параметров указана в указанном документе, раздел «Автоматическая установка сервиса»)
Провести установку компонента GAMT - «helm install gatm gatm_agent --values operator/values.yaml»; При необходимости удалить компонент GATM - «helm delete gatm».
При установке в пользовательский namespace
Схема. Концептуальная схема забора метрик из пользовательского namespace.
Схема. Концептуальная схема установки в рамках Kubernetes (с установкой event exporter)
Схема. Концептуальная схема забора метрик из контрольной панели 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 и исключить дублирование при сборе метрик.

Схема. Концептуальная схема параллельного 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». Заведите переменную |
– |
Перейдите в нужный «Namespace» |
Введите команду: |
– |
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка компонента |
В консоли выполните команду |
– |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Сохранение Statefulset |
В консоли выполнить команду: |
– |
Сохранение конфигурации |
В консоли выполнить команду: |
– |
Удаление Statefulset |
В консоли выполнить команду: |
– |
Удаление конфигурации |
В консоли выполнить команду: |
При необходимости изменить конфигурацию |
Загрузить новую версию#
Необходимо обновить версию используемых CRD, конфигурации можно посмотреть в разделе «Установить необходимый перечень ресурсов», пункт «CustomResourceDefinitions».
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Загрузка конфигурации |
В консоли выполнить команду: |
С новыми конфигурационными файлами |
Загрузка Statefulset |
В консоли выполнить команду: |
С новой версией «kind: Statefulset» |
Запустить новую версию компонента#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Запустить новую версию компонента |
В консоли выполнить команду |
$N — необходимое количество «kind: Pod», рекомендованное значение 2 |
Удаление#
Подключиться к проекту#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Выполнить вход в kubernetes |
Загрузите «kubeConfig» от вашего «ServiceAccount». Завести переменную |
– |
Перейти в нужный «Namespace» |
Ввести команду: |
– |
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполнить команду |
– |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Удалить Statefulset |
В консоли выполнить команду: |
– |
Удалить конфигурации |
В консоли выполнить команду: |
– |
Удалить все зависимые ресурсы из раздела «Установить необходимый перечень ресурсов» |
В консоли выполнить команду: |
– |
Проверка работоспособности#
Agent#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Kafka adapter#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Event exporter#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-event-exporter-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Select#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-select-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Insert#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-insert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Storage#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-storage-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Alert#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-alert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Проверка работоспособности всех интеграций производится на стороне приложений, с которыми мы интегрируемы, подробнее описание можно найти в документации таких приложений (kafka, IGEG, SVPX, KFGT, DropAPP и т.д.).
Откат#
Обратная совместимость поддерживается со всеми прошлыми версиями компонента GATM.
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполнить команду |
– |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Сохранение Statefulset |
В консоли выполнить команду: |
– |
Сохранение конфигурации |
В консоли выполнить команду: |
– |
Удаление Statefulset |
В консоли выполнить команду: |
– |
Удаление конфигурации |
В консоли выполнить команду: |
При необходимости изменить конфигурацию |
Загрузить сохраненные артефакты#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Загрузить конфигурации в рамках компонента |
В консоли выполнить команду: |
Переменная $FILE_NAME в рамках добавления необходимых конфигураций компонента («kind: Statefulset»/«kind: ConfigMap») |
Запустить восстановленную версию компонента#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Запустить восстановленную версию компонента |
В консоли выполнить команду |
$N — необходимое количество «kind: Pod», рекомендованное значение 2 |
Часто встречающиеся проблемы и пути их устранения#
Проблема |
Причина |
Решение |
|---|---|---|
Ошибка при подключении к проекту |
Пользователю не предоставлен доступ в проект. |
Запросить доступ к проекту у администратора кластера |
Ошибка при загрузке артефактов |
У пользователя, под которым производится загрузка отсутствуют необходимые права |
Запросить доступ к проекту у администратора кластера |
Ошибка при Pull docker-образа из репозитория |
Отсутствуют права на Pull образа из репозитория. |
Запросить права у администратора registry. |
Чек-лист валидации установки#
Успешная установка компонента GATM
Реализована и подключена scrape конфигурация «kind: ConfigMap»
Отсутствует внешние адреса к доступу в storage
Проверка |
Действия |
Результат |
|---|---|---|
Все артефакты загружены в проект |
По списку артефактов найти их в «namespace Kubernetes» |
– |
Все Pod шлюза запущены |
Найти StatefulSet, перейти на вкладку Pods, проверить, что статус всех Pods — Running |
– |
Интеграция с kafka проведена успешно |
В log Kafka Adapter 2XX коды об отправке событий в Kafka |
– |
Отсутствие ошибок в логах контейнеров |
Для каждого Pod проверить на вкладке Logs, что в логе контейнеров Pod отсутствуют ошибки |
– |
Проверка корректности реализации интеграции с внешними приложениями |
Для каждой интеграции, проверить корректность интеграции согласно документации приложения, с которым производилась данная интеграция |
Интеграция корректна |