5.2. Sources des événements
5.2.1. Sources des événements
Un Knative event source peut être n'importe quel objet Kubernetes qui génère ou importe des événements cloud, et relaie ces événements vers un autre point d'extrémité, connu sous le nom de sink. L'approvisionnement en événements est essentiel pour développer un système distribué qui réagit aux événements.
Vous pouvez créer et gérer des sources d'événements Knative en utilisant la perspective Developer dans la console web OpenShift Container Platform, le CLI Knative (kn
), ou en appliquant des fichiers YAML.
Actuellement, OpenShift Serverless prend en charge les types de sources d'événements suivants :
- Source du serveur API
- Apporte les événements du serveur API Kubernetes dans Knative. La source du serveur API envoie un nouvel événement chaque fois qu'une ressource Kubernetes est créée, mise à jour ou supprimée.
- Source de ping
- Produit des événements avec une charge utile fixe selon un calendrier cron spécifié.
- Source d'événements Kafka
- Connecte un cluster Apache Kafka à un puits en tant que source d'événements.
Vous pouvez également créer une source d'événement personnalisée.
5.2.2. Source d'événement dans la perspective de l'administrateur
L'approvisionnement en événements est essentiel pour développer un système distribué qui réagit aux événements.
5.2.2.1. Création d'une source d'événements à l'aide de la perspective administrateur
Un Knative event source peut être n'importe quel objet Kubernetes qui génère ou importe des événements cloud, et relaie ces événements vers un autre point final, connu sous le nom de sink.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
- Vous vous êtes connecté à la console web et vous vous trouvez dans la perspective Administrator.
- Vous disposez des droits d'administrateur de cluster pour OpenShift Container Platform.
Procédure
-
Dans la perspective Administrator de la console web OpenShift Container Platform, naviguez vers Serverless
Eventing. - Dans la liste Create, sélectionnez Event Source. Vous serez dirigé vers la page Event Sources.
- Sélectionnez le type de source d'événement que vous souhaitez créer.
5.2.3. Création d'une source de serveur API
La source du serveur API est une source d'événements qui peut être utilisée pour connecter un récepteur d'événements, tel qu'un service Knative, au serveur API Kubernetes. La source du serveur API surveille les événements Kubernetes et les transmet au courtier Knative Eventing.
5.2.3.1. Création d'une source de serveur API à l'aide de la console web
Une fois Knative Eventing installé sur votre cluster, vous pouvez créer une source de serveur API à l'aide de la console Web. L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer une source d'événement.
Conditions préalables
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
- OpenShift Serverless Operator et Knative Eventing sont installés sur le cluster.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
-
Vous avez installé l'OpenShift CLI (
oc
).
Si vous souhaitez réutiliser un compte de service existant, vous pouvez modifier votre ressource ServiceAccount
existante pour y inclure les autorisations requises au lieu de créer une nouvelle ressource.
Créez un compte de service, un rôle et une liaison de rôle pour la source d'événement sous la forme d'un fichier YAML :
apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default 1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default 2 rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default 3 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default 4
Appliquer le fichier YAML :
$ oc apply -f <filename>
-
Dans la perspective Developer, naviguez vers Add
Event Source. La page Event Sources s'affiche. - Facultatif : si vous avez plusieurs fournisseurs pour vos sources d'événements, sélectionnez le fournisseur requis dans la liste Providers pour filtrer les sources d'événements disponibles du fournisseur.
- Sélectionnez ApiServerSource puis cliquez sur Create Event Source. La page Create Event Source s'affiche.
Configurez les paramètres de ApiServerSource en utilisant les boutons Form view ou YAML view:
NoteVous pouvez passer de la vue Form view à la vue YAML view. Les données sont conservées lors du passage d'une vue à l'autre.
-
Saisissez
v1
comme APIVERSION etEvent
comme KIND. - Sélectionnez le site Service Account Name pour le compte de service que vous avez créé.
- Sélectionnez le site Sink pour la source de l'événement. Un Sink peut être soit un Resource, tel qu'un canal, un courtier ou un service, soit un URI.
-
Saisissez
- Cliquez sur Create.
Vérification
Après avoir créé la source du serveur API, vous la verrez connectée au service auquel elle est liée dans la vue Topology.
Si un puits URI est utilisé, modifiez l'URI en faisant un clic droit sur URI sink
Suppression de la source du serveur API
- Naviguez jusqu'à la vue Topology.
Cliquez avec le bouton droit de la souris sur la source du serveur API et sélectionnez Delete ApiServerSource.
5.2.3.2. Création d'une source de serveur API à l'aide du CLI Knative
Vous pouvez utiliser la commande kn source apiserver create
pour créer une source de serveur API à l'aide de l'interface de programmation kn
. L'utilisation du CLI kn
pour créer une source de serveur API offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur le cluster.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
-
Vous avez installé l'OpenShift CLI (
oc
). -
Vous avez installé le CLI Knative (
kn
).
Si vous souhaitez réutiliser un compte de service existant, vous pouvez modifier votre ressource ServiceAccount
existante pour y inclure les autorisations requises au lieu de créer une nouvelle ressource.
Créez un compte de service, un rôle et une liaison de rôle pour la source d'événement sous la forme d'un fichier YAML :
apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default 1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default 2 rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default 3 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default 4
Appliquer le fichier YAML :
$ oc apply -f <filename>
Créez une source de serveur API dotée d'un puits d'événements. Dans l'exemple suivant, le puits est un courtier :
$ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource
Pour vérifier que la source du serveur API est correctement configurée, créez un service Knative qui déverse les messages entrants dans son journal :
$ kn service create <service_name> --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Si vous avez utilisé un courtier comme puits d'événements, créez un déclencheur pour filtrer les événements du courtier
default
vers le service :kn trigger create <trigger_name> --sink ksvc:<service_name> $ kn trigger create <trigger_name>
Créer des événements en lançant un pod dans l'espace de noms par défaut :
$ oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Vérifiez que le contrôleur est correctement mappé en inspectant la sortie générée par la commande suivante :
$ kn source apiserver describe <nom_de_la_source>
Exemple de sortie
Name: mysource Namespace: default Annotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer Age: 3m ServiceAccountName: events-sa Mode: Resource Sink: Name: default Namespace: default Kind: Broker (eventing.knative.dev/v1) Resources: Kind: event (v1) Controller: false Conditions: OK TYPE AGE REASON ++ Ready 3m ++ Deployed 3m ++ SinkProvided 3m ++ SufficientPermissions 3m ++ EventTypesProvided 3m
Vérification
Vous pouvez vérifier que les événements Kubernetes ont été envoyés à Knative en consultant les journaux de la fonction dumper de messages.
Obtenez les cosses :
$ oc get pods
Affichez les journaux des fonctions de l'expéditeur de messages pour les modules :
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... }
Suppression de la source du serveur API
Supprimer le déclencheur :
kn trigger delete <trigger_name>
Supprimer la source de l'événement :
$ kn source apiserver delete <nom_de_la_source>
Supprimez le compte de service, le rôle de cluster et le lien de cluster :
$ oc delete -f authentication.yaml
5.2.3.2.1. Drapeau d'évitement de l'CLI Knative
Lorsque vous créez une source d'événements à l'aide de l'interface de programmation Knative (kn
), vous pouvez spécifier un puits vers lequel les événements sont envoyés à partir de cette ressource à l'aide de l'indicateur --sink
. Le récepteur peut être n'importe quelle ressource adressable ou appelable qui peut recevoir des événements entrants d'autres ressources.
L'exemple suivant crée une liaison de puits qui utilise un service, http://event-display.svc.cluster.local
, comme puits :
Exemple de commande utilisant l'indicateur d'évitement
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \ 1
--ce-override "sink=bound"
- 1
svc
danshttp://event-display.svc.cluster.local
détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluentchannel
, etbroker
.
5.2.3.3. Création d'un serveur API source à l'aide de fichiers YAML
La création de ressources Knative à l'aide de fichiers YAML utilise une API déclarative, qui vous permet de décrire les sources d'événements de manière déclarative et reproductible. Pour créer une source de serveur API à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet ApiServerSource
, puis l'appliquer à l'aide de la commande oc apply
.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur le cluster.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
-
Vous avez créé le broker
default
dans le même espace de noms que celui défini dans le fichier YAML source du serveur API. -
Installez le CLI OpenShift (
oc
).
Si vous souhaitez réutiliser un compte de service existant, vous pouvez modifier votre ressource ServiceAccount
existante pour y inclure les autorisations requises au lieu de créer une nouvelle ressource.
Créez un compte de service, un rôle et une liaison de rôle pour la source d'événement sous la forme d'un fichier YAML :
apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default 1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default 2 rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default 3 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default 4
Appliquer le fichier YAML :
$ oc apply -f <filename>
Créer une source de serveur API sous la forme d'un fichier YAML :
apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: name: testevents spec: serviceAccountName: events-sa mode: Resource resources: - apiVersion: v1 kind: Event sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: default
Appliquer le fichier YAML
ApiServerSource
:$ oc apply -f <filename>
Pour vérifier que la source du serveur API est correctement configurée, créez un service Knative sous la forme d'un fichier YAML qui déverse les messages entrants dans son journal :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Appliquer le fichier YAML
Service
:$ oc apply -f <filename>
Créez un objet
Trigger
sous la forme d'un fichier YAML qui filtre les événements du courtierdefault
vers le service créé à l'étape précédente :apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: event-display-trigger namespace: default spec: broker: default subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
Appliquer le fichier YAML
Trigger
:$ oc apply -f <filename>
Créer des événements en lançant un pod dans l'espace de noms par défaut :
$ oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-display
Vérifiez que le contrôleur est correctement mappé, en entrant la commande suivante et en inspectant la sortie :
$ oc get apiserversource.sources.knative.dev testevents -o yaml
Exemple de sortie
apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: annotations: creationTimestamp: "2020-04-07T17:24:54Z" generation: 1 name: testevents namespace: default resourceVersion: "62868" selfLink: /apis/sources.knative.dev/v1alpha1/namespaces/default/apiserversources/testevents2 uid: 1603d863-bb06-4d1c-b371-f580b4db99fa spec: mode: Resource resources: - apiVersion: v1 controller: false controllerSelector: apiVersion: "" kind: "" name: "" uid: "" kind: Event labelSelector: {} serviceAccountName: events-sa sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: default
Vérification
Pour vérifier que les événements Kubernetes ont été envoyés à Knative, vous pouvez consulter les journaux de la fonction dumper de messages.
Récupérez les pods en entrant la commande suivante :
$ oc get pods
Affichez les journaux de la fonction d'expéditeur de messages pour les modules en entrant la commande suivante :
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... }
Suppression de la source du serveur API
Supprimer le déclencheur :
$ oc delete -f trigger.yaml
Supprimer la source de l'événement :
$ oc delete -f k8s-events.yaml
Supprimez le compte de service, le rôle de cluster et le lien de cluster :
$ oc delete -f authentication.yaml
5.2.4. Création d'une source de ping
Une source ping est une source d'événements qui peut être utilisée pour envoyer périodiquement des événements ping avec une charge utile constante à un consommateur d'événements. Une source ping peut être utilisée pour programmer l'envoi d'événements, à l'instar d'une minuterie.
5.2.4.1. Création d'une source de ping à l'aide de la console web
Une fois Knative Eventing installé sur votre cluster, vous pouvez créer une source de ping en utilisant la console web. L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer une source d'événement.
Conditions préalables
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
- L'opérateur OpenShift Serverless, Knative Serving et Knative Eventing sont installés sur le cluster.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
Pour vérifier que la source de ping fonctionne, créez un service Knative simple qui déverse les messages entrants dans les journaux du service.
-
Dans la perspective Developer, naviguez vers Add
YAML. Copiez l'exemple YAML :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
- Cliquez sur Create.
-
Dans la perspective Developer, naviguez vers Add
Créez une source ping dans le même espace de noms que le service créé à l'étape précédente, ou tout autre puits vers lequel vous souhaitez envoyer des événements.
-
Dans la perspective Developer, naviguez vers Add
Event Source. La page Event Sources s'affiche. - Facultatif : si vous avez plusieurs fournisseurs pour vos sources d'événements, sélectionnez le fournisseur requis dans la liste Providers pour filtrer les sources d'événements disponibles du fournisseur.
Sélectionnez Ping Source puis cliquez sur Create Event Source. La page Create Event Source s'affiche.
NoteVous pouvez configurer les paramètres de PingSource en utilisant Form view ou YAML view et passer d'une vue à l'autre. Les données sont conservées lors du passage d'une vue à l'autre.
-
Enter a value for Schedule. In this example, the value is
*/2 * * * *
, which creates a PingSource that sends a message every two minutes. - Facultatif : vous pouvez saisir une valeur pour Data, qui est la charge utile du message.
-
Sélectionnez un Sink. Il peut s'agir d'un Resource ou d'un URI. Dans cet exemple, le service
event-display
créé à l'étape précédente est utilisé comme puits Resource. - Cliquez sur Create.
-
Dans la perspective Developer, naviguez vers Add
Vérification
Vous pouvez vérifier que la source de ping a été créée et qu'elle est connectée au puits en consultant la page Topology.
- Dans la perspective Developer, naviguez jusqu'à Topology.
Affichez la source et la destination du ping.
Suppression de la source de ping
- Naviguez jusqu'à la vue Topology.
- Cliquez avec le bouton droit de la souris sur la source du serveur API et sélectionnez Delete Ping Source.
5.2.4.2. Création d'une source de ping à l'aide de la CLI Knative
Vous pouvez utiliser la commande kn source ping create
pour créer une source de ping en utilisant le CLI Knative (kn
). L'utilisation de l'interface de programmation Knative pour créer des sources d'événements offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML.
Conditions préalables
- L'opérateur OpenShift Serverless, Knative Serving et Knative Eventing sont installés sur le cluster.
-
Vous avez installé le CLI Knative (
kn
). - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
-
Facultatif : Si vous souhaitez utiliser les étapes de vérification pour cette procédure, installez l'OpenShift CLI (
oc
).
Procédure
Pour vérifier que la source de ping fonctionne, créez un service Knative simple qui déverse les messages entrants dans les journaux du service :
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Pour chaque ensemble d'événements ping que vous souhaitez demander, créez une source ping dans le même espace de noms que le consommateur d'événements :
$ kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-display
Vérifiez que le contrôleur est correctement mappé en entrant la commande suivante et en inspectant la sortie :
$ kn source ping describe test-ping-source
Exemple de sortie
Name: test-ping-source Namespace: default Annotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer Age: 15s Schedule: */2 * * * * Data: {"message": "Hello world!"} Sink: Name: event-display Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 8s ++ Deployed 8s ++ SinkProvided 15s ++ ValidSchedule 15s ++ EventTypeProvided 15s ++ ResourcesCorrect 15s
Vérification
Vous pouvez vérifier que les événements Kubernetes ont été envoyés au puits d'événements Knative en examinant les journaux du pod de puits.
Par défaut, les services Knative terminent leurs pods si aucun trafic n'est reçu pendant une période de 60 secondes. L'exemple présenté dans ce guide crée une source ping qui envoie un message toutes les 2 minutes, chaque message doit donc être observé dans un pod nouvellement créé.
Surveillez la création de nouvelles gousses :
$ watch oc get pods
Annulez l'observation des pods en utilisant Ctrl C, puis regardez les journaux du pod créé :
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.sources.ping source: /apis/v1/namespaces/default/pingsources/test-ping-source id: 99e4f4f6-08ff-4bff-acf1-47f61ded68c9 time: 2020-04-07T16:16:00.000601161Z datacontenttype: application/json Data, { "message": "Hello world!" }
Suppression de la source de ping
Supprimer la source de ping :
$ kn delete pingsources.sources.knative.dev <nom_de_la_source_de_ping>
5.2.4.2.1. Drapeau d'évitement de l'CLI Knative
Lorsque vous créez une source d'événements à l'aide de l'interface de programmation Knative (kn
), vous pouvez spécifier un puits vers lequel les événements sont envoyés à partir de cette ressource à l'aide de l'indicateur --sink
. Le récepteur peut être n'importe quelle ressource adressable ou appelable qui peut recevoir des événements entrants d'autres ressources.
L'exemple suivant crée une liaison de puits qui utilise un service, http://event-display.svc.cluster.local
, comme puits :
Exemple de commande utilisant l'indicateur d'évitement
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \ 1
--ce-override "sink=bound"
- 1
svc
danshttp://event-display.svc.cluster.local
détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluentchannel
, etbroker
.
5.2.4.3. Création d'une source de ping à l'aide de YAML
La création de ressources Knative à l'aide de fichiers YAML utilise une API déclarative, qui vous permet de décrire les sources d'événements de manière déclarative et reproductible. Pour créer une source ping sans serveur à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet PingSource
, puis l'appliquer à l'aide de oc apply
.
Exemple d'objet PingSource
apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: test-ping-source spec: schedule: "*/2 * * * *" 1 data: '{"message": "Hello world!"}' 2 sink: 3 ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
- 1
- L'horaire de l'événement spécifié à l'aide d'une expression CRON.
- 2
- Le corps du message de l'événement exprimé sous la forme d'une chaîne de données codée en JSON.
- 3
- Il s'agit des détails du consommateur d'événements. Dans cet exemple, nous utilisons un service Knative nommé
event-display
.
Conditions préalables
- L'opérateur OpenShift Serverless, Knative Serving et Knative Eventing sont installés sur le cluster.
-
Installez le CLI OpenShift (
oc
). - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
Pour vérifier que la source de ping fonctionne, créez un service Knative simple qui déverse les messages entrants dans les journaux du service.
Créer un fichier YAML de service :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Créer le service :
$ oc apply -f <filename>
Pour chaque ensemble d'événements ping que vous souhaitez demander, créez une source ping dans le même espace de noms que le consommateur d'événements.
Créer un fichier YAML pour la source ping :
apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: test-ping-source spec: schedule: "*/2 * * * *" data: '{"message": "Hello world!"}' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
Créer la source de ping :
$ oc apply -f <filename>
Vérifiez que le contrôleur est correctement mappé en entrant la commande suivante :
$ oc get pingsource.sources.knative.dev <nom_de_la_source_de_ping> -oyaml
Exemple de sortie
apiVersion: sources.knative.dev/v1 kind: PingSource metadata: annotations: sources.knative.dev/creator: developer sources.knative.dev/lastModifier: developer creationTimestamp: "2020-04-07T16:11:14Z" generation: 1 name: test-ping-source namespace: default resourceVersion: "55257" selfLink: /apis/sources.knative.dev/v1/namespaces/default/pingsources/test-ping-source uid: 3d80d50b-f8c7-4c1b-99f7-3ec00e0a8164 spec: data: '{ value: "hello" }' schedule: '*/2 * * * *' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display namespace: default
Vérification
Vous pouvez vérifier que les événements Kubernetes ont été envoyés au puits d'événements Knative en consultant les journaux du pod de puits.
Par défaut, les services Knative terminent leurs pods si aucun trafic n'est reçu pendant une période de 60 secondes. L'exemple présenté dans ce guide crée une PingSource qui envoie un message toutes les 2 minutes, donc chaque message doit être observé dans un pod nouvellement créé.
Surveillez la création de nouvelles gousses :
$ watch oc get pods
Annulez l'observation des pods en utilisant Ctrl C, puis regardez les journaux du pod créé :
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.sources.ping source: /apis/v1/namespaces/default/pingsources/test-ping-source id: 042ff529-240e-45ee-b40c-3a908129853e time: 2020-04-07T16:22:00.000791674Z datacontenttype: application/json Data, { "message": "Hello world!" }
Suppression de la source de ping
Supprimer la source de ping :
oc delete -f <filename>
Example command
$ oc delete -f ping-source.yaml
5.2.5. Source pour Apache Kafka
Vous pouvez créer une source Apache Kafka qui lit des événements à partir d'un cluster Apache Kafka et transmet ces événements à un puits. Vous pouvez créer une source Kafka en utilisant la console web d'OpenShift Container Platform, le CLI Knative (kn
), ou en créant un objet KafkaSource
directement en tant que fichier YAML et en utilisant le CLI OpenShift (oc
) pour l'appliquer.
Voir la documentation sur l'installation du courtier Knative pour Apache Kafka.
5.2.5.1. Création d'une source d'événement Apache Kafka à l'aide de la console web
Une fois que l'implémentation du courtier Knative pour Apache Kafka est installée sur votre cluster, vous pouvez créer une source Apache Kafka à l'aide de la console web. L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer une source Kafka.
Conditions préalables
-
OpenShift Serverless Operator, Knative Eventing et la ressource personnalisée
KnativeKafka
sont installés sur votre cluster. - Vous vous êtes connecté à la console web.
- Vous avez accès à un cluster Red Hat AMQ Streams (Kafka) qui produit les messages Kafka que vous souhaitez importer.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
- Dans la perspective Developer, naviguez jusqu'à la page Add et sélectionnez Event Source.
- Dans la page Event Sources, sélectionnez Kafka Source dans la section Type.
Configurez les paramètres de Kafka Source:
- Ajouter une liste de Bootstrap Servers séparée par des virgules.
- Ajouter une liste de Topics séparée par des virgules.
- Ajouter un Consumer Group.
- Sélectionnez le site Service Account Name pour le compte de service que vous avez créé.
- Sélectionnez le site Sink pour la source de l'événement. Un Sink peut être soit un Resource, tel qu'un canal, un courtier ou un service, soit un URI.
- Saisissez une adresse Name pour la source d'événements Kafka.
- Cliquez sur Create.
Vérification
Vous pouvez vérifier que la source d'événements Kafka a été créée et qu'elle est connectée au puits en consultant la page Topology.
- Dans la perspective Developer, naviguez jusqu'à Topology.
Afficher la source et le puits d'événements Kafka.
5.2.5.2. Créer une source d'événement Apache Kafka en utilisant le CLI Knative
Vous pouvez utiliser la commande kn source kafka create
pour créer une source Kafka en utilisant le CLI Knative (kn
). L'utilisation du CLI Knative pour créer des sources d'événements offre une interface utilisateur plus rationnelle et intuitive que la modification directe des fichiers YAML.
Conditions préalables
-
OpenShift Serverless Operator, Knative Eventing, Knative Serving et la ressource personnalisée (CR)
KnativeKafka
sont installés sur votre cluster. - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
- Vous avez accès à un cluster Red Hat AMQ Streams (Kafka) qui produit les messages Kafka que vous souhaitez importer.
-
Vous avez installé le CLI Knative (
kn
). -
Facultatif : Vous avez installé l'OpenShift CLI (
oc
) si vous voulez utiliser les étapes de vérification dans cette procédure.
Procédure
Pour vérifier que la source d'événements Kafka fonctionne, créez un service Knative qui déverse les événements entrants dans les journaux du service :
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display
Créer un CR
KafkaSource
:$ kn source kafka create <kafka_source_name> \ --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \ --topics <topic_name> --consumergroup my-consumer-group \ --sink event-display
NoteRemplacez les valeurs de cette commande par les valeurs de votre nom de source, de vos serveurs d'amorçage et de vos rubriques.
Les options
--servers
,--topics
, et--consumergroup
spécifient les paramètres de connexion au cluster Kafka. L'option--consumergroup
est facultative.Facultatif : Affichez les détails de la CR
KafkaSource
que vous avez créée :$ kn source kafka describe <kafka_source_name>
Exemple de sortie
Name: example-kafka-source Namespace: kafka Age: 1h BootstrapServers: example-cluster-kafka-bootstrap.kafka.svc:9092 Topics: example-topic ConsumerGroup: example-consumer-group Sink: Name: event-display Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 1h ++ Deployed 1h ++ SinkProvided 1h
Verification steps
Déclencher l'envoi par l'instance Kafka d'un message au sujet :
$ oc -n kafka run kafka-producer \ -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \ --restart=Never -- bin/kafka-console-producer.sh \ --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topic
Saisissez le message dans l'invite. Cette commande suppose que :
-
Le cluster Kafka est installé dans l'espace de noms
kafka
. -
L'objet
KafkaSource
a été configuré pour utiliser le sujetmy-topic
.
-
Le cluster Kafka est installé dans l'espace de noms
Vérifiez que le message est arrivé en consultant les journaux :
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.kafka.event source: /apis/v1/namespaces/default/kafkasources/example-kafka-source#example-topic subject: partition:46#0 id: partition:46/offset:0 time: 2021-03-10T11:21:49.4Z Extensions, traceparent: 00-161ff3815727d8755848ec01c866d1cd-7ff3916c44334678-00 Data, Hello!
5.2.5.2.1. Drapeau d'évitement de l'CLI Knative
Lorsque vous créez une source d'événements à l'aide de l'interface de programmation Knative (kn
), vous pouvez spécifier un puits vers lequel les événements sont envoyés à partir de cette ressource à l'aide de l'indicateur --sink
. Le récepteur peut être n'importe quelle ressource adressable ou appelable qui peut recevoir des événements entrants d'autres ressources.
L'exemple suivant crée une liaison de puits qui utilise un service, http://event-display.svc.cluster.local
, comme puits :
Exemple de commande utilisant l'indicateur d'évitement
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \ 1
--ce-override "sink=bound"
- 1
svc
danshttp://event-display.svc.cluster.local
détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluentchannel
, etbroker
.
5.2.5.3. Créer une source d'événement Apache Kafka en utilisant YAML
La création de ressources Knative à l'aide de fichiers YAML utilise une API déclarative, qui vous permet de décrire des applications de manière déclarative et reproductible. Pour créer une source Kafka à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet KafkaSource
, puis l'appliquer à l'aide de la commande oc apply
.
Conditions préalables
-
OpenShift Serverless Operator, Knative Eventing et la ressource personnalisée
KnativeKafka
sont installés sur votre cluster. - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
- Vous avez accès à un cluster Red Hat AMQ Streams (Kafka) qui produit les messages Kafka que vous souhaitez importer.
-
Installez le CLI OpenShift (
oc
).
Procédure
Créer un objet
KafkaSource
sous la forme d'un fichier YAML :apiVersion: sources.knative.dev/v1beta1 kind: KafkaSource metadata: name: <source_name> spec: consumerGroup: <group_name> 1 bootstrapServers: - <list_of_bootstrap_servers> topics: - <list_of_topics> 2 sink: - <list_of_sinks> 3
- 1
- Un groupe de consommateurs est un groupe de consommateurs qui utilisent le même identifiant de groupe et consomment des données d'un thème.
- 2
- Un thème fournit une destination pour le stockage des données. Chaque thème est divisé en une ou plusieurs partitions.
- 3
- Un puits indique où les événements sont envoyés à partir d'une source.
ImportantSeule la version
v1beta1
de l'API pour les objetsKafkaSource
sur OpenShift Serverless est prise en charge. N'utilisez pas la versionv1alpha1
de cette API, car elle est désormais obsolète.Exemple d'objet
KafkaSource
apiVersion: sources.knative.dev/v1beta1 kind: KafkaSource metadata: name: kafka-source spec: consumerGroup: knative-group bootstrapServers: - my-cluster-kafka-bootstrap.kafka:9092 topics: - knative-demo-topic sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
Appliquer le fichier YAML
KafkaSource
:$ oc apply -f <filename>
Vérification
Vérifiez que la source d'événements Kafka a été créée en entrant la commande suivante :
$ oc get pods
Exemple de sortie
NAME READY STATUS RESTARTS AGE kafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13m
5.2.5.4. Configuration de l'authentification SASL pour les sources Apache Kafka
Simple Authentication and Security Layer (SASL) est utilisé par Apache Kafka pour l'authentification. Si vous utilisez l'authentification SASL sur votre cluster, les utilisateurs doivent fournir des informations d'identification à Knative pour communiquer avec le cluster Kafka ; sinon, les événements ne peuvent pas être produits ou consommés.
Conditions préalables
- Vous avez des permissions d'administrateur de cluster ou dédié sur OpenShift Container Platform.
-
OpenShift Serverless Operator, Knative Eventing et
KnativeKafka
CR sont installés sur votre cluster OpenShift Container Platform. - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
- Vous disposez d'un nom d'utilisateur et d'un mot de passe pour un cluster Kafka.
-
Vous avez choisi le mécanisme SASL à utiliser, par exemple
PLAIN
,SCRAM-SHA-256
, ouSCRAM-SHA-512
. -
Si TLS est activé, vous avez également besoin du fichier de certificat
ca.crt
pour le cluster Kafka. -
Vous avez installé le CLI OpenShift (
oc
).
Procédure
Créez les fichiers de certificats en tant que secrets dans l'espace de noms que vous avez choisi :
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ 1 --from-literal=user="my-sasl-user"
- 1
- Le type SASL peut être
PLAIN
,SCRAM-SHA-256
, ouSCRAM-SHA-512
.
Créez ou modifiez votre source Kafka de manière à ce qu'elle contienne la configuration suivante :
spec
:apiVersion: sources.knative.dev/v1beta1 kind: KafkaSource metadata: name: example-source spec: ... net: sasl: enable: true user: secretKeyRef: name: <kafka_auth_secret> key: user password: secretKeyRef: name: <kafka_auth_secret> key: password type: secretKeyRef: name: <kafka_auth_secret> key: saslType tls: enable: true caCert: 1 secretKeyRef: name: <kafka_auth_secret> key: ca.crt ...
- 1
- La spécification
caCert
n'est pas nécessaire si vous utilisez un service Kafka en nuage public, tel que Red Hat OpenShift Streams for Apache Kafka.
5.2.6. Sources d'événements personnalisées
Si vous avez besoin d'intégrer des événements provenant d'un producteur d'événements qui n'est pas inclus dans Knative, ou d'un producteur qui émet des événements qui ne sont pas au format CloudEvent
, vous pouvez le faire en créant une source d'événements personnalisée. Vous pouvez créer une source d'événement personnalisée en utilisant l'une des méthodes suivantes :
-
Utiliser un objet
PodSpecable
comme source d'événements, en créant une liaison de type "sink". - Utiliser un conteneur comme source d'événements en créant un conteneur source.
5.2.6.1. Fixation de l'évier
L'objet SinkBinding
permet de découpler la production d'événements de l'adressage de livraison. La liaison Sink est utilisée pour connecter event producers à un consommateur d'événements, ou sink. Un producteur d'événements est une ressource Kubernetes qui intègre un modèle PodSpec
et produit des événements. Un sink est un objet Kubernetes adressable qui peut recevoir des événements.
L'objet SinkBinding
injecte des variables d'environnement dans le site PodTemplateSpec
du puits, ce qui signifie que le code de l'application n'a pas besoin d'interagir directement avec l'API Kubernetes pour localiser la destination de l'événement. Ces variables d'environnement sont les suivantes :
K_SINK
- L'URL de l'évier résolu.
K_CE_OVERRIDES
- Un objet JSON qui spécifie les dérogations à l'événement sortant.
L'objet SinkBinding
ne prend actuellement pas en charge les noms de révision personnalisés pour les services.
5.2.6.1.1. Création d'un sink binding à l'aide de YAML
La création de ressources Knative à l'aide de fichiers YAML utilise une API déclarative, qui vous permet de décrire les sources d'événements de manière déclarative et reproductible. Pour créer une liaison de puits à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet SinkBinding
, puis l'appliquer à l'aide de la commande oc apply
.
Conditions préalables
- L'opérateur OpenShift Serverless, Knative Serving et Knative Eventing sont installés sur le cluster.
-
Installez le CLI OpenShift (
oc
). - Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
Pour vérifier que la liaison des puits est correctement configurée, créez un service d'affichage d'événements Knative, ou puits d'événements, qui déverse les messages entrants dans son journal.
Créer un fichier YAML de service :
Exemple de fichier YAML de service
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Créer le service :
$ oc apply -f <filename>
Créer une instance de liaison d'évier qui dirige les événements vers le service.
Créer un fichier YAML de liaison avec le puits :
Exemple de fichier YAML de service
apiVersion: sources.knative.dev/v1alpha1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: batch/v1 kind: Job 1 selector: matchLabels: app: heartbeat-cron sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
- 1
- Dans cet exemple, tout Job portant l'étiquette
app: heartbeat-cron
sera lié au puits d'événements.
Créer la liaison de l'évier :
$ oc apply -f <filename>
Créer un objet
CronJob
.Créez un fichier YAML de travail cron :
Exemple de fichier YAML d'une tâche cron
apiVersion: batch/v1 kind: CronJob metadata: name: heartbeat-cron spec: # Run every minute schedule: "* * * * *" jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true" spec: template: spec: restartPolicy: Never containers: - name: single-heartbeat image: quay.io/openshift-knative/heartbeats:latest 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
ImportantPour utiliser le sink binding, vous devez ajouter manuellement une étiquette
bindings.knative.dev/include=true
à vos ressources Knative.Par exemple, pour ajouter cette étiquette à une ressource
CronJob
, ajoutez les lignes suivantes à la définition YAML de la ressourceJob
:jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"
Créez la tâche cron :
$ oc apply -f <filename>
Vérifiez que le contrôleur est correctement mappé en entrant la commande suivante et en inspectant la sortie :
$ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml
Exemple de sortie
spec: sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display namespace: default subject: apiVersion: batch/v1 kind: Job namespace: default selector: matchLabels: app: heartbeat-cron
Vérification
Vous pouvez vérifier que les événements Kubernetes ont été envoyés au puits d'événements Knative en examinant les journaux de la fonction dumper de messages.
Entrez la commande :
$ oc get pods
Entrez la commande :
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.eventing.samples.heartbeat source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596 time: 2019-10-18T15:23:20.809775386Z contenttype: application/json Extensions, beats: true heart: yes the: 42 Data, { "id": 1, "label": "" }
5.2.6.1.2. Création d'un sink binding à l'aide du CLI Knative
Vous pouvez utiliser la commande kn source binding create
pour créer une liaison de puits en utilisant l'interface de programmation Knative (kn
). L'utilisation de l'interface de programmation Knative pour créer des sources d'événements offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML.
Conditions préalables
- L'opérateur OpenShift Serverless, Knative Serving et Knative Eventing sont installés sur le cluster.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
-
Installer le CLI Knative (
kn
). -
Installez le CLI OpenShift (
oc
).
La procédure suivante nécessite la création de fichiers YAML.
Si vous modifiez les noms des fichiers YAML par rapport à ceux utilisés dans les exemples, vous devez vous assurer que vous mettez également à jour les commandes CLI correspondantes.
Procédure
Pour vérifier que la liaison des puits est correctement configurée, créez un service d'affichage d'événements Knative, ou puits d'événements, qui déverse les messages entrants dans son journal :
$ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Créer une instance de liaison d'évier qui dirige les événements vers le service :
$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display
Créer un objet
CronJob
.Créez un fichier YAML de travail cron :
Exemple de fichier YAML d'une tâche cron
apiVersion: batch/v1 kind: CronJob metadata: name: heartbeat-cron spec: # Run every minute schedule: "* * * * *" jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true" spec: template: spec: restartPolicy: Never containers: - name: single-heartbeat image: quay.io/openshift-knative/heartbeats:latest 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
ImportantPour utiliser le sink binding, vous devez ajouter manuellement une étiquette
bindings.knative.dev/include=true
à vos CR Knative.Par exemple, pour ajouter cette étiquette à un CR
CronJob
, ajoutez les lignes suivantes à la définition YAML du CRJob
:jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"
Créez la tâche cron :
$ oc apply -f <filename>
Vérifiez que le contrôleur est correctement mappé en entrant la commande suivante et en inspectant la sortie :
$ kn source binding describe bind-heartbeat
Exemple de sortie
Name: bind-heartbeat Namespace: demo-2 Annotations: sources.knative.dev/creator=minikube-user, sources.knative.dev/lastModifier=minikub ... Age: 2m Subject: Resource: job (batch/v1) Selector: app: heartbeat-cron Sink: Name: event-display Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 2m
Vérification
Vous pouvez vérifier que les événements Kubernetes ont été envoyés au puits d'événements Knative en examinant les journaux de la fonction dumper de messages.
Affichez les journaux des fonctions de l'expéditeur de messages en entrant les commandes suivantes :
$ oc get pods
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Exemple de sortie
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.eventing.samples.heartbeat source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596 time: 2019-10-18T15:23:20.809775386Z contenttype: application/json Extensions, beats: true heart: yes the: 42 Data, { "id": 1, "label": "" }
5.2.6.1.2.1. Drapeau d'évitement de l'CLI Knative
Lorsque vous créez une source d'événements à l'aide de l'interface de programmation Knative (kn
), vous pouvez spécifier un puits vers lequel les événements sont envoyés à partir de cette ressource à l'aide de l'indicateur --sink
. Le récepteur peut être n'importe quelle ressource adressable ou appelable qui peut recevoir des événements entrants d'autres ressources.
L'exemple suivant crée une liaison de puits qui utilise un service, http://event-display.svc.cluster.local
, comme puits :
Exemple de commande utilisant l'indicateur d'évitement
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \ 1
--ce-override "sink=bound"
- 1
svc
danshttp://event-display.svc.cluster.local
détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluentchannel
, etbroker
.
5.2.6.1.3. Création d'une liaison de puits à l'aide de la console web
Une fois Knative Eventing installé sur votre cluster, vous pouvez créer un sink binding en utilisant la console web. L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer une source d'événement.
Conditions préalables
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
- OpenShift Serverless Operator, Knative Serving et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
Créer un service Knative à utiliser comme puits :
-
Dans la perspective Developer, naviguez vers Add
YAML. Copiez l'exemple YAML :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
- Cliquez sur Create.
-
Dans la perspective Developer, naviguez vers Add
Créez une ressource
CronJob
qui est utilisée comme source d'événements et qui envoie un événement toutes les minutes.-
Dans la perspective Developer, naviguez vers Add
YAML. Copiez l'exemple YAML :
apiVersion: batch/v1 kind: CronJob metadata: name: heartbeat-cron spec: # Run every minute schedule: "*/1 * * * *" jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: true 1 spec: template: spec: restartPolicy: Never containers: - name: single-heartbeat image: quay.io/openshift-knative/heartbeats 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
- 1
- Assurez-vous d'inclure l'étiquette
bindings.knative.dev/include: true
. Le comportement de sélection de l'espace de noms par défaut d'OpenShift Serverless utilise le mode d'inclusion.
- Cliquez sur Create.
-
Dans la perspective Developer, naviguez vers Add
Créez un lien sink dans le même espace de noms que le service créé à l'étape précédente, ou tout autre sink vers lequel vous souhaitez envoyer des événements.
-
Dans la perspective Developer, naviguez vers Add
Event Source. La page Event Sources s'affiche. - Facultatif : si vous avez plusieurs fournisseurs pour vos sources d'événements, sélectionnez le fournisseur requis dans la liste Providers pour filtrer les sources d'événements disponibles du fournisseur.
Sélectionnez Sink Binding puis cliquez sur Create Event Source. La page Create Event Source s'affiche.
NoteVous pouvez configurer les paramètres de Sink Binding en utilisant Form view ou YAML view et passer d'une vue à l'autre. Les données sont conservées lors du passage d'une vue à l'autre.
-
Dans le champ apiVersion, entrez
batch/v1
. Dans le champ Kind, entrez
Job
.NoteLe type
CronJob
n'est pas pris en charge directement par la liaison OpenShift Serverless sink, de sorte que le champ Kind doit cibler les objetsJob
créés par la tâche cron, plutôt que l'objet de la tâche cron elle-même.-
Sélectionnez un Sink. Il peut s'agir d'un Resource ou d'un URI. Dans cet exemple, le service
event-display
créé à l'étape précédente est utilisé comme puits Resource. Dans la section Match labels:
-
Saisissez
app
dans le champ Name. Saisissez
heartbeat-cron
dans le champ Value.NoteLe sélecteur d'étiquette est nécessaire lors de l'utilisation de tâches cron avec le sink binding, plutôt que le nom de la ressource. En effet, les travaux créés par un travail cron n'ont pas de nom prévisible et contiennent une chaîne générée de manière aléatoire dans leur nom. Par exemple,
hearthbeat-cron-1cc23f
.
-
Saisissez
- Cliquez sur Create.
-
Dans la perspective Developer, naviguez vers Add
Vérification
Vous pouvez vérifier que la liaison et l'évier, ainsi que la tâche cron ont été créés et fonctionnent correctement en consultant la page Topology et les journaux de pods.
- Dans la perspective Developer, naviguez jusqu'à Topology.
Affichez le travail cron de liaison, d'évitement et de battements de cœur de l'évier.
- Observez que des travaux réussis sont enregistrés par la tâche cron une fois que la liaison sink a été ajoutée. Cela signifie que la liaison sink reconfigure avec succès les travaux créés par la tâche cron.
-
Parcourez les journaux du pod de service
event-display
pour voir les événements produits par le job cron heartbeats.
5.2.6.1.4. Référence pour la fixation de l'évier
Vous pouvez utiliser un objet PodSpecable
comme source d'événement en créant une liaison de puits. Vous pouvez configurer plusieurs paramètres lors de la création d'un objet SinkBinding
.
SinkBinding
prennent en charge les paramètres suivants :
Field | Description | Obligatoire ou facultatif |
---|---|---|
|
Spécifie la version de l'API, par exemple | Exigée |
|
Identifie cet objet de ressource en tant qu'objet | Exigée |
|
Spécifie les métadonnées qui identifient de manière unique l'objet | Exigée |
|
Spécifie les informations de configuration pour cet objet | Exigée |
| Une référence à un objet qui se résout en un URI à utiliser comme puits. | Exigée |
| Fait référence aux ressources pour lesquelles le contrat d'exécution est complété par des implémentations contraignantes. | Exigée |
| Définit les surcharges permettant de contrôler le format de sortie et les modifications apportées à l'événement envoyé à l'émetteur. | En option |
5.2.6.1.4.1. Paramètre du sujet
Le paramètre Subject
fait référence aux ressources pour lesquelles le contrat d'exécution est complété par des implémentations de liaison. Vous pouvez configurer plusieurs champs pour une définition Subject
.
La définition de Subject
prend en charge les champs suivants :
Field | Description | Obligatoire ou facultatif |
---|---|---|
| Version API du référent. | Exigée |
| C'est en quelque sorte le référent. | Exigée |
| Espace de noms du référent. S'il est omis, il s'agit par défaut de l'espace de noms de l'objet. | En option |
| Nom du référent. |
Ne pas utiliser si vous configurez |
| Sélecteur de référents. |
Ne pas utiliser si vous configurez |
| Une liste des exigences en matière de sélecteur d'étiquettes. |
N'utilisez qu'une seule des deux options suivantes : |
| Clé de l'étiquette à laquelle s'applique le sélecteur. |
Nécessaire si l'on utilise |
|
Représente la relation d'une clé avec un ensemble de valeurs. Les opérateurs valides sont |
Nécessaire si l'on utilise |
|
Un tableau de valeurs de chaînes de caractères. Si la valeur du paramètre |
Nécessaire si l'on utilise |
|
Une carte de paires clé-valeur. Chaque paire clé-valeur de la carte |
N'utilisez qu'une seule des deux options suivantes : |
Exemples de paramètres du sujet
Étant donné le YAML suivant, l'objet Deployment
nommé mysubject
dans l'espace de noms default
est sélectionné :
apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: apps/v1 kind: Deployment namespace: default name: mysubject ...
Étant donné le YAML suivant, tout objet Job
portant l'étiquette working=example
dans l'espace de noms default
est sélectionné :
apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: batch/v1 kind: Job namespace: default selector: matchLabels: working: example ...
Étant donné le YAML suivant, tout objet Pod
portant l'étiquette working=example
ou working=sample
dans l'espace de noms default
est sélectionné :
apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: v1 kind: Pod namespace: default selector: - matchExpression: key: working operator: In values: - example - sample ...
5.2.6.1.4.2. Surcharges de CloudEvent
Une définition de ceOverrides
fournit des paramètres qui contrôlent le format de sortie du CloudEvent et les modifications envoyées au récepteur. Vous pouvez configurer plusieurs champs pour la définition ceOverrides
.
Une définition de ceOverrides
prend en charge les champs suivants :
Field | Description | Obligatoire ou facultatif |
---|---|---|
|
Spécifie quels attributs sont ajoutés ou remplacés sur l'événement sortant. Chaque paire clé-valeur | En option |
Seuls les noms d'attributs CloudEvent
valides sont autorisés en tant qu'extensions. Vous ne pouvez pas définir les attributs définis par la spécification à partir de la configuration des extensions. Par exemple, vous ne pouvez pas modifier l'attribut type
.
Exemple de surcharges de CloudEvent
apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: ... ceOverrides: extensions: extra: this is an extra attribute additional: 42
Cette opération définit la variable d'environnement K_CE_OVERRIDES
sur le serveur subject
:
Exemple de sortie
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
5.2.6.1.4.3. L'étiquette d'inclusion
Pour utiliser un sink binding, vous devez attribuer l'étiquette bindings.knative.dev/include: "true"
à la ressource ou à l'espace de noms dans lequel la ressource est incluse. Si la définition de la ressource n'inclut pas l'étiquette, un administrateur de cluster peut l'attacher à l'espace de noms en exécutant la commande suivante :
$ oc label namespace <namespace> bindings.knative.dev/include=true
5.2.6.2. Source du conteneur
Les sources de conteneurs créent une image de conteneur qui génère des événements et les envoie à un récepteur. Vous pouvez utiliser une source de conteneur pour créer une source d'événements personnalisée, en créant une image de conteneur et un objet ContainerSource
qui utilise l'URI de votre image.
5.2.6.2.1. Lignes directrices pour la création d'une image de conteneur
Deux variables d'environnement sont injectées par le contrôleur de source du conteneur : K_SINK
et K_CE_OVERRIDES
. Ces variables sont résolues à partir des spécifications sink
et ceOverrides
, respectivement. Les événements sont envoyés à l'URI de destination spécifié dans la variable d'environnement K_SINK
. Le message doit être envoyé en tant que POST
en utilisant le format CloudEvent
En utilisant le format HTTP.
Exemples d'images de conteneurs
Voici un exemple d'image de conteneur de battements de cœur :
package main import ( "context" "encoding/json" "flag" "fmt" "log" "os" "strconv" "time" duckv1 "knative.dev/pkg/apis/duck/v1" cloudevents "github.com/cloudevents/sdk-go/v2" "github.com/kelseyhightower/envconfig" ) type Heartbeat struct { Sequence int `json:"id"` Label string `json:"label"` } var ( eventSource string eventType string sink string label string periodStr string ) func init() { flag.StringVar(&eventSource, "eventSource", "", "the event-source (CloudEvents)") flag.StringVar(&eventType, "eventType", "dev.knative.eventing.samples.heartbeat", "the event-type (CloudEvents)") flag.StringVar(&sink, "sink", "", "the host url to heartbeat to") flag.StringVar(&label, "label", "", "a special label") flag.StringVar(&periodStr, "period", "5", "the number of seconds between heartbeats") } type envConfig struct { // Sink URL where to send heartbeat cloud events Sink string `envconfig:"K_SINK"` // CEOverrides are the CloudEvents overrides to be applied to the outbound event. CEOverrides string `envconfig:"K_CE_OVERRIDES"` // Name of this pod. Name string `envconfig:"POD_NAME" required:"true"` // Namespace this pod exists in. Namespace string `envconfig:"POD_NAMESPACE" required:"true"` // Whether to run continuously or exit. OneShot bool `envconfig:"ONE_SHOT" default:"false"` } func main() { flag.Parse() var env envConfig if err := envconfig.Process("", &env); err != nil { log.Printf("[ERROR] Failed to process env var: %s", err) os.Exit(1) } if env.Sink != "" { sink = env.Sink } var ceOverrides *duckv1.CloudEventOverrides if len(env.CEOverrides) > 0 { overrides := duckv1.CloudEventOverrides{} err := json.Unmarshal([]byte(env.CEOverrides), &overrides) if err != nil { log.Printf("[ERROR] Unparseable CloudEvents overrides %s: %v", env.CEOverrides, err) os.Exit(1) } ceOverrides = &overrides } p, err := cloudevents.NewHTTP(cloudevents.WithTarget(sink)) if err != nil { log.Fatalf("failed to create http protocol: %s", err.Error()) } c, err := cloudevents.NewClient(p, cloudevents.WithUUIDs(), cloudevents.WithTimeNow()) if err != nil { log.Fatalf("failed to create client: %s", err.Error()) } var period time.Duration if p, err := strconv.Atoi(periodStr); err != nil { period = time.Duration(5) * time.Second } else { period = time.Duration(p) * time.Second } if eventSource == "" { eventSource = fmt.Sprintf("https://knative.dev/eventing-contrib/cmd/heartbeats/#%s/%s", env.Namespace, env.Name) log.Printf("Heartbeats Source: %s", eventSource) } if len(label) > 0 && label[0] == '"' { label, _ = strconv.Unquote(label) } hb := &Heartbeat{ Sequence: 0, Label: label, } ticker := time.NewTicker(period) for { hb.Sequence++ event := cloudevents.NewEvent("1.0") event.SetType(eventType) event.SetSource(eventSource) event.SetExtension("the", 42) event.SetExtension("heart", "yes") event.SetExtension("beats", true) if ceOverrides != nil && ceOverrides.Extensions != nil { for n, v := range ceOverrides.Extensions { event.SetExtension(n, v) } } if err := event.SetData(cloudevents.ApplicationJSON, hb); err != nil { log.Printf("failed to set cloudevents data: %s", err.Error()) } log.Printf("sending cloudevent to %s", sink) if res := c.Send(context.Background(), event); !cloudevents.IsACK(res) { log.Printf("failed to send cloudevent: %v", res) } if env.OneShot { return } // Wait for next tick <-ticker.C } }
Voici un exemple de source de conteneur qui fait référence à l'image de conteneur Heartbeats précédente :
apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: test-heartbeats spec: template: spec: containers: # This corresponds to a heartbeats image URI that you have built and published - image: gcr.io/knative-releases/knative.dev/eventing/cmd/heartbeats name: heartbeats args: - --period=1 env: - name: POD_NAME value: "example-pod" - name: POD_NAMESPACE value: "event-test" sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: example-service ...
5.2.6.2.2. Créer et gérer des sources de conteneurs en utilisant le CLI Knative
Vous pouvez utiliser les commandes kn source container
pour créer et gérer des sources de conteneurs en utilisant le CLI Knative (kn
). L'utilisation de l'interface de programmation Knative pour créer des sources d'événements offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML.
Créer un conteneur source
$ kn source container create <container_source_name> --image <image_uri> --sink <sink>
Supprimer un conteneur source
kn source container delete <container_source_name>
Décrire la source d'un conteneur
kn source container describe <container_source_name>
Liste des sources de conteneurs existantes
$ kn source container list
Liste des sources de conteneurs existantes au format YAML
$ kn source container list -o yaml
Mise à jour d'un conteneur source
Cette commande met à jour l'URI de l'image d'un conteneur existant :
$ kn source container update <container_source_name> --image <image_uri>
5.2.6.2.3. Création d'un conteneur source à l'aide de la console web
Une fois Knative Eventing installé sur votre cluster, vous pouvez créer une source de conteneur en utilisant la console web. L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer une source d'événements.
Conditions préalables
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
- OpenShift Serverless Operator, Knative Serving et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
Procédure
-
Dans la perspective Developer, naviguez vers Add
Event Source. La page Event Sources s'affiche. - Sélectionnez Container Source puis cliquez sur Create Event Source. La page Create Event Source s'affiche.
Configurez les paramètres de Container Source en utilisant les boutons Form view ou YAML view:
NoteVous pouvez passer de la vue Form view à la vue YAML view. Les données sont conservées lors du passage d'une vue à l'autre.
- Dans le champ Image, saisissez l'URI de l'image que vous souhaitez exécuter dans le conteneur créé par la source du conteneur.
- Dans le champ Name, saisissez le nom de l'image.
- Facultatif : dans le champ Arguments, saisissez les arguments à transmettre au conteneur.
- Facultatif : dans le champ Environment variables, ajoutez les variables d'environnement à définir dans le conteneur.
Dans la section Sink, ajoutez un puits vers lequel les événements de la source du conteneur sont acheminés. Si vous utilisez la vue Form, vous pouvez choisir parmi les options suivantes :
- Sélectionnez Resource pour utiliser un canal, un courtier ou un service comme puits pour la source d'événement.
- Sélectionnez URI pour spécifier où les événements de la source du conteneur sont acheminés.
- Une fois la configuration de la source du conteneur terminée, cliquez sur Create.
5.2.6.2.4. Référence de la source du conteneur
Vous pouvez utiliser un conteneur comme source d'événements en créant un objet ContainerSource
. Vous pouvez configurer plusieurs paramètres lors de la création d'un objet ContainerSource
.
ContainerSource
prennent en charge les champs suivants :
Field | Description | Obligatoire ou facultatif |
---|---|---|
|
Spécifie la version de l'API, par exemple | Exigée |
|
Identifie cet objet de ressource en tant qu'objet | Exigée |
|
Spécifie les métadonnées qui identifient de manière unique l'objet | Exigée |
|
Spécifie les informations de configuration pour cet objet | Exigée |
| Une référence à un objet qui se résout en un URI à utiliser comme puits. | Exigée |
|
Une spécification | Exigée |
| Définit les surcharges permettant de contrôler le format de sortie et les modifications apportées à l'événement envoyé à l'émetteur. | En option |
Exemple de paramètre de modèle
apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: test-heartbeats spec: template: spec: containers: - image: quay.io/openshift-knative/heartbeats:latest name: heartbeats args: - --period=1 env: - name: POD_NAME value: "mypod" - name: POD_NAMESPACE value: "event-test" ...
5.2.6.2.4.1. Surcharges de CloudEvent
Une définition de ceOverrides
fournit des paramètres qui contrôlent le format de sortie du CloudEvent et les modifications envoyées au récepteur. Vous pouvez configurer plusieurs champs pour la définition ceOverrides
.
Une définition de ceOverrides
prend en charge les champs suivants :
Field | Description | Obligatoire ou facultatif |
---|---|---|
|
Spécifie quels attributs sont ajoutés ou remplacés sur l'événement sortant. Chaque paire clé-valeur | En option |
Seuls les noms d'attributs CloudEvent
valides sont autorisés en tant qu'extensions. Vous ne pouvez pas définir les attributs définis par la spécification à partir de la configuration des extensions. Par exemple, vous ne pouvez pas modifier l'attribut type
.
Exemple de surcharges de CloudEvent
apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: test-heartbeats spec: ... ceOverrides: extensions: extra: this is an extra attribute additional: 42
Cette opération définit la variable d'environnement K_CE_OVERRIDES
sur le serveur subject
:
Exemple de sortie
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
5.2.7. Connexion d'une source d'événements à un puits à l'aide de la perspective du développeur
Lorsque vous créez une source d'événement en utilisant la console web d'OpenShift Container Platform, vous pouvez spécifier un puits vers lequel les événements sont envoyés à partir de cette source. Le puits peut être n'importe quelle ressource adressable ou appelable qui peut recevoir des événements entrants d'autres ressources.
5.2.7.1. Connecter une source d'événements à un puits à l'aide de la perspective du développeur
Conditions préalables
- OpenShift Serverless Operator, Knative Serving et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
- Vous vous êtes connecté à la console web et vous vous trouvez dans la perspective Developer.
- Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.
- Vous avez créé un puits, tel qu'un service, un canal ou un courtier Knative.
Procédure
-
Créez une source d'événement de n'importe quel type, en naviguant vers Add
Event Source et en sélectionnant le type de source d'événement que vous souhaitez créer. - Dans la section Sink de la vue du formulaire Create Event Source, sélectionnez votre évier dans la liste Resource.
- Cliquez sur Create.
Vérification
Vous pouvez vérifier que la source d'événements a été créée et qu'elle est connectée au puits en consultant la page Topology.
- Dans la perspective Developer, naviguez jusqu'à Topology.
- Affichez la source de l'événement et cliquez sur le puits connecté pour afficher les détails du puits dans le panneau de droite.