1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/knative-docs

Клонировать/Скачать
README.md 7.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 27.05.2025 06:04 d330922

Связывающее привязки (SinkBinding) отвечает за связывание "адресуемых" ресурсов Kubernetes, которые могут получать события (т.е. события "sink"), с ресурсами Kubernetes, которые включают PodSpec (например, spec.template.spec) и хотят создавать события.

SinkBinding можно использовать для создания новых источников событий с использованием любых из знакомых вычислительных абстракций, которые предоставляет Kubernetes (например, Deployment, Job, DaemonSet, StatefulSet), или абстракций Knative (например, Service, Configuration).

Создание CronJob с использованием SinkBinding

Предварительные требования

  1. Установите Knative Serving.
  2. Установите Knative Eventing и Sources.

Подготовка образа heartbeats

Knative event-contrib предоставляет образ источника событий heartbeats. Вы можете клонировать исходный код следующим образом:

git clone -b "{{< branch >}}" https://github.com/knative/eventing-contrib.git

Затем постройте образ heartbeats и опубликуйте его в вашем репозитории образов с помощью команды:

ko publish knative.dev/eventing-contrib/cmd/heartbeats

Примечание: ko publish требует:

  • установки переменной окружения KO_DOCKER_REPO (например, gcr.io/[gcloud-project] или docker.io/<username>).
  • аутентификации с вашим KO_DOCKER_REPO.

Создание нашего event sink

Для проверки работы нашего SinkBinding мы создадим службу Event Display, которая будет записывать входящие сообщения в свой лог.```yaml apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display


Используйте следующую команду для создания службы из файла `service.yaml`:

```shell
kubectl apply --filename service.yaml

Статус созданной службы можно увидеть с помощью команды:

kubectl get ksvc

NAME            URL                                           LATESTCREATED         LATESTREADY           READY   REASON
event-display   http://event-display.default.1.2.3.4.xip.io   event-display-gqjbw   event-display-gqjbw   True

Создание нашего SinkBinding

Чтобы направлять события в наш Event Display, сначала создадим SinkBinding, который будет внедрять $K_SINK и $K_CE_OVERRIDES в выбранные Jobs.

apiVersion: sources.knative.dev/v1beta1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  subject:
    apiVersion: batch/v1
    kind: Job
    selector:
      matchLabels:
        app: heartbeat-cron

  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: event-display
  ceOverrides:
    extensions:
      sink: bound

В этом случае мы привяжем любой Job с метками app: heartbeat-cron.

Используйте следующую команду для создания источника событий из sinkbinding.yaml:

kubectl apply --filename sinkbinding.yaml

Создание нашего CronJob

Теперь мы будем использовать контейнер heartbeats для отправки событий на $K_SINK каждый раз, когда CronJob выполняется:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: heartbeat-cron
spec:
  # Выполнять каждую минуту
  schedule: "* * * * *"
  jobTemplate:
    metadata:
      labels:
        app: heartbeat-cron
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: single-heartbeat
              image: <УКАЖИТЕ ИМЯ ВАШЕГО ИЗОБРАЖЕНИЯ ЗДЕСЬ>
              args:
                - --period=1
              env:
                - name: ONE_SHOT
                  value: "true"
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace

Текст переведен, сохранены оригинальное форматирование и разметка.Сначала отредактируйте heartbeats-source.yaml, чтобы включить имя изображения из команды ko publish выше, затем выполните следующую команду для применения:

kubectl apply --filename heartbeats-source.yaml

Проверка

Мы проверим, что сообщение было отправлено в систему событий Knative, просмотрев журналы службы event-display.

kubectl logs -l serving.knative.dev/service=event-display -c user-container --since=10m

Вы должны увидеть строки журнала, показывающие заголовки запроса и тело сообщения события, отправленного источником heartbeats в функцию display.

☁️  cloudevents.Event
Проверка: валидно
Атрибуты контекста,
  specversion: 1.0
  type: dev.knative.eventing.samples.heartbeat
  source: https://knative.dev/eventing-contrib/cmd/heartbeats/#default/heartbeat-cron-1582120020-75qrz
  id: 5f4122be-ac6f-4349-a94f-4bfc6eb3f687
  time: 2020-02-19T13:47:10.41428688Z
  datacontenttype: application/json
Расширения,
  beats: true
  heart: yes
  the: 42
Данные,
  {
    "id": 1,
    "label": ""
  }

Использование SinkBinding с сервисом Knative

SinkBinding также совместим с нашими образцами для Cloud Events в Knative Serving; как следующий шаг попробуйте использовать их вместе. Например, образец cloudevents-go может быть связан следующим образом:

apiVersion: sources.knative.dev/v1beta1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  subject:
    apiVersion: serving.knative.dev/v1
    kind: Service
    name: cloudevents-go

  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: event-display

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/knative-docs.git
git@api.gitlife.ru:oschina-mirror/knative-docs.git
oschina-mirror
knative-docs
knative-docs
master