Argo-events#

Argo-events — фреймворк для автоматизации событийных процессов, позволяющий запускать рабочие процессы (workflows), управлять зависимостями и реагировать на события из различных источников.

Основные задачи и возможности
  • Событийная автоматизация: Позволяет запускать Kubernetes-объекты, Argo Workflows, serverless-нагрузки и другие задачи в ответ на внешние или внутренние события.

  • Интеграция со множеством источников событий: Поддерживает более 20 типов источников событий, таких как GitHub, Slack, AWS S3, HTTP-запросы, таймеры и другие.

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

  • Работа с архитектурой Event-Driven: Обеспечивает гибкую интеграцию с event-driven системами, что делает его удобным для построения реактивных и автоматизированных пайплайнов.

Ключевые элементы:

  • EventSource — источник событий;

  • Sensor — ожидает событие и запускает триггер;

  • Trigger — действие, выполняемое при наступлении события;

  • EventBus — шина событий для маршрутизации и управления потоками.

Примечание

Argo-events является инструментом по умолчанию в составе «Devops» и устанавливается с ним автоматически.

Конфигурация values#

Значения можно переопределить через редактирование инструмента с именем argo-events и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».

nameOverride – переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

nameOverride

Переопределение базового имени ресурсов чарта для генерации имен

argo-events

fullnameOverride – полное переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

fullnameOverride

Полное переопределение имени для всех создаваемых ресурсов чарта

""

namespaceOverride – переопределение пространства имен#

Параметр

Описание

Значение по умолчанию

namespaceOverride

Переопределение пространства имен вместо значения по умолчанию

""

openshift – режим развертывания для OpenShift#

Параметр

Описание

Значение по умолчанию

openshift

Включает особенности развертывания, необходимые для OpenShift

false

createAggregateRoles – агрегированные ClusterRole#

Параметр

Описание

Значение по умолчанию

createAggregateRoles

Создание агрегированных ClusterRole для работы с CRD Argo Events (используется при кластерном режиме)

false

crds – настройки установки и обновления Custom Resource Definitions (CRD)#

Параметр

Описание

Значение по умолчанию

crds.install

Установка и обновление CRD во время helm install/upgrade

true

crds.keep

Сохранение CRD при удалении чарта (helm uninstall)

true

crds.annotations

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

{}

configs – конфигурация шины событий#

Параметр

Описание

Значение по умолчанию

configs.nats.versions

Список поддерживаемых версий NATS и образов для контейнеров. Каждая запись содержит version, natsStreamingImage, metricsExporterImage

- version: latest
  natsStreamingImage: nats-streaming:latest
  metricsExporterImage: natsio/prometheus-nats-exporter:latest
- version: 0.22.1
  natsStreamingImage: nats-streaming:0.22.1
  metricsExporterImage: natsio/prometheus-nats-exporter:0.8.0

configs.jetstream.settings.maxMemoryStore

Максимальный объем оперативной памяти для хранения данных JetStream (например, 1G)

-1

configs.jetstream.settings.maxFileStore

Максимальный объем файлового хранилища JetStream (например, 20G)

-1

configs.jetstream.streamConfig.maxMsgs

Максимальное количество сообщений, хранящихся в одном потоке JetStream. После превышения лимита старые сообщения будут удалены

1000000

configs.jetstream.streamConfig.maxAge

Максимальное время хранения сообщений в одном потоке JetStream (например, 72h, 4h35m)

72h

configs.jetstream.streamConfig.maxBytes

Максимальный совокупный объем данных всех сообщений в одном потоке JetStream. При 0 ограничение снимается

1GB

configs.jetstream.streamConfig.replicas

Количество реплик потока JetStream. Минимальное значение - 3

3

configs.jetstream.streamConfig.duplicates

Интервал обнаружения дубликатов сообщений

300s

configs.jetstream.streamConfig.retention

Политика хранения сообщений в потоке JetStream

0

configs.jetstream.streamConfig.discard

Политика удаления сообщений при переполнении лимитов потока

0

configs.jetstream.versions

Массив поддерживаемых версий JetStream с образами NATS. Каждая запись содержит version, natsImage, metricsExporterImage, configReloaderImage, startCommand

- version: latest
  natsImage: nats:2.10.10
  metricsExporterImage: natsio/prometheus-nats-exporter:0.14.0
  configReloaderImage: natsio/nats-server-config-reloader:0.14.0
  startCommand: /nats-server
- version: 2.8.1
  natsImage: nats:2.8.1
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: /nats-server
- version: 2.8.1-alpine
  natsImage: nats:2.8.1-alpine
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: nats-server
- version: 2.8.2
  natsImage: nats:2.8.2
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: /nats-server
- version: 2.8.2-alpine
  natsImage: nats:2.8.2-alpine
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: nats-server
- version: 2.9.1
  natsImage: nats:2.9.1
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: /nats-server
- version: 2.9.12
  natsImage: nats:2.9.12
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: /nats-server
- version: 2.9.16
  natsImage: nats:2.9.16
  metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1
  configReloaderImage: natsio/nats-server-config-reloader:0.7.0
  startCommand: /nats-server
- version: 2.10.10
  natsImage: nats:2.10.10
  metricsExporterImage: natsio/prometheus-nats-exporter:0.14.0
  configReloaderImage: natsio/nats-server-config-reloader:0.14.0
  startCommand: /nats-server

extraObjects – дополнительные объекты Helm-чарта#

Параметр

Описание

Значение по умолчанию

extraObjects

Добавление дополнительных динамических объектов в Helm-чарте.
Пример конфигурации:

- apiVersion: secrets-store.csi.x-k8s.io/v1
  kind: SecretProviderClass
  metadata:
    name: argo-events-secrets-store
  spec:
    provider: aws
    parameters:
      objects: |
        - objectName: "argo-events"
          objectType: "secretsmanager"
          jmesPath:
            - path: "client_id"
              objectAlias: "client_id"
            - path: "client_secret"
              objectAlias: "client_secret"
    secretObjects:
    - data:
      - key: client_id
        objectName: client_id
      - key: key
        objectName: client_secret
      secretName: argo-events-secrets-store
      type: Opaque
      labels:
        app.kubernetes.io/part-of: argocd

[]

controller – контроллер событий#

Параметр

Описание

Значение по умолчанию

controller.name

Имя Deployment контроллера

controller-manager

controller.rbac.enabled

Создание RBAC-объектов для контроллера событий

true

controller.rbac.namespaced

Ограничение прав контроллера текущим пространством имен

false

controller.rbac.managedNamespace

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

""

controller.rbac.rules

Дополнительные пользовательские RBAC-правила для контроллера событий

[]

controller.image.repository

Путь к Docker-образу контроллера (использует глобальные переменные)

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-argo-events/argo-events'

controller.image.tag

Тег образа контейнера

v1.9.11

controller.image.imagePullPolicy

Политика загрузки образа. Если не задано, будет взято значение из global

""

controller.revisionHistoryLimit

Количество предыдущих версий ресурса, сохраняемых для отката

5

controller.replicas

Количество реплик pod; при значении 1 выключается выбор лидера (leader election)

1

controller.pdb.enabled

Создание PodDisruptionBudget для контроллера событий

false

controller.pdb.labels

Метки для PodDisruptionBudget контроллера событий

{}

controller.pdb.annotations

Аннотации для PodDisruptionBudget контроллера событий

{}

controller.env

Параметры переменных окружения контейнера (debug, info, error).
Пример конфигурации:

- name: LOG_LEVEL
  value: "debug"

[]

controller.envFrom

Альтернативные источники переменных окружения для контроллера событий.
Пример конфигурации:

- configMapRef:
    name: config-map-name
- secretRef:
    name: secret-name

[]

controller.podAnnotations

Дополнительные аннотации для pod контроллера событий

{}

controller.deploymentAnnotations

Дополнительные аннотации для Deployment контроллера событий

{}

controller.podLabels

Дополнительные метки для pod контроллера событий

{}

controller.containerSecurityContext

Параметры контекста безопасности контейнера.
Пример конфигурации:

capabilities:
  drop:
    - all
readOnlyRootFilesystem: true
runAsNonRoot: true

{}

controller.readinessProbe.failureThreshold

Количество неудачных попыток до перевода контейнера в статус NotReady

3

controller.readinessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой готовности

10

controller.readinessProbe.periodSeconds

Интервал в секундах между проверками готовности

10

controller.readinessProbe.successThreshold

Количество успешных попыток для подтверждения готовности

1

controller.readinessProbe.timeoutSeconds

Тайм-аут проверки готовности контейнера контроллера событий в секундах

1

controller.livenessProbe.failureThreshold

Количество неудачных попыток до перевода контейнера в статус NotReady

3

controller.livenessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой работоспособности

10

controller.livenessProbe.periodSeconds

Интервал в секундах между проверками работоспособности

10

controller.livenessProbe.successThreshold

Количество успешных попыток для подтверждения работоспособности

1

controller.livenessProbe.timeoutSeconds

Тайм-аут проверки работоспособности контейнера контроллера событий в секундах

1

controller.volumes

Дополнительные тома (Volume) для pod.
Пример конфигурации:

volumes:
  - name: ""
    configMap:
      name: ""
  - name: ""
    emptyDir: {}

[]

controller.volumeMounts

Дополнительные точки монтирования томов (VolumeMount)

[]

controller.nodeSelector

Селектор узлов для планирования pod

{}

controller.tolerations

Toleration для размещения pod на узлах с ограничениями (taints)

[]

controller.affinity

Настройки правила привязки (affinity и anti-affinity) pod к узлам

{}

controller.topologySpreadConstraints

Ограничения топологии для равномерного распределения pod по зонам доступности и узлам.
Пример конфигурации:

- maxSkew: 1
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule

[]

controller.priorityClassName

Имя PriorityClass для pod

""

controller.resources

Запросы и ограничения ресурсов для pod.
Пример конфигурации:

limits:
  cpu: 500m
  memory: 512Mi
requests:
  cpu: 250m
  memory: 256Mi

{}

controller.extraContainers

Дополнительные контейнеры для pod контроллера событий

[]

controller.initContainers

Список init-контейнеров, запускаемых перед основными

[]

controller.serviceAccount.create

Создание нового ServiceAccount; при значении false в serviceAccount.name указывается существующий

true

controller.serviceAccount.name

Имя ServiceAccount; при пустом значении и create: true имя генерируется автоматически

""

controller.serviceAccount.annotations

Дополнительные аннотации для ServiceAccount

{}

controller.serviceAccount.automountServiceAccountToken

Автоматическое монтирование токена ServiceAccount в pod контроллера событий

true

controller.metrics.enabled

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

true

controller.metrics.service.annotations

Аннотации сервиса метрик контроллера событий

{}

controller.metrics.service.labels

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

{}

controller.metrics.service.servicePort

Порт сервиса метрик контроллера событий

8082

controller.metrics.serviceMonitor.enabled

Создание ServiceMonitor Prometheus для контроллера событий

false

controller.metrics.serviceMonitor.interval

Интервал опроса метрик в ServiceMonitor

30s

controller.metrics.serviceMonitor.relabelings

Правила фильтрации и преобразования меток, применяемые к целям сбора до начала сбора метрик в ServiceMonitor

[]

controller.metrics.serviceMonitor.metricRelabelings

Правила фильтрации и преобразования меток, применяемые к собранным метрикам в ServiceMonitor

[]

controller.metrics.serviceMonitor.selector

Селектор для Prometheus в ServiceMonitor.
Пример конфигурации:

prometheus: kube-prometheus

{}

controller.metrics.serviceMonitor.namespace

Пространство имен ServiceMonitor

""

controller.metrics.serviceMonitor.additionalLabels

Дополнительные метки для ServiceMonitor

{}

webhook – вебхук для валидации CRD#

Параметр

Описание

Значение по умолчанию

webhook.enabled

Включение Webhook доступа; применяется только при кластерном режиме

false

webhook.name

Имя Deployment сервера Webhook

events-webhook

webhook.image.repository

Путь к Docker-образу Webhook (использует глобальные переменные)

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-argo-events/argo-events'

webhook.image.tag

Тег образа контейнера

v1.9.11

webhook.image.imagePullPolicy

Политика загрузки образа. Если не задано, значение берется из global,

""

webhook.revisionHistoryLimit

Количество предыдущих версий ресурса, сохраняемых для отката

5

webhook.replicas

Количество реплик pod

1

webhook.pdb.enabled

Создание PodDisruptionBudget для Webhook

false

webhook.pdb.labels

Метки для PodDisruptionBudget Webhook

{}

webhook.pdb.annotations

Аннотации для PodDisruptionBudget Webhook

{}

webhook.env

Переменные окружения контейнера для Webhook.
Пример конфигурации:

- name: DEBUG_LOG
  value: "true"

[]

webhook.envFrom

Источники переменных окружения (Secret или ConfigMap) для pod Webhook.
Пример конфигурации:

- configMapRef:
    name: config-map-name
- secretRef:
    name: secret-name

[]

webhook.podAnnotations

Дополнительные аннотации для pod Webhook

{}

webhook.deploymentAnnotations

Дополнительные аннотации для Deployment Webhook

{}

webhook.podLabels

Дополнительные метки для pod Webhook

{}

webhook.port

Порт, на котором Webhook принимает соединения

443

webhook.containerSecurityContext

Параметры контекста безопасности контейнера.
Пример конфигурации:

capabilities:
  drop:
    - all
readOnlyRootFilesystem: true
runAsNonRoot: true

{}

webhook.readinessProbe.failureThreshold

Количество неудачных попыток до перевода контейнера в статус NotReady

3

webhook.readinessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой готовности

10

webhook.readinessProbe.periodSeconds

Интервал в секундах между проверками готовности

10

webhook.readinessProbe.successThreshold

Количество успешных попыток для подтверждения готовности

1

webhook.readinessProbe.timeoutSeconds

Тайм-аут проверки готовности контейнера Webhook в секундах

1

webhook.livenessProbe.failureThreshold

Количество неудачных попыток до перевода контейнера в статус NotReady

3

webhook.livenessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой работоспособности

10

webhook.livenessProbe.periodSeconds

Интервал в секундах между проверками работоспособности

10

webhook.livenessProbe.successThreshold

Количество успешных попыток для подтверждения работоспособности

1

webhook.livenessProbe.timeoutSeconds

Тайм-аут проверки работоспособности контейнера Webhook в секундах

1

webhook.volumeMounts

Дополнительные точки монтирования томов (VolumeMount)

[]

webhook.volumes

Дополнительные тома (Volume) для pod Webhook.
Пример конфигурации:

volumes:
  - name: ""
    configMap:
      name: ""
  - name: ""
    emptyDir: {}

[]

webhook.nodeSelector

Селектор узлов для планирования pod

{}

webhook.tolerations

Toleration для размещения pod на узлах с ограничениями (taints)

[]

webhook.affinity

Настройки правила привязки (affinity и anti-affinity) pod к узлам

{}

webhook.topologySpreadConstraints

Ограничения топологии для равномерного распределения pod по зонам доступности и узлам.
Пример конфигурации:

- maxSkew: 1
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule

[]

webhook.priorityClassName

Имя PriorityClass для pod

""

webhook.resources

Запросы и ограничения ресурсов для pod.
Пример конфигурации:

limits:
  cpu: 500m
  memory: 512Mi
requests:
  cpu: 250m
  memory: 256Mi

{}

webhook.serviceAccount.create

Создание ServiceAccount для Webhook

true

webhook.serviceAccount.name

Имя ServiceAccount Webhook

""

webhook.serviceAccount.annotations

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

{}

webhook.serviceAccount.automountServiceAccountToken

Автоматическое монтирование токена ServiceAccount в pod Webhook

true