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

В руководстве приведены инструкции по установке компонента 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

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

Для установки требуется соблюдение следующих условий:

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

  2. В кластере создан проект («Namespace»), в котором установлена контрольная панель (POLM).

  3. В проекте создана учетная запись с правами на загрузку артефактов.

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

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

  6. Подключен и настроен компонент SMDL, опционально Proxy Operator.

  7. В кластере создан проект («Namespace»), где будет реализован программный компонент Synapse Discovery (код SYND) из состава программного продукта Platform V Synapse Service Mesh (код SSM).

  8. В рамках реализованного проекта созданы необходимые роли («kind:Role»/«kind: ClusterRole») и привязки к ролям ( «kind: RoleBinding»/«kind: ClusterRoleBinding») в рамках ролевой модели компонента SYND.

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

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

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

Категория ПО

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

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

Версия

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

Описание

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

Да

Alt Linux SP8

10

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

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

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

Да

Red Hat OpenShift

7.9

Опционально

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

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

Да

Kubernetes

1.24 и выше

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

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

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

Да

Docker CE

19.03.14 и выше

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

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

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

Да

GitLab CE

15 и выше

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

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

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

Нет

Bitbucket

6.7.5 и выше

Опционально

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

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

Да

Nexus-public

2.15.1 и выше

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

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

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

Нет

Nexus Repository Manager PRO

2 и выше

Опционально

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

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

Нет

Nexus Repository Manager OSS

2 и выше

Опционально

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

Иное

Нет

Istio

1.6 и выше

Опционально

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

Иное

Нет

Helm

3 и выше

Опционально

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

Иное

Нет

kubectl CLI

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) должны быть выполнены следующие условия:

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

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

  3. Опционально в кластере может быть установлен Proxy Operator.

  4. В проекте создана учетная запись с правами на get, list, watch ресурсов Pod и Namespace.

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

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

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

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

  9. Для установки через консоль на рабочем месте должен быть установлен клиент 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 компонента
        }
      ]
    }
  ]
}
  1. Запустите инструмент автоматической сборки продукта SSM, компонента SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будут собранные артефакты для установки приложения (на email запустившего job сотрудника придет таблица со ссылками на артефакты).

  2. Проверьте корректность подстановки образов по шаблону, указанному в шаге 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» с правами администратора. Заведите переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация.

Настройка контекста

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

Добавление необходимого перечня ресурсов

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

3. Установка необходимого перечня ресурсов#

В рамках предоставляемого дистрибутива реализованы все необходимые ресурсы для успешного функционирования компонента SYND. Установка может быть произведена с использованием Proxy Operator, для этого измените флаг .Values.crd.proxy.deploy в файле values.yaml.

Установка общих ресурсов#

  1. Ресурсы в рамках ролевой модели («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#

  1. Ресурсы в рамках ролевой модели («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
  1. Установка 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#

  1. Установка 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. Установка необходимого перечня ресурсов».

  1. Заполните стендозависимые параметры для установки компонента 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». Заведите переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация

Настройка контекста

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

Сохранение Deployment

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

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

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

Удаление Deployment

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

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

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

Загрузка Deployment

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

Удаление#

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

  • Через CLI Kubectl

Шаг

Действия

Описание

Вход в kubernetes

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

Настройка контекста

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

Удаление Deployment

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

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

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

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

В консоли выполните команду:
kubectl delete customresourcedefinitions/<имя custom resource definitions>

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

Шаг

Действия

Описание

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

В консоли выполните команду (контейнера «synapse-discovery»):
kubectl port-forward pod/<имя Pod> <portnum>:<portnum>
Запустите еще одно окно консоли, в нем выполните команду:
curl localhost:${NUMBER_PORT}/health
Команда должна вывести строку «HTTP 1.1 200».
Завершите forwarding портов нажатием Ctrl+C

$NUMBER_PORT — номер порта указанный в параметре server/port

Также проверьте отсутствие ошибок в рамках логов приложения.

Проверка работоспособности интеграции компонента SYND с компонентом «Platform V Synapse Service Mesh» (GATM) указана в разделе «Чек-лист валидации установки» текущего документа.

Откат#

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

Сохранение Deployment

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

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

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

Удаление Deployment

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

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

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

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

  • Через CLI Kubectl

Шаг

Действия

Описание

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

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

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

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

Проблема

Причина

Решение

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

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

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

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

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

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

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

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

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

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

Проверка

Действия

Результат

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

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

Все Pod компонента запущены

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

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

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

Убедиться что в случае использования GATM, компонент настроен корректно (убедиться, что метрики успешно сохраняются в хранилище)

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

Компонент работает корректно