Руководство по установке#
В руководстве приведены инструкции по установке компонента Synapse Discovery (SYND) продукта Platform V Synapse Service Mesh (SSM).
Термины и определения#
Термин/аббревиатура |
Определение |
|---|---|
SYND |
Программный компонент Synapse Discovery (код SYND) из состава программного продукта Platform V Synapse Service Mesh (код SSM) |
Платформа |
Платформа оркестрации приложений со средствами автоматизации и управления на основе политик, например Kubernetes |
Istio SE |
Настраиваемая сервисная сетка с открытым исходным кодом, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в кластере Kubernetes |
Контрольная панель |
Проект, в котором запущены управляющие приложения Synapse Service Mesh (компонент POLM) |
Сервисный прокси / SVPX / istio-proxy |
Компонент Сервисный прокси продукта «Platform V Synapse Service Mesh» |
Граничный прокси / IGEG / ingressgateway / egressgateway |
Компонент Граничный прокси продукта «Platform V Synapse Service Mesh» |
mTLS |
Mutual TLS, протокол взаимной TLS-аутентификации |
Pod |
Набор контейнеров внутри узла кластера Kubernetes |
Deployment / «kind: Deployment» |
Набор инструкций для запуска приложения в Kubernetes |
«kind: Gateway» / «kind: VirtualService» / «kind: ServiceEntry» / «kind: DestinationRule» / «kind: EnvoyFilter» |
Конфигурации, которые реализуют маршрутизацию в рамках платформы. За обработку которых отвечает компонент SSM |
fluent-bit |
Компонент «Platform V Monitor» (LGDB) |
SMDL |
Компонент «Synapse Service Mesh SMDL» |
Proxy Operator |
Оператор Proxy Operator предоставляет Kube-native интерфейс для управления жизненным циклом объектов типа CustomResourceDefinition |
Системные требования#
Для установки требуется соблюдение следующих условий:
Развернут и настроен кластер «Kubernetes» версии 1.23 или выше в соответствии с требованиями, предъявляемыми к Платформе.
В кластере создан проект («Namespace»), в котором установлена контрольная панель (POLM).
В проекте создана учетная запись с правами на загрузку артефактов.
В проекте имеются свободные ресурсы по «limits» и «requests» не менее, чем зарезервировано в конфигурационных артефактах.
В проект добавлен секрет для загрузки Docker-образов из целевого Docker-репозитория.
Подключен и настроен компонент SMDL, опционально Proxy Operator.
В кластере создан проект («Namespace»), где будет реализован программный компонент Synapse Discovery (код SYND) из состава программного продукта Platform V Synapse Service Mesh (код SSM).
В рамках реализованного проекта созданы необходимые роли («kind:Role»/«kind: ClusterRole») и привязки к ролям ( «kind: RoleBinding»/«kind: ClusterRoleBinding») в рамках ролевой модели компонента SYND.
Для установки через консоль на рабочем месте должен быть установлен клиент Kubectl (CLI — command-line interface).
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или ** опциональны** для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки (да/нет) |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
10 |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована операционная система – Platform V SberLinux OS Server |
ОС контейнеров для запуска модулей компонента |
|
Операционная система |
Да |
7.9 |
Опционально |
ОС контейнеров для запуска модулей компонента |
|
Среда контейнеризации |
Да |
1.24 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации – Platform V DropApp |
Платформа контейнеризации для запуска компонентов сервиса |
|
Средство контейнеризации |
Да |
19.03.14 и выше |
Рекомендовано |
Инструмент для автоматизации работы с контейнерами |
|
Сервис централизованного хранения репозиториев исходного код |
Да |
15 и выше |
Рекомендовано |
Сервис централизованного хранения репозиториев исходного код |
|
Сервис централизованного хранения репозиториев исходного код |
Нет |
6.7.5 и выше |
Опционально |
Сервис централизованного хранения репозиториев исходного код |
|
Репозиторий (хранилище дистрибутива/исходного кода) |
Да |
2.15.1 и выше |
Рекомендовано |
Репозиторий (хранилище дистрибутива/исходного кода) |
|
Репозиторий (хранилище дистрибутива/исходного кода) |
Нет |
2 и выше |
Опционально |
Репозиторий (хранилище дистрибутива/исходного кода) |
|
Репозиторий (хранилище дистрибутива/исходного кода) |
Нет |
2 и выше |
Опционально |
Репозиторий (хранилище дистрибутива/исходного кода) |
|
Иное |
Нет |
1.6 и выше |
Опционально |
Панель управления с открытым исходным кодом, служащая для обеспечения безопасности контейнеров в среде контейнеризации Kubernetes |
|
Иное |
Нет |
3 и выше |
Опционально |
Диспетчер пакетов для Kubernetes, упрощающий для разработчиков и операторов упаковку, настройку и развертывание приложений и служб в кластерах Kubernetes |
|
Иное |
Нет |
1.24 и выше |
Опционально |
Интерфейс командной строки для взаимодействия с кластером |
Примечание:
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои основные функции без установки данной категории ПО).
**
Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
Платформенные зависимости#
У компонента SYND реализована интеграция со следующими компонентами из состава продукта:
Наименование компонента |
Код |
Описание |
|---|---|---|
Управление политиками |
POLM |
Панель управления с открытым исходным кодом, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в среде контейнеризации Kubernetes |
Граничный прокси |
IGEG |
Сервис для обеспечения управляемого вызова интеграционных сервисов прикладной части |
Сервисный прокси |
SVPX |
Прокси-сервер L7 и коммуникационная шина, разработанные для крупных современных сервис-ориентированных архитектур |
Сбор и анализ метрик |
GATM |
Предназначен для автоматического сбора метрик в пользовательском namespace (системные и сетевые метрики) |
DevOps инструменты Service Mesh |
SMDL |
Сборка, установка и администрирование сервисов на Synapse |
Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия продукта |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V SberLinux OS Server |
SLO |
8.8 и выше |
INST Операционная система |
Нет |
ОС контейнеров для запуска модулей компонента |
ОС Альт 8 СП |
Platform V DropApp |
K8S |
1.1 и выше |
K8SC K8S Core |
Нет |
Дистрибутив Kubernetes со встроенными механизмами мультитенантности и бессерверным исполнением |
Kubernetes, Red Hat OpenShift Container Platform |
Platform V Synapse Service Mesh |
GATM |
4.1 и выше |
Сбор и анализ метрик |
Нет |
Сервис для отправки логов и метрик в kafka |
Любой сервис сбора записей о событиях, совместимый с fluent-bit, например: Elasticsearch, InfluxDB |
Примечание:
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).
**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не
исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении
которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное
обеспечение».
Аппаратные требования#
Для установки компонента требуется следующая конфигурация аппаратного обеспечения:
Название модуля |
ПО среды функционирования |
Количество |
Список контейнеров |
CPU Request |
CPU Limit |
Memory Request |
Memory Limit |
Горизонтальное масштабирование |
|---|---|---|---|---|---|---|---|---|
Приложение Synapse.d |
Kubernetes/Platform V DropApp |
1 pod |
synd-synapsed |
300 |
1000 |
150 |
150 |
Да |
Компонент SYND поддерживает горизонтальную масштабируемость. При горизонтальном масштабировании продукта, для подтверждения соответствия ожидаемым нефункциональным характеристикам, рекомендуется предварительно провести нагрузочное тестирование на целевой конфигурации конкретной инсталляции.
Состав дистрибутива#
Компонент SYND предоставляет 2 архива:
Элементы поставки:
synd-bin
Элемент дистрибутива |
Описание |
|---|---|
./package/bh/synd |
Приложение Synapse Discovery |
synd-cfg
Конфигурации для установки.
Элемент дистрибутива |
Описание |
|---|---|
./conf/k8s/base/helm/* |
Базовые конфигурации по установке компонента SYND |
Выбор способа установки#
В зависимости от способа развертывания сервиса воспользуйтесь одной из инструкций:
целевая автоматизированная установка сервиса с использованием компонента SMDL, «ClientUnpacker», опционально Proxy Operator;
опциональная ручная установка сервиса.
Подготовка окружения#
Для выполнения установки программного компонента SYND из состава программного продукта Platform V Service Mesh (SSM) должны быть выполнены следующие условия:
Развернут и настроен кластер «Kubernetes» версии 1.23 или выше в соответствии с требованиями, предъявляемыми к Платформе.
В кластере создан проект (namespace), в котором установлена контрольная панель (SSM).
Опционально в кластере может быть установлен Proxy Operator.
В проекте создана учетная запись с правами на get, list, watch ресурсов Pod и Namespace.
В проекте имеются свободные ресурсы по limits и requests не менее, чем зарезервировано в конфигурационных артефактах.
В проект добавлен секрет для загрузки Docker-образов из целевого Docker-репозитория.
В кластере создан проект (namespace), или используется ранее реализованный пользовательский проект, где будут реализованы компонент SYND, так же необходимо будет подключить указанный проект к контрольной панели (SSM).
В рамках реализованного кластера созданы необходимые роли («kind: ClusterRole») и привязки к роли в рамках проекта («kind: ClusterRoleBinding»), в рамках ролевой модели компонента SYND.
Для установки через консоль на рабочем месте должен быть установлен клиент Kubectl (CLI — command-line interface).
1. Создание директории установки#
synd (директория synd)
Пререквизиты:
Базовый образ для сборки docker image загружен в docker registry.
Ручная установка:
Публикация базового образа:
Загрузите образ из файла командой docker load.
Установите тег полученному образу и выгрузите его в docker registry (командами docker tag, docker push).
В рамках примера пошагово будет описан процесс сборки образа и загрузка его в registry, аналогичные действия необходимо произвести по всем компонентам.
Шаг |
Действия |
Описание |
|---|---|---|
Создание директорию для установки |
На компьютере, с которого будет производиться установка, создайте папку, например «synapse-synd» |
– |
Распаковка архива с файлами |
Распакуйте в созданную папку архив с конфигурационными артефактами компонента SYND |
– |
Подстановка базового образа в рамках файла Dockerfile |
Перейдите в каталог «docker/synd/Dockerfile», откройте и отредактируйте файл, в рамках секции «FROM» подставьте ссылку на базовый образ |
Сохраните и закройте файл |
Авторизация в Docker Registry |
Выполните команду, находясь в корне распакованного архива: «docker login $Registry» |
$Registry — это host Docker реестра. Необходимо ввести логин с паролем для авторизации |
Сборка Docker образа для установи приложения |
Выполните команду, находясь в корне распакованного архива: «docker build . -f docker/synd/Dockerfile -t $registry_tag:$version» |
$registry_tag — полный путь где будет реализован образ, $version — версия образа. Пример заполнения двух параметров «registry/dev/synd:0.0.1» |
Загрузка полученного Docker образа в Registry |
Выполните команду находясь в корне распакованного архива: «docker push $registry_tag:$version» |
– |
Получение sha256 образа |
При выполнении шага «Загрузка полученного Docker образа в Registry» в терминале будет информация о sha256 загруженного образа, пример вывода терминала: «$version: digest: sha256:12d1sded*** size: 1323». Скопируйте sha256 (пример «sha256:12d1sded***») |
Сохраните указанное значение в переменную $sha256 |
Тем самым получаем image приложений: «IMAGE_$component=$registry_tag@$sha256».
Автоматическая установка:
Для сборки образа рекомендуем использовать инструмент автоматической сборки образа, компонент SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будет собранный образ приложений.
Необходимо обновить параметр из json «teamProducts.json» (при реализации автоматической установки также необходимо провести актуализацию используемых образов по интеграциям).
{
"name": "Synapse Discovery",
"code": "SYND",
"user": "****",
"parts": [
{
"docker": [
{
"baseImageLink": "${базовый образ для сборки приложения}", # пример "*/alt-sp8-golang:1.21
"version": "${версия компонента synd}",
"deploymentUnit": "synd"
}
],
"imageLinkMapping": [
{
"regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}/synd@sha256:(?<hash>\\w+)" # регулярное выражение для поиска в конфигурациях развертывания места с указанием image компонента
}
]
},
{
"artifactId": "synd-cfg",
"imageLinkMapping": [
{
"regex": "(?<=(\\{\\{|\\$\\{)\\s?\\$registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\$registry_path\\s?(\\}){1,2}/synd@sha256:(?<hash>\\w+)" # регулярное выражение для поиска в конфигурациях развертывания места с указанием image компонента
}
]
}
]
}
Запустите инструмент автоматической сборки продукта SSM, компонента SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будут собранные артефакты для установки приложения (на email запустившего job сотрудника придет таблица со ссылками на артефакты).
Проверьте корректность подстановки образов по шаблону, указанному в шаге 3, в таблицу, которая пришла после запуска job «ClientUnpacker». Загрузите артефакты, которые относятся к компоненту SYND (позиция «product SYND», ссылка на дистрибутив располагается в секции «distribUrl»).
### в рамках приложения synd располагаются общие конфигурации по установке
### путь к конфигурационному файлу «package/conf/k8s/base/helm/synd/templates/deployment.yaml»
### проведите поиск по ключу «image»
...
spec:
containers:
- name: synd-synapsed
image: '{{ $registry }}/ci90000017_synapse/ci90000017_synapse/synd/synd@sha256:****' # пример корректной подстановки образа
2. Подключиться к проекту#
Через CLI Kubectl.
Шаг |
Действия |
Описание |
|---|---|---|
Вход в kubernetes |
Загрузите «kubeConfig» от вашего «ServiceAccount» с правами администратора. Заведите переменную |
|
Настройка контекста |
Введите команду: |
|
Добавление необходимого перечня ресурсов |
В консоли выполните команды, которые описаны в разделе ниже |
– |
3. Установка необходимого перечня ресурсов#
В рамках предоставляемого дистрибутива реализованы все необходимые ресурсы для успешного функционирования компонента
SYND. Установка может быть произведена с использованием Proxy Operator, для этого измените флаг
.Values.crd.proxy.deploy в файле values.yaml.
Установка общих ресурсов#
Ресурсы в рамках ролевой модели («kind: Role»/«kind: RoleBinding»/«kind: ServiceAccount»).
Перед запуском заполните параметры, следующей командой:
SYND_NAMESPACE=<имя namespace>
IMAGE_PULL_SECRETS=<имя секрета для скачивания образа>
«kind: ServiceAccount»
Команда:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
kind: ServiceAccount
apiVersion: v1
metadata:
name: synd-sa-synapsed
imagePullSecrets:
- name: $IMAGE_PULL_SECRETS
EOF
Ожидаемый результат:
serviceaccount/synd-sa created
«kind: Role»
Создайте роль для ресурсов внутри namespace:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: synd-r-synapsed
rules:
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- get
- list
- watch
- update
- patch
- apiGroups:
- discovery.synapse.sber
resources:
- discoveryhistories
- discoveryhistories/status
verbs:
- get
- list
- watch
- update
- patch
Ожидаемый результат:
clusterrole.rbac.authorization.k8s.io/synd-r-synapsed created
«kind: RoleBinding»
Команда:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: synd-rb-synapsed
subjects:
- kind: ServiceAccount
name: synd-sa-synapsed
namespace: $SYND_NAMESPACE
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: synd-r-synapsed
EOF
Ожидаемый результат:
rolebinding.rbac.authorization.k8s.io/synd-rb-synapsed created
Установка без использования Proxy Operator#
Ресурсы в рамках ролевой модели («kind: ClusterRole»/«kind: ClusterRoleBinding»).
«kind: ClusterRole»
Команда:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: synd-cr-synapsed
rules:
- apiGroups:
- discovery.synapse.sber
resources:
- discoveryexports
- discoveryimports
- discoverytemplates
- discoveryparameters
verbs:
- get
- list
- watch
- apiGroups:
- discovery.synapse.sber
resources:
- discoveryexports/status
- discoveryimports/status
verbs:
- get
- list
- watch
- update
- patch
Ожидаемый результат:
clusterrole.rbac.authorization.k8s.io/synapse-discovery-role created
«kind: ClusterRoleBinding»
Команда:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: synd-crb-synapsed
subjects:
- kind: ServiceAccount
name: synd-sa-synapsed
namespace: $SYND_NAMESPACE
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: synd-cr-synapsed
EOF
Ожидаемый результат:
rolebinding.rbac.authorization.k8s.io/synapse-discovery-crb created
Установка CustomResourcesDefinitions DiscoveryTemplate, DiscoveryParameters, DiscoveryExport, DiscoveryImport, DiscoveryHistory, необходимых для работы Synapse Discovery.
CustomResourcesDefinitions
Конфигурации присутствуют в рамках дистрибутива с конфигурациями развертывания (synd-cfg - ./conf/k8s/base/helm/synd/templates/crd/*.yaml).
«kind: CustomResourceDefinition»
Команда:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryexports.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryExport
listKind: DiscoveryExportList
plural: discoveryexports
singular: discoveryexport
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryExport is the Schema for the discoveryexports API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryExportSpec defines the desired state of DiscoveryExport
properties:
address:
properties:
host:
type: string
path:
description: Only for HTTP protocol
type: string
port:
format: int32
type: integer
protocol:
description: HTTP or GRPC
type: string
required:
- host
- port
- protocol
type: object
billingResourceName:
type: string
requestRate:
description: RequestRate in ms
format: int32
type: integer
templates:
items:
properties:
expiredPercentile:
description: Percentage of tll expiration that would trigger
sending message with type TTL_EXPIRING
format: int32
type: integer
name:
type: string
ttl:
description: Ttl in ms
format: int32
type: integer
required:
- name
type: object
type: array
required:
- address
- templates
type: object
status:
description: DiscoveryExportStatus defines the observed state of DiscoveryExport
properties:
connection:
description: DiscoveryExportConnectionStatus represents the connection
status
properties:
connected:
description: indicates whether the connection is active true or
false
type: boolean
error:
description: Reason the connection failed
type: string
lastConnectedTime:
description: LastConnectedTime stores the timestamp of the last
successful connection It is optional and omitted if the connection
has never been established
type: string
required:
- connected
type: object
lastUpdate:
type: string
message:
type: string
status:
type: string
validate:
description: ValidationStatus represents the result of a validation
process
properties:
error:
description: Reason the validation failed
type: string
isValid:
description: Indicates whether the validation was successful true
or false
type: boolean
required:
- isValid
type: object
required:
- lastUpdate
- message
- status
- validate
type: object
type: object
served: true
storage: true
subresources:
status: {}
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryimports.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryImport
listKind: DiscoveryImportList
plural: discoveryimports
singular: discoveryimport
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryImport is the Schema for the discoveryimports API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryImportSpec defines the desired state of DiscoveryImport
properties:
billingResourceName:
type: string
templates:
items:
type: string
type: array
type: object
status:
description: DiscoveryImportStatus defines the observed state of DiscoveryImport
properties:
lastUpdate:
type: string
message:
type: string
status:
type: string
validate:
description: ValidationStatus represents the result of a validation
process
properties:
error:
description: Reason the validation failed
type: string
isValid:
description: Indicates whether the validation was successful true
or false
type: boolean
required:
- isValid
type: object
required:
- lastUpdate
- message
- status
type: object
type: object
served: true
storage: true
subresources:
status: {}
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoverytemplates.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryTemplate
listKind: DiscoveryTemplateList
plural: discoverytemplates
singular: discoverytemplate
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryTemplate is the Schema for the discoverytemplates API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryTemplateSpec defines the desired state of DiscoveryTemplate
properties:
envoyApiVersion:
description: EnvoyApiVersion is the version of the API of Envoy Synapse
Service Mesh that this template is for
type: string
template:
properties:
data:
description: Data is the blank template body (plaintext)
type: string
expiredPercentile:
description: Percentage of tll expiration that would trigger sending
message with type TTL_EXPIRING
format: int32
type: integer
name:
type: string
providerNamespaceSelector:
description: ProviderNamespaceSelector
properties:
matchExpressions:
description: MatchExpressions is a list of namespace selector
requirements. The requirements are ANDed.
items:
description: NamespaceSelectorRequirement is a selector
that contains values, a key, and an operator that relates
the key and values.
properties:
key:
description: Key is the namespace key that the selector
applies to.
type: string
operator:
description: Operator represents a key's relationship
to a set of values. Valid operators are In, NotIn,
Exists and DoesNotExist.
type: string
values:
description: Values is an array of string values. If
the operator is In or NotIn, the values array must
be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced
during a strategic merge patch.
items:
type: string
type: array
required:
- key
- operator
type: object
type: array
matchNamespaces:
additionalProperties:
type: string
description: MatchNamespaces is a map of {key,value} pairs.
A single {key,value} in the matchNamespaces map is equivalent
to an element of matchExpressions, whose key field is "key",
the operator is "In", and the values array contains only
"value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
ttl:
description: Ttl in ms
format: int32
type: integer
required:
- name
type: object
required:
- envoyApiVersion
- template
type: object
status:
description: DiscoveryTemplateStatus defines the observed state of DiscoveryTemplate
type: object
type: object
served: true
storage: true
subresources:
status: { }
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryparameters.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryParameters
listKind: DiscoveryParametersList
plural: discoveryparameters
singular: discoveryparameters
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryParameters is the Schema for the discoveryparameters
API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryParametersSpec defines the desired state of DiscoveryParameters
properties:
description:
type: string
params:
additionalProperties:
properties:
exclusiveMaximum:
description: ExclusiveMaximum determines whether the Maximum
is absolute
type: boolean
exclusiveMinimum:
description: ExclusiveMinimum determines whether the Minimum
is absolute
type: boolean
items:
description: Items describes the validation scheme for each
element of the array or map
nullable: true
properties:
maxItems:
description: MaxItems sets the maximum number of elements
in an array or map
format: int64
nullable: true
type: integer
minItems:
description: MinItems sets the maximum number of elements
in an array or map
format: int64
nullable: true
type: integer
schema:
x-kubernetes-preserve-unknown-fields: true
required:
- schema
type: object
maxLength:
description: MaxLength sets the maximum possible length of the
string value
format: int64
nullable: true
type: integer
maximum:
description: Maximum sets the maximum value of numeric object
(Int ot Float)
nullable: true
type: string
minLength:
description: MinLength sets the minimum possible length of the
string value
format: int64
nullable: true
type: integer
minimum:
description: Minimum sets the minimum value of numeric object
(Int ot Float)
nullable: true
type: string
pattern:
description: Pattern specifies a regular expression for checking
the string value
nullable: true
type: string
properties:
description: Properties describes fields of Object
nullable: true
type: object
x-kubernetes-preserve-unknown-fields: true
required:
description: Required determines whether the parameters are
required
items:
type: string
nullable: true
type: array
type:
default: string
description: 'Type is one of declared types: Object / Array
/ Map / Int / Float / Bool / String'
enum:
- int
- float
- bool
- map
- array
- string
- object
type: string
type: object
type: object
required:
- params
type: object
type: object
served: true
storage: true
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryhistories.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryHistory
listKind: DiscoveryHistoryList
plural: discoveryhistories
singular: discoveryhistory
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryHistory is the Schema for the discoveryhistories API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryHistorySpec defines the desired state of DiscoveryHistory
properties:
params:
description: Foo is an example field of DiscoveryHistory. Edit discoveryhistory_types.go
to remove/update
type: string
type: object
status:
description: DiscoveryHistoryStatus defines the observed state of DiscoveryHistory
properties:
lastUpdate:
type: string
message:
type: string
status:
type: string
required:
- lastUpdate
- message
- status
type: object
type: object
served: true
storage: true
subresources:
status: {}
EOF
Ожидаемый результат:
customresourcedefinition.apiextensions.k8s.io/discoverytemplates.discovery.synapse.sber created
customresourcedefinition.apiextensions.k8s.io/discoveryparameters.discovery.synapse.sber created
customresourcedefinition.apiextensions.k8s.io/discoveryimports.discovery.synapse.sber created
customresourcedefinition.apiextensions.k8s.io/discoveryexports.discovery.synapse.sber created
customresourcedefinition.apiextensions.k8s.io/discoveryhistories.discovery.synapse.sber created
Установка с использованием Proxy Operator#
Установка CRD Proxy ресурсов с CustomResourcesDefinitions необходимыми для работы Synapse Discovery: DiscoveryTemplate, DiscoveryExport, DiscoveryImport, DiscoveryParameters, DiscoveryHistory. Конфигурации присутствуют в рамках дистрибутива с конфигурациями развертывания (synd-cfg - ./conf/k8s/base/helm/synd/templates/crd/*.yaml).
Перед запуском заполните параметры, следующей командой:
SYND_NAMESPACE=<имя namespace>
SERVICE_ACCOUNT=<имя sa который к которому привяжется роль >
Команда:
kubectl apply -n $SYND_NAMESPACE -f - <<EOF
apiVersion: apps.firepaws.io/v1
kind: CRDProxy
metadata:
name: synd-crdproxy-export
namespace: $SYND_NAMESPACE
serviceAccount:
- $SERVICE_ACCOUNT
data: |-
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryexports.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryExport
listKind: DiscoveryExportList
plural: discoveryexports
singular: discoveryexport
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryExport is the Schema for the discoveryexports API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryExportSpec defines the desired state of DiscoveryExport
properties:
address:
properties:
host:
type: string
path:
description: Only for HTTP protocol
type: string
port:
format: int32
type: integer
protocol:
description: HTTP or GRPC
type: string
required:
- host
- path
- port
- protocol
type: object
billingResourceName:
type: string
requestRate:
description: RequestRate in ms
format: int32
type: integer
templates:
items:
properties:
expiredPercentile:
description: Percentage of tll expiration that would trigger
sending message with type TTL_EXPIRING
format: int32
type: integer
name:
type: string
ttl:
description: Ttl in ms
format: int32
type: integer
required:
- name
type: object
type: array
required:
- address
type: object
status:
description: DiscoveryExportStatus defines the observed state of DiscoveryExport
properties:
lastUpdate:
type: string
message:
type: string
status:
type: string
required:
- lastUpdate
- message
- status
type: object
type: object
served: true
storage: true
subresources:
status: {}
---
apiVersion: apps.firepaws.io/v1
kind: CRDProxy
metadata:
name: synd-crdproxy-import
namespace: $SYND_NAMESPACE
serviceAccount:
- $SERVICE_ACCOUNT
data: |-
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryimports.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryImport
listKind: DiscoveryImportList
plural: discoveryimports
singular: discoveryimport
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryImport is the Schema for the discoveryimports API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryImportSpec defines the desired state of DiscoveryImport
properties:
billingResourceName:
type: string
templates:
items:
type: string
type: array
type: object
status:
description: DiscoveryImportStatus defines the observed state of DiscoveryImport
properties:
lastUpdate:
type: string
message:
type: string
status:
type: string
required:
- lastUpdate
- message
- status
type: object
type: object
served: true
storage: true
subresources:
status: {}
---
apiVersion: apps.firepaws.io/v1
kind: CRDProxy
metadata:
name: synd-crdproxy-templates
namespace: $SYND_NAMESPACE
serviceAccount:
- $SERVICE_ACCOUNT
data: |-
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoverytemplates.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryTemplate
listKind: DiscoveryTemplateList
plural: discoverytemplates
singular: discoverytemplate
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryTemplate is the Schema for the discoverytemplates API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryTemplateSpec defines the desired state of DiscoveryTemplate
properties:
envoyApiVersion:
description: EnvoyApiVersion is the version of the API of Envoy Synapse
Service Mesh that this template is for
type: string
template:
properties:
data:
description: Data is the blank template body (plaintext)
type: string
expiredPercentile:
description: Percentage of tll expiration that would trigger sending
message with type TTL_EXPIRING
format: int32
type: integer
name:
type: string
providerNamespaceSelector:
description: ProviderNamespaceSelector
properties:
matchExpressions:
description: MatchExpressions is a list of namespace selector
requirements. The requirements are ANDed.
items:
description: NamespaceSelectorRequirement is a selector
that contains values, a key, and an operator that relates
the key and values.
properties:
key:
description: Key is the namespace key that the selector
applies to.
type: string
operator:
description: Operator represents a key's relationship
to a set of values. Valid operators are In, NotIn,
Exists and DoesNotExist.
type: string
values:
description: Values is an array of string values. If
the operator is In or NotIn, the values array must
be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced
during a strategic merge patch.
items:
type: string
type: array
required:
- key
- operator
type: object
type: array
matchNamespaces:
additionalProperties:
type: string
description: MatchNamespaces is a map of {key,value} pairs.
A single {key,value} in the matchNamespaces map is equivalent
to an element of matchExpressions, whose key field is "key",
the operator is "In", and the values array contains only
"value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
ttl:
description: Ttl in ms
format: int32
type: integer
required:
- name
type: object
required:
- envoyApiVersion
- template
type: object
status:
description: DiscoveryTemplateStatus defines the observed state of DiscoveryTemplate
type: object
type: object
served: true
storage: true
subresources:
status: { }
---
apiVersion: apps.firepaws.io/v1
kind: CRDProxy
metadata:
name: synd-crdproxy-histories
namespace: $SYND_NAMESPACE
serviceAccount:
- $SERVICE_ACCOUNT
data: |-
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.11.1
name: discoveryhistories.discovery.synapse.sber
spec:
group: discovery.synapse.sber
names:
kind: DiscoveryHistory
listKind: DiscoveryHistoryList
plural: discoveryhistories
singular: discoveryhistory
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: DiscoveryHistory is the Schema for the discoveryhistories API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DiscoveryHistorySpec defines the desired state of DiscoveryHistory
properties:
params:
description: Foo is an example field of DiscoveryHistory. Edit discoveryhistory_types.go
to remove/update
type: string
type: object
status:
description: DiscoveryHistoryStatus defines the observed state of DiscoveryHistory
properties:
lastUpdate:
type: string
message:
type: string
status:
type: string
required:
- lastUpdate
- message
- status
type: object
type: object
served: true
storage: true
subresources:
status: {}
EOF
Ожидаемый результат:
apps.firepaws.io/synd-crdproxy-imports created
apps.firepaws.io/synd-crdproxy-exprots created
apps.firepaws.io/synd-crdproxy-templates created
apps.firepaws.io/synd-crdproxy-histories created
Установка#
Автоматическая установка сервиса#
При автоматической установке сервиса, необходимо убедиться, что выполнены шаги раздела «1. Создание директории установки» и «3. Установка необходимого перечня ресурсов».
Заполните стендозависимые параметры для установки компонента SYND, пример:
### Необходимо реализовать файл values.yaml
### Расположение файла в рамках git ветки job «SynapseInstaller» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»)
### Для компонента SYND: ${имя проекта для установки}/package/conf/k8s/base/helm/templates/values.yaml
values.yaml
registry: XXX.sw.sbc.space # Docker registry где расположен образ приложения SYND
registry_path_synd: Test # Path docker registry где расположен образ приложения SYND
replicas: 1 # Количество реплик SYND
resources:
requests:
cpu: 200m # ресурсы requests/cpu приложения synd
memory: 200Mi # ресурсы requests/memory приложения synd
limits:
cpu: 200m
memory: 200Mi
revisionHistoryLimit: 2
strategy:
deployment: RollingUpdate
maxSurge: 100% # установка параметра maxSurge в рамках «kind: Deployment»
maxUnavailable: 25% # установка параметра maxUnavailable в рамках «kind: Deployment»
dnsPolicy: ClusterFirst
restartPolicy: Always
podAffinity:
topologyKey: kubernetes.io/hostname
weight: 100
terminationGracePeriodSeconds: 10
livenessProbe:
failureThreshold: 30
readinessProbe:
failureThreshold: 30
labels:
- 'platformv.sber.ru/productCode: "SSM"'
- 'platformv.sber.ru/componentCode: "SYND"'
- 'platformv.sber.ru/releaseVersion: "5.4.0"'
revisionHistoryLimit: 2
# global labels
labels: # Список лейблов добавляемые к ресурсам synd
- 'platformv.sber.ru/productCode: "SSM"'
- 'platformv.sber.ru/componentCode: "SYND"'
- 'platformv.sber.ru/releaseVersion: "4.2"'
workloadLabels:
- 'platformv.sber.ru/binVersion: "5.4.0"'
- 'platformv.sber.ru/cfgVersion: "5.4.0"'
synd:
app: synd-synapsed # Название synd в рамках «kind: Deployment», использвется в качестве lable selector-а
lease:
name: synd-lease-synapsed # Название synd в рамках «kind: Lease», использвется в качестве определения лидера при работе с несколькими репликами
enbale: true
roleBinding:
name: synd-rb-synapsed # Название synd в рамках «kind: RoleBinging»
clusterRole:
name: synd-cr-base-synapsed
configMaps:
name: synd-cm-synapsed # Название configmap с конфигурацией жураналирования
envName: synd-env-synapsed # Название configmap с env параметрами SYND
volumeName: synd-volume # Название volum-a для монтирования configmap с конфигурацией жураналирования
mountPath: /etc/config # Путь по которому осужествляется монтирование
logs_volume: synd-logs-volume # Назавние volum-a для файла с логами
svc:
name: synd-svc-synapsed
dsr:
name: synd-dsr-synapsed
ingress:
name: synd-ingress-synapsed # Название ingress, опционально, если установлен ingress
egress:
name: synd-egress-synapsed # Название egress, опционально, если установлен egress
grpc_port: 40003 # Значение параметра SYND_GRPC_PORT — порт по которому SYND осуществляет прослушивание запросов
cacheMap:
globalTtl: 32000000 # Значение параметра TTL_GLOBAL_VALUE — время жизни кеша в секундах
globalTtlPriority: true # Значение параметра TTL_GLOBAL_PRIORITY — в приоритете ли глобалное время жизни кеша, заданого параметром TTL_GLOBAL_VALUE
pruneInterval: 10000 # Значение параметра PRUNE_INTERVAL — переодичность опроса на предмет окончания времени жизни кеша
proxy:
synd:
featureToggle: true
timeout: 10
monitoring:
port: 8081 # Порт для получения метрик
endpoint: /metrics # Путь для получения метрик
sidecarResources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 250m
memory: 250Mi
egress: # Параметры для egress
replicas: 1
readinessProbe:
failureThreshold: 30
initialDelaySeconds: 1
periodSeconds: 2
successThreshold: 1
timeoutSeconds: 1
affinity: 'true'
affinityMatchKey: 'kubernetes.io/arch'
affinityMatchValues:
- amd64
- ppc64le
- s390x
resources:
limits:
cpu: 100m
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
tracing:
zipkin:
svc: synapse-tracer-svc
port: 8788
sampling: 100
maxPathTagLength: 256
tlsSettings:
caCertificates: "/var/run/secrets/istio/root-cert.pem"
mode: SIMPLE
tlsKafka: # Пути к сертификатам уже установленного eress-a для kafka
ca: "ca"
crt: "crt"
key: "key"
logs:
app: synapse-logs-agent
enable: 'true' # флаг определяющий необходимость установки synapse-logs-agent
configMaps:
name: synd-logs-agent-config
healthCheckPort: 8083
resources: # ресурсы requests/limits приложения synapse-logs-agent
limits: # максимальные ресурсы synapse-logs-agent
cpu: 200m
memory: 300Mi
requests: # минимальные ресурсы synapse-logs-agent
cpu: 100m
memory: 100Mi
kafka:
mesh_install: 'true' # флаг определяющий необходимость установки kafka-mesh в namespace с SYND
service: synd-egress-kafka-mesh # Название сервиса kafka-mesh
kafka_mesh_virtual_port: 19093 # Номер порта который слушает сервис
address: kafka-address # Адресс kafka
port: 443 # Порт kafka
topic: synd-test # Имя топика
gatm:
enable_namespace_synd: 'true' # установлен ли Gatm в namespace с SYND
tlsSettings: # Пути к сертификатам уже установленного eress-a GATM
ca: /secret/config/ssl/tengri_ca.cer
clientCertificate: /secret/config/ssl/tengri.pem
privateKey: /secret/config/ssl/tengri.key
indexInstall: ''
roleBindings:
useCustom:
install: "false"
crd:
service_account:
name: synd-sa-synapsed # Название service account-а
cluster_role_binding:
name: synd-crb-synapsed # Название cluster role binding-а
cluster_role:
name: synd-cr-synapsed # Название cluster role-а
history:
name: synd-discovery-history-crd-synapsed # Назавание ресурса в рамках «kind: DiscoveryTemplate»
limit_size: 734004 # Значение для параметра HISTORY_LIMIT_SIZE
kubeAPIIP: { IP_ADDRESS }
kubePort: 443
kubeFakePort: 5443
serviceIstiod: istiod-synapse-control-panel
istioControlPlane: synapse-control-panel
Настройка интеграции#
Мониторинг#
Интеграция с компонентом «Сбор и анализ метрик» (GATM) путем добавления конфигураций согласно документации на компонент GATM, документ «Руководство прикладного разработчика» раздел «Подключение и конфигурирование».
Пример интеграции#
Для анализа прикладных показателей SYND был разработан пример dashboard-а, который анализирует метрики, подробно описанные в разделе «События мониторинга» в руководстве по системному администрированию:
kind: ConfigMap
apiVersion: v1
metadata:
name: synapse-discovery-dashboard
data:
synapse-discovery-dashboard.json: |
{{`{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"description": "Dashboard for sdp metrics",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 8,
"links": [],
"panels": [
{
"datasource": {
"type": "prometheus"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "#FADE2A",
"value": null
},
{
"color": "semi-dark-red",
"value": 80
}
]
},
"unitScale": true
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"displayMode": "gradient",
"maxVizHeight": 300,
"minVizHeight": 16,
"minVizWidth": 8,
"namePlacement": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showUnfilled": true,
"sizing": "auto",
"valueMode": "color"
},
"pluginVersion": "10.4.0-pre",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_configs_received{namespace=<user-ns>}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "configs_received_ok",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_configs_received_failed{namespace=<user-ns>}",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "configs_received_failed",
"useBackend": false
}
],
"title": "Configs received status",
"type": "bargauge"
},
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "dark-red",
"value": 100
}
]
},
"unitScale": true
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
},
"id": 2,
"options": {
"displayMode": "gradient",
"maxVizHeight": 300,
"minVizHeight": 16,
"minVizWidth": 8,
"namePlacement": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showUnfilled": true,
"sizing": "auto",
"valueMode": "color"
},
"pluginVersion": "10.4.0-pre",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_response_to_proxy_success{namespace=<user-ns>}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "Response to Proxy Success",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_response_to_proxy_fail{namespace=<user-ns>}",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "Response to Proxy Failed",
"useBackend": false
}
],
"title": "Response to proxy status",
"type": "bargauge"
},
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"fieldMinMax": false,
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unitScale": true
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 8
},
"id": 3,
"options": {
"displayMode": "basic",
"maxVizHeight": 300,
"minVizHeight": 16,
"minVizWidth": 8,
"namePlacement": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "/^\\{__name__=\"synapse_discovery_envoy_current_connections_active\", app=\"synapse\\-discovery\", cluster=<cluser>, instance=<ip>, job=<job-name>, namespace=<user-ns>, pod=\"synapse\\-discovery\\-<uid>\", pod_template_hash=<uid>, security_istio_io_tlsMode=\"istio\", service_istio_io_canonical_name=\"synapse\\-discovery\", service_istio_io_canonical_revision=\"v1\", version=\"v1\"\\}$/",
"values": false
},
"showUnfilled": true,
"sizing": "auto",
"valueMode": "color"
},
"pluginVersion": "10.4.0-pre",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_envoy_current_connections_active{namespace=<user-ns>}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "Active Envoy Connections",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_envoy_connections_fail{namespace=<user-ns>}",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "Failed Envoy Connections",
"useBackend": false
},
{
"datasource": {
"type": "prometheus",
"uid": <uid>
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "synapse_discovery_envoy_connections_total{namespace=<user-ns>}",
"fullMetaSearch": false,
"hide": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "__auto",
"range": true,
"refId": "Total Envoy Connections",
"useBackend": false
}
],
"title": "Envoy Connections",
"type": "bargauge"
}
],
"refresh": "5s",
"schemaVersion": 39,
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-5m",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "Synapse Discovery Metrics",
"uid": <uid>,
"version": 4,
"weekStart": ""
}`}}
В «kind: Deployment» synapse-metrics примонтируйте файл, с новым dashboard-ом, указав файловую систему как точку монтирования.
kind: Deployment
apiVersion: apps/v1
metadata:
name: synapse-metrics-dashboard
labels:
app.kubernetes.io/instance: synapse-metrics-dashboard
app.kubernetes.io/name: dashboard
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/instance: synapse-metrics-dashboard
app.kubernetes.io/name: dashboard
template:
metadata:
labels:
app.kubernetes.io/instance: synapse-metrics-dashboard
app.kubernetes.io/name: dashboard
spec:
...
volumeMounts:
...
- name: synapse-discovery-dashboard
mountPath: /var/lib/grafana/dashboards/synapse-discovery-dashboard
...
volumes:
...
- name: synapse-discovery-dashboard
configMap:
name: synapse-discovery-dashboard
defaultMode: 256
...
Для того чтобы GATM мог собирать данные, необходимо добавить «kind: ConfigMap» с настройкой опроса.
apiVersion: v1
kind: ConfigMap
metadata:
name: synapse-metrics-agent-scrapeconfig
labels:
platformv.sber.ru/productCode: "SSM"
platformv.sber.ru/componentCode: "GATM"
platformv.sber.ru/releaseVersion: "3.9"
data:
scrape.yml: |
global:
...
scrape_configs:
- job_name: 'prom-endpoint'
scrape_interval: 5s
metrics_path: '/metrics'
static_configs:
- targets:
- synapse-discovery.***.svc.cluster.local:8888
...
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: istio-data-plane-pods
kubernetes_sd_configs:
- role: pod
namespaces:
names: ["data-plane2", "istio-system"]
relabel_configs:
- action: keep
regex: synapse-discovery
source_labels:
- __meta_kubernetes_pod_container_name
...
- action: replace
regex: ([^:]+)(?::\d+)?
replacement: $1:8888/metrics
source_labels:
- __address__
target_label: __address__
...
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: istio-pods
metrics_path: /stats/prometheus
kubernetes_sd_configs:
- role: pod
namespaces:
names: ["data-plane2", "{{ .Values.egress.istioControlPlane }}", "synapse-metrics-systems"]
...
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: istio-cp-pods
kubernetes_sd_configs:
- role: pod
namespaces:
names: ["data-plane2", "{{ .Values.egress.istioControlPlane }}", "synapse-metrics-systems"]
Изменения в стандартном values.yaml в helm-chart GATM: $SYND_NAMESPACE=<имя namespace с Synapse-Discovery>
...
system_metrics_targets:
...
- name: metrics
namespace: $SYND_NAMESPACE
relabel_regex: "('kube_deployment_status_replicas_available|kube_deployment_status_replicas|container_memory_usage_bytes')"
...
Для отправки логов компонента SYND в Kafka(GATM) необходимо добавить следующий конфигурационный файл:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.logs.configMaps.name }}
data:
telegraf.conf: |-
[[inputs.tail]]
files = ["/logs/synd.logs"]
name_override = "synd-logs"
data_format = "json"
json_string_fields = ["*"]
tag_keys = ["level"]
[[outputs.file]]
files = ["stdout"]
data_format = "json"
[[outputs.health]]
service_address = "http://:{{ .Values.logs.healthCheckPort }}"
[[processors.override]]
[processors.override.tags]
logLevel = "info"
namespace = "$POD_NAMESPACE"
podName = "$POD_NAME"
service = "$DEPLOYMENT_NAME"
[agent]
debug = false
interval = "2s"
flush_interval = "10s"
metric_batch_size = 10
[[outputs.kafka]]
startup_error_behavior = "retry"
topic = "{{ .Values.kafka.topic }}"
brokers = ["{{ .Values.kafka.service }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.kafka.kafka_mesh_virtual_port }}"]
compression_codec = 0
data_format = "json"
routing_tag = "message"
enable_tls = false
json_timestamp_format = "2006-01-02T15:04:05Z07:00"
max_retry = 3
keep_alive_period = "10s"
В «kind: Deployment» synd-synapsed необходимо добавить дополнительный контейнер synd-logs-agent. Более подробно можно ознакомиться в документации GATM «Руководство по системному администрированию»
kind: Deployment
...
spec:
containers:
- name: synapse-logs-agent
image: ${ссылка на image приложений Agent (logs)}
args:
- '--watch-config=poll'
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: NODE_PATH
value: some.value
- name: DEPLOYMENT_NAME
value: synd-synapsed
resources:
limits:
cpu: 1400m
memory: 400Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- name: synd-logs-agent-config
mountPath: /var/logs-agent
- name: synd-logs-volume
mountPath: /logs
livenessProbe:
httpGet:
path: /health
port: 8083
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
periodSeconds: 20
successThreshold: 1
failureThreshold: 5
readinessProbe:
httpGet:
path: /ready
port: 8083
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 5
periodSeconds: 15
successThreshold: 1
failureThreshold: 30
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
securityContext:
capabilities:
drop:
- ALL
privileged: false
runAsUser: 10001
runAsGroup: 10001
runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
...
volumes:
...
- name: synd-logs-agent-config
configMap:
name: synd-logs-agent-config
defaultMode: 256
Так же необходимы конфигурации для kafka-mesh
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
labels:
{{ range $_, $l := .Values.labels }}
{{ $l -}}
{{ end }}
name: synd-kafka-mesh-drs
spec:
exportTo:
- .
host: {{ .Values.kafka.address }}
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
portLevelSettings:
- port:
number: {{ .Values.kafka.port }}
tls:
{{- if eq .Values.gatm.enable_namespace_synd "true" }}
caCertificates: {{ .Values.gatm.tlsSettings.ca }}
clientCertificate: {{ .Values.gatm.tlsSettings.clientCertificate }}
privateKey: {{ .Values.gatm.tlsSettings.privateKey }}
{{ else }}
caCertificates: {{ .Values.egress.tlsKafka.ca }}
clientCertificate: {{ .Values.egress.tlsKafka.crt }}
privateKey: {{ .Values.egress.tlsKafka.key }}
{{ end }}
mode: MUTUAL
sni: {{ .Values.kafka.address }}
workloadSelector:
matchLabels:
{{- if eq .Values.gatm.enable_namespace_synd "true" }}
istio: egw-syn-metrics-{{ .Release.Namespace }}
{{ else }}
istio: egw-syn-discovery-{{ .Release.Namespace }}
{{ end }}
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
labels:
{{ range $_, $l := .Values.labels }}
{{ $l -}}
{{ end }}
name: synd-kafka-mesh-local-drs
spec:
exportTo:
- .
host: {{ .Values.kafka.service }}.{{ .Release.Namespace }}.svc.cluster.local
trafficPolicy:
portLevelSettings:
- port:
number: {{ .Values.kafka.port }}
tls:
mode: ISTIO_MUTUAL
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: {{ .Values.kafka.service }}-gw
labels:
{{ range $_, $l := .Values.labels }}
{{ $l -}}
{{ end }}
spec:
selector:
{{- if eq .Values.gatm.enable_namespace_synd "true" }}
istio: egw-syn-metrics-{{ .Release.Namespace }}
{{ else }}
istio: egw-syn-discovery-{{ .Release.Namespace }}
{{ end }}
servers:
- hosts:
- {{ .Values.kafka.service }}.{{ .Release.Namespace }}.svc.cluster.local
port:
name: kafka-{{ .Values.kafka.kafka_mesh_virtual_port }}
number: {{ .Values.kafka.kafka_mesh_virtual_port }}
protocol: kafka
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: synd-kafka-mesh-cluster-se
labels:
{{ range $_, $l := .Values.labels }}
{{ $l -}}
{{ end }}
spec:
endpoints:
- address: {{ .Values.kafka.address }}
ports:
kafka-{{ .Values.kafka.port }}: {{ .Values.kafka.port }}
exportTo:
- .
hosts:
- {{ .Values.kafka.address }}
location: MESH_EXTERNAL
ports:
- name: kafka-{{ .Values.kafka.port }}
number: {{ .Values.kafka.port }}
protocol: kafka
resolution: DNS
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.kafka.service }}
labels:
{{ range $_, $l := .Values.labels }}
{{ $l -}}
{{ end }}
spec:
ports:
- name: kafka-{{ .Values.kafka.kafka_mesh_virtual_port }}
protocol: TCP
port: {{ .Values.kafka.kafka_mesh_virtual_port }}
targetPort: {{ .Values.kafka.kafka_mesh_virtual_port }}
selector:
{{- if eq .Values.gatm.enable_namespace_synd "true" }}
istio: egw-syn-metrics-{{ .Release.Namespace }}
{{ else }}
istio: egw-syn-discovery-{{ .Release.Namespace }}
{{ end }}
sessionAffinity: None
type: ClusterIP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: synd-kafka-mesh-egress-vs
labels:
{{ range $_, $l := .Values.labels }}
{{ $l -}}
{{ end }}
spec:
exportTo:
- .
gateways:
- {{ .Values.kafka.service }}-gw
- mesh
hosts:
- {{ .Values.kafka.service }}.{{ .Release.Namespace }}.svc.cluster.local
tcp:
- match:
- gateways:
- {{ .Values.kafka.service }}-gw
port: {{ .Values.kafka.kafka_mesh_virtual_port }}
route:
- destination:
host: {{ .Values.kafka.address }}
port:
number: {{ .Values.kafka.port }}
weight: 100
level - уровень логирования
info
debug
trace
warn
error
fatal
[outputs.kafka]#
Данный транспорт отвечает за отправку логов в Kafka.
Поле |
Формат |
Описание |
Обязательный |
Значение по умолчанию |
|---|---|---|---|---|
topic |
string |
Topic kafka |
да |
— |
brokers |
array |
Cписок брокеров Kafka |
нет |
100 |
data_format |
string |
Формат данных |
нет |
1 048 576 |
routing_tag |
string |
Tег routing определяет ключ в метрике, значение которого используется в качестве ключа сообщения. Ключ message используется для определения того, в какой раздел отправлять сообщение |
нет |
1 000 |
max_retry |
int |
Максимальное количество попыток отправить сообщение |
нет |
10 |
compression_codec |
int |
Кодек сжатия, распознаваемый Kafka в сообщениях (0 : None, 1 : Gzip, 2 : Snappy, 3 : LZ4, 4 : ZSTD) |
нет |
10 000 |
enable_tls |
bool |
Tспользование TLS (true/false) |
да |
— |
Подробнее можно ознакомиться в документации GATM «Руководство по установке»
Обновление#
Установить конфигурации из раздела «Установить необходимый перечень ресурсов».
Шаг |
Действия |
Описание |
|---|---|---|
Создание директории для установки |
На компьютере, с которого будет производиться установка, создайте папку, например «synapse-discovery» |
— |
Распаковка архива с файлами |
Распакуйте в созданную папку архив с конфигурационными артефактами компонента SYND |
— |
Подключиться к проекту#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Вход в kubernetes |
Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную |
— |
Настройка контекста |
Введите команду: |
— |
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка компонента |
В консоли выполните команду |
— |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Сохранение Deployment |
В консоли выполните команду: |
— |
Сохранение конфигурации |
В консоли выполните команду: |
— |
Удаление Deployment |
В консоли выполните команду: |
— |
Удаление конфигурации |
В консоли выполните команду: |
При необходимости измените конфигурацию |
Загрузить новую версию#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Загрузка конфигурации |
В консоли выполните команду: |
С новыми конфигурационными файлами |
Загрузка Deployment |
В консоли выполните команду: |
С новой версией «kind: Deployment» |
Запустить новую версию компонента#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Запуск новой версии компонента |
В консоли выполните команду |
$N — необходимое количество «kind: Pod», рекомендованное значение 2 |
Удаление#
Подключиться к проекту#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Вход в kubernetes |
Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную |
— |
Настройка контекста |
В консоли выполните команду: |
— |
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполните команду |
— |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Удаление Deployment |
В консоли выполните команду: |
— |
Удаление конфигурации |
В консоли выполните команду: |
— |
Удаление всех зависимых ресурсов из раздела «Установка необходимого перечня ресурсов» |
В консоли выполните команду: |
— |
Проверка работоспособности#
Шаг |
Действия |
Описание |
|---|---|---|
Проверка работоспособности компонента SYND |
В консоли выполните команду (контейнера «synapse-discovery»): |
$NUMBER_PORT — номер порта указанный в параметре server/port |
Также проверьте отсутствие ошибок в рамках логов приложения.
Проверка работоспособности интеграции компонента SYND с компонентом «Platform V Synapse Service Mesh» (GATM) указана в разделе «Чек-лист валидации установки» текущего документа.
Откат#
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполните команду |
— |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Сохранение Deployment |
В консоли выполните команду: |
— |
Сохранение конфигурации |
В консоли выполните команду: |
— |
Удаление Deployment |
В консоли выполните команду: |
— |
Удаление конфигурации |
В консоли выполните команду: |
При необходимости измените конфигурацию |
Загрузить сохраненные артефакты#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Загрузка конфигурации в рамках компонента |
В консоли выполните команду: |
Переменная $FILE_NAME в рамках добавления необходимых конфигураций компонента («kind: Deployment»/«kind: ConfigMap») |
Запустить восстановленную версию компонента#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Запуск восстановленной версии компонента |
В консоли выполните команду |
$N — необходимое количество «kind: Pod», рекомендованное значение 2 |
Часто встречающиеся проблемы и пути их устранения#
Проблема |
Причина |
Решение |
|---|---|---|
Ошибка при подключении к проекту |
Пользователю не предоставлен доступ в проект. |
Запросить доступ к проекту у администратора кластера |
Ошибка при загрузке артефактов |
У пользователя, под которым производится загрузка отсутствуют необходимые права |
Запросить доступ к проекту у администратора кластера |
Ошибка при Pull docker-образа из репозитория |
Отсутствуют права на Pull образа из репозитория. |
Запросить права у администратора registry. |
Чек-лист валидации установки#
Проверка |
Действия |
Результат |
|---|---|---|
Все артефакты загружены в проект |
По списку артефактов найдите их в «namespace Kubernetes» |
— |
Все Pod компонента запущены |
Найдите Deployment, перейдите на вкладку Pods, проверьте, что статус всех Pods — Running |
— |
Отсутствие ошибок в логах контейнеров |
Для каждого Pod проверьте на вкладке Logs, что в логе контейнеров Pod отсутствуют ошибки |
— |
Убедиться что в случае использования GATM, компонент настроен корректно (убедиться, что метрики успешно сохраняются в хранилище) |
Проверьте работоспособность GATM |
Компонент работает корректно |