Skip to content

Commit

Permalink
Add Knative eventing usage doc and SFP spec in chart template
Browse files Browse the repository at this point in the history
Signed-off-by: gabriel-farache <[email protected]>
  • Loading branch information
gabriel-farache committed Dec 13, 2024
1 parent 9f27885 commit 2419fa0
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 0 deletions.
14 changes: 14 additions & 0 deletions bundle/manifests/rhdh.redhat.com_orchestrators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,20 @@ spec:
Job Service container image to be used instead of the provided
one by SonataFlow
type: string
eventing:
description: SonataflowPlatform's eventing related properties
properties:
broker:
description: Broker contains the name and namespace of the broker to use if using Knative eventing for components communication
properties:
name:
description: Name describes the name of the broker to use
type: string
namespace:
description: Namespace describes the namespace on which the broker to use is deployed
type: string
type: object
type: object
resources:
description: Resources contains the requests and limit of
CPU and memory resources for the pod instance
Expand Down
14 changes: 14 additions & 0 deletions config/crd/bases/rhdh.redhat.com_orchestrators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,20 @@ spec:
description: This field contains the location of a custom Job Service container image to be used instead of the provided one by SonataFlow
default:
type: string
eventing:
description: SonataflowPlatform's eventing related properties
properties:
broker:
description: Broker contains the name and namespace of the broker to use if using Knative eventing for components communication
properties:
name:
description: Name describes the name of the broker to use
type: string
namespace:
description: Namespace describes the namespace on which the broker to use is deployed
type: string
type: object
type: object
type: object
type: object
tekton:
Expand Down
7 changes: 7 additions & 0 deletions docs/main/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,13 @@ Note that as of November 6, 2023, OpenShift Serverless Operator is based on RHEL
oc apply -n orchestrator -f https://raw.githubusercontent.com/parodos-dev/orchestrator-helm-operator/refs/heads/main/config/samples/_v1alpha1_orchestrator.yaml
```
### Using Knative kafka broker
If you want to use a Knative broker for communication between the different componenets (Data Index, Job Service and Workflows), you should use a reliable broker, i.e: not in-memory.
Kafka perfectly fullfills this reliability need. You can find the list of availables brokers for Knative is here: https://knative.dev/docs/eventing/brokers/broker-types/
Follow these [instructions](https://raw.githubusercontent.com/parodos-dev/orchestrator-helm-operator/refs/heads/main/docs/main/kafka-knative-broker/README.md) to setup the a kafka broker.
## Additional information
### Additional Workflow Namespaces
Expand Down
102 changes: 102 additions & 0 deletions docs/main/kafka-knative-broker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Using Knative kafka broker
If you want to use a Knative broker for communication between the different componenets (Data Index, Job Service and Workflows), you should use a reliable broker, i.e: not in-memory.

Kafka perfectly fullfills this reliability need.

## Pre-requisites

1. A Kafka cluster running, see https://strimzi.io/quickstarts/ for a quickstart setup

## Installation steps

1. Configure and enable kafka broker feature in Knative: https://knative.dev/docs/eventing/brokers/broker-types/kafka-broker/
```console
oc apply --filename https://github.com/knative-extensions/eventing-kafka-broker/releases/download/knative-v1.14.5/eventing-kafka-controller.yaml
oc apply --filename https://github.com/knative-extensions/eventing-kafka-broker/releases/download/knative-v1.14.5/eventing-kafka-broker.yaml
```
> [!NOTE]
> This examples uses`knative-v1.14.5`, this may change, please refer to [the official documentation link](https://knative.dev/docs/eventing/brokers/broker-types/kafka-broker/)
* Review the `Security Context Constraints` (`scc`) to be granted to the `knative-kafka-broker-data-plane` service account used by the `kafka-broker-receiver` deployment:
```console
oc get deployments.apps -n knative-eventing kafka-broker-receiver -oyaml | oc adm policy scc-subject-review --filename -
```
* i.e:
```console
oc -n knative-eventing adm policy add-scc-to-user nonroot-v2 -z knative-kafka-broker-data-plane
```

* Make sure the `replication.factor` of your Kafka cluster match the one of the `kafka-broker-config` ConfigMap. With the Strimzi quickstart example, this value is set to `1`:
```console
oc patch cm kafka-broker-config -n knative-eventing \
--type merge \
-p '
{
"data": {
"default.topic.replication.factor": "1"
}
}'
```
* Wait for the `kafka-broker-receiver` resource to be ready:
```console
oc wait --for condition=ready=true pod -l app=kafka-broker-receiver -n knative-eventing --timeout=60s
```

2. Create kafka broker (Knative `sink`): see https://docs.openshift.com/serverless/1.33/eventing/brokers/kafka-broker.html for more details:
```Console
echo "apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
# case-sensitive
eventing.knative.dev/broker.class: Kafka
name: kafka-broker
spec:
# Configuration specific to this broker.
config:
apiVersion: v1
kind: ConfigMap
name: kafka-broker-config
namespace: knative-eventing" | oc apply -n sonataflow-infra -f -
```
3. Configure the `sonataflowplatforms.sonataflow.org`: given that the `Orchestrator` is named `orchestrator-sample` and was created under the `orchestrator` namespace:
```console
oc -n orchestrator patch orchestrators.rhdh.redhat.com orchestrator-sample --type merge \
-p '
{
"spec": {
"orchestrator": {
"sonataflowPlatform": {
"eventing": {
"broker": {
"name": "<BROKER NAME>",
"namespace": "<BROKER NAMESPACE>"
}
}
}
}
}
}'
```

The `sinkbinding` and `trigger` resources should be automatically created by the OSL operator:
```
$ oc -n sonataflow-infra get sinkbindings.sources.knative.dev
NAME SINK READY REASON
sonataflow-platform-jobs-service-sb http://kafka-broker-ingress.knative-eventing.svc.cluster.local/orchestrator/kafka-broker True
$ oc -n sonataflow-infra get trigger
NAME BROKER SUBSCRIBER_URI READY REASON
data-index-jobs-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/jobs True
data-index-process-definition-634c6f230b6364cdda8272f98c5d58722 kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/definitions True
data-index-process-error-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/processes True
data-index-process-node-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/processes True
data-index-process-sla-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/processes True
data-index-process-state-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/processes True
data-index-process-variable-6f721bf111e75efc394000bca9884ae22ac kafka-broker http://sonataflow-platform-data-index-service.orchestrator.svc.cluster.local/processes True
jobs-service-create-job-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-jobs-service.orchestrator.svc.cluster.local/v2/jobs/events True
jobs-service-delete-job-2ac1baab-d856-40bc-bcec-c6dd50951419 kafka-broker http://sonataflow-platform-jobs-service.orchestrator.svc.cluster.local/v2/jobs/events True
```

For each workflows deployed:
* A `sinkbinding` resource will be created: it will inject the `K_SINK` environment variable into the `deployment` resource. See https://knative.dev/docs/eventing/custom-event-source/sinkbinding/ for more information about`sinkbinding`.
* A `trigger` resource will be created for each event consumed by the workflow. See https://knative.dev/docs/eventing/triggers/ for more information about `trigger` and their usage.
9 changes: 9 additions & 0 deletions helm-charts/orchestrator/templates/sonataflows.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@ spec:
limits:
memory: {{ .Values.orchestrator.sonataflowPlatform.resources.limits.memory }}
cpu: {{ .Values.orchestrator.sonataflowPlatform.resources.limits.cpu }}
{{- if (and (.Values.orchestrator.sonataflowPlatform.broker.name) (.Values.orchestrator.sonataflowPlatform.broker.namespace)) }}
eventing:
broker:
ref:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: {{ .Values.orchestrator.sonataflowPlatform.broker.name }}
namespace: {{ .Values.orchestrator.sonataflowPlatform.broker.namespace }}
{{- end }}
services:
dataIndex:
enabled: true
Expand Down

0 comments on commit 2419fa0

Please sign in to comment.