Связывающее привязки (SinkBinding) отвечает за связывание "адресуемых" ресурсов Kubernetes, которые могут получать события (т.е. события "sink"), с ресурсами Kubernetes, которые включают PodSpec (например, spec.template.spec
) и хотят создавать события.
SinkBinding можно использовать для создания новых источников событий с использованием любых из знакомых вычислительных абстракций, которые предоставляет Kubernetes (например, Deployment, Job, DaemonSet, StatefulSet), или абстракций Knative (например, Service, Configuration).
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
.Для проверки работы нашего 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
Чтобы направлять события в наш 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
Теперь мы будем использовать контейнер 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 также совместим с нашими образцами для 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 )