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

  1. Dans la perspective Administrator de la console web OpenShift Container Platform, naviguez vers Serverless Eventing.
  2. Dans la liste Create, sélectionnez Event Source. Vous serez dirigé vers la page Event Sources.
  3. 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).
Procédure

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.

  1. 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
    1 2 3 4
    Remplacez cet espace de noms par l'espace de noms que vous avez sélectionné pour l'installation de la source d'événements.
  2. Appliquer le fichier YAML :

    $ oc apply -f <filename>
  3. Dans la perspective Developer, naviguez vers Add Event Source. La page Event Sources s'affiche.
  4. 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.
  5. Sélectionnez ApiServerSource puis cliquez sur Create Event Source. La page Create Event Source s'affiche.
  6. Configurez les paramètres de ApiServerSource en utilisant les boutons Form view ou YAML view:

    Note

    Vous 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.

    1. Saisissez v1 comme APIVERSION et Event comme KIND.
    2. Sélectionnez le site Service Account Name pour le compte de service que vous avez créé.
    3. 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.
  7. 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.

    ApiServerSource Topology view
Note

Si un puits URI est utilisé, modifiez l'URI en faisant un clic droit sur URI sink Edit URI.

Suppression de la source du serveur API

  1. Naviguez jusqu'à la vue Topology.
  2. Cliquez avec le bouton droit de la souris sur la source du serveur API et sélectionnez Delete ApiServerSource.

    Delete the 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).
Procédure

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.

  1. 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
    1 2 3 4
    Remplacez cet espace de noms par l'espace de noms que vous avez sélectionné pour l'installation de la source d'événements.
  2. Appliquer le fichier YAML :

    $ oc apply -f <filename>
  3. 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
  4. 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
  5. 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>
  6. 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
  7. 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.

  1. Obtenez les cosses :

    $ oc get pods
  2. 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

  1. Supprimer le déclencheur :

    kn trigger delete <trigger_name>
  2. Supprimer la source de l'événement :

    $ kn source apiserver delete <nom_de_la_source>
  3. 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 dans http://event-display.svc.cluster.local détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluent channel, et broker.

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).
Procédure

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.

  1. 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
    1 2 3 4
    Remplacez cet espace de noms par l'espace de noms que vous avez sélectionné pour l'installation de la source d'événements.
  2. Appliquer le fichier YAML :

    $ oc apply -f <filename>
  3. 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
  4. Appliquer le fichier YAML ApiServerSource:

    $ oc apply -f <filename>
  5. 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
  6. Appliquer le fichier YAML Service:

    $ oc apply -f <filename>
  7. Créez un objet Trigger sous la forme d'un fichier YAML qui filtre les événements du courtier default 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
  8. Appliquer le fichier YAML Trigger:

    $ oc apply -f <filename>
  9. 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
  10. 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.

  1. Récupérez les pods en entrant la commande suivante :

    $ oc get pods
  2. 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

  1. Supprimer le déclencheur :

    $ oc delete -f trigger.yaml
  2. Supprimer la source de l'événement :

    $ oc delete -f k8s-events.yaml
  3. 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

  1. 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.

    1. Dans la perspective Developer, naviguez vers Add YAML.
    2. 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
    3. Cliquez sur Create.
  2. 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.

    1. Dans la perspective Developer, naviguez vers Add Event Source. La page Event Sources s'affiche.
    2. 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.
    3. Sélectionnez Ping Source puis cliquez sur Create Event Source. La page Create Event Source s'affiche.

      Note

      Vous 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.

    4. Enter a value for Schedule. In this example, the value is */2 * * * *, which creates a PingSource that sends a message every two minutes.
    5. Facultatif : vous pouvez saisir une valeur pour Data, qui est la charge utile du message.
    6. 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.
    7. Cliquez sur Create.

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.

  1. Dans la perspective Developer, naviguez jusqu'à Topology.
  2. Affichez la source et la destination du ping.

    View the ping source and service in the Topology view

Suppression de la source de ping

  1. Naviguez jusqu'à la vue Topology.
  2. 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

  1. 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
  2. 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
  3. 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éé.

  1. Surveillez la création de nouvelles gousses :

    $ watch oc get pods
  2. 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 dans http://event-display.svc.cluster.local détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluent channel, et broker.

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

  1. 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.

    1. 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
    2. Créer le service :

      $ oc apply -f <filename>
  2. 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.

    1. 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
    2. Créer la source de ping :

      $ oc apply -f <filename>
  3. 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éé.

  1. Surveillez la création de nouvelles gousses :

    $ watch oc get pods
  2. 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.

Note

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

  1. Dans la perspective Developer, naviguez jusqu'à la page Add et sélectionnez Event Source.
  2. Dans la page Event Sources, sélectionnez Kafka Source dans la section Type.
  3. Configurez les paramètres de Kafka Source:

    1. Ajouter une liste de Bootstrap Servers séparée par des virgules.
    2. Ajouter une liste de Topics séparée par des virgules.
    3. Ajouter un Consumer Group.
    4. Sélectionnez le site Service Account Name pour le compte de service que vous avez créé.
    5. 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.
    6. Saisissez une adresse Name pour la source d'événements Kafka.
  4. 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.

  1. Dans la perspective Developer, naviguez jusqu'à Topology.
  2. Afficher la source et le puits d'événements Kafka.

    View the Kafka source and service in the Topology view

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

  1. 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
  2. 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
    Note

    Remplacez 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.

  3. 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

  1. 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 sujet my-topic.
  2. 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 dans http://event-display.svc.cluster.local détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluent channel, et broker.

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

  1. 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.
    Important

    Seule la version v1beta1 de l'API pour les objets KafkaSource sur OpenShift Serverless est prise en charge. N'utilisez pas la version v1alpha1 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

  2. 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, ou SCRAM-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

  1. 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, ou SCRAM-SHA-512.
  2. 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.
Note

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

  1. 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.

    1. 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

    2. Créer le service :

      $ oc apply -f <filename>
  2. Créer une instance de liaison d'évier qui dirige les événements vers le service.

    1. 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.
    2. Créer la liaison de l'évier :

      $ oc apply -f <filename>
  3. Créer un objet CronJob.

    1. 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

      Important

      Pour 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 ressource Job:

        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: "true"
    2. Créez la tâche cron :

      $ oc apply -f <filename>
  4. 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.

  1. Entrez la commande :

    $ oc get pods
  2. 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).
Note

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

  1. 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
  2. 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
  3. Créer un objet CronJob.

    1. 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

      Important

      Pour 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 CR Job:

        jobTemplate:
          metadata:
            labels:
              app: heartbeat-cron
              bindings.knative.dev/include: "true"
    2. Créez la tâche cron :

      $ oc apply -f <filename>
  4. 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 dans http://event-display.svc.cluster.local détermine que le puits est un service Knative. D'autres préfixes de puits par défaut incluent channel, et broker.
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

  1. Créer un service Knative à utiliser comme puits :

    1. Dans la perspective Developer, naviguez vers Add YAML.
    2. 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
    3. Cliquez sur Create.
  2. Créez une ressource CronJob qui est utilisée comme source d'événements et qui envoie un événement toutes les minutes.

    1. Dans la perspective Developer, naviguez vers Add YAML.
    2. 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.
    3. Cliquez sur Create.
  3. 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.

    1. Dans la perspective Developer, naviguez vers Add Event Source. La page Event Sources s'affiche.
    2. 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.
    3. Sélectionnez Sink Binding puis cliquez sur Create Event Source. La page Create Event Source s'affiche.

      Note

      Vous 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.

    4. Dans le champ apiVersion, entrez batch/v1.
    5. Dans le champ Kind, entrez Job.

      Note

      Le type CronJob n'est pas pris en charge directement par la liaison OpenShift Serverless sink, de sorte que le champ Kind doit cibler les objets Job créés par la tâche cron, plutôt que l'objet de la tâche cron elle-même.

    6. 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.
    7. Dans la section Match labels:

      1. Saisissez app dans le champ Name.
      2. Saisissez heartbeat-cron dans le champ Value.

        Note

        Le 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.

    8. Cliquez sur Create.

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.

  1. Dans la perspective Developer, naviguez jusqu'à Topology.
  2. Affichez le travail cron de liaison, d'évitement et de battements de cœur de l'évier.

    View the sink binding and service in the Topology view
  3. 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.
  4. 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 :

FieldDescriptionObligatoire ou facultatif

apiVersion

Spécifie la version de l'API, par exemple sources.knative.dev/v1.

Exigée

kind

Identifie cet objet de ressource en tant qu'objet SinkBinding.

Exigée

metadata

Spécifie les métadonnées qui identifient de manière unique l'objet SinkBinding. Par exemple, une adresse name.

Exigée

spec

Spécifie les informations de configuration pour cet objet SinkBinding.

Exigée

spec.sink

Une référence à un objet qui se résout en un URI à utiliser comme puits.

Exigée

spec.subject

Fait référence aux ressources pour lesquelles le contrat d'exécution est complété par des implémentations contraignantes.

Exigée

spec.ceOverrides

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 :

FieldDescriptionObligatoire ou facultatif

apiVersion

Version API du référent.

Exigée

kind

C'est en quelque sorte le référent.

Exigée

namespace

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

name

Nom du référent.

Ne pas utiliser si vous configurez selector.

selector

Sélecteur de référents.

Ne pas utiliser si vous configurez name.

selector.matchExpressions

Une liste des exigences en matière de sélecteur d'étiquettes.

N'utilisez qu'une seule des deux options suivantes : matchExpressions ou matchLabels.

selector.matchExpressions.key

Clé de l'étiquette à laquelle s'applique le sélecteur.

Nécessaire si l'on utilise matchExpressions.

selector.matchExpressions.operator

Représente la relation d'une clé avec un ensemble de valeurs. Les opérateurs valides sont In, NotIn, Exists et DoesNotExist.

Nécessaire si l'on utilise matchExpressions.

selector.matchExpressions.values

Un tableau de valeurs de chaînes de caractères. Si la valeur du paramètre operator est In ou NotIn, le tableau de valeurs doit être non vide. Si la valeur du paramètre operator est Exists ou DoesNotExist, le tableau de valeurs doit être vide. Ce tableau est remplacé lors d'un patch de fusion stratégique.

Nécessaire si l'on utilise matchExpressions.

selector.matchLabels

Une carte de paires clé-valeur. Chaque paire clé-valeur de la carte matchLabels est équivalente à un élément de matchExpressions, où le champ clé est matchLabels.<key>, le champ operator est In, et le tableau values ne contient que matchLabels.<value>.

N'utilisez qu'une seule des deux options suivantes : matchExpressions ou matchLabels.

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 :

FieldDescriptionObligatoire ou facultatif

extensions

Spécifie quels attributs sont ajoutés ou remplacés sur l'événement sortant. Chaque paire clé-valeur extensions est définie indépendamment sur l'événement en tant qu'extension d'attribut.

En option

Note

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

  1. Dans la perspective Developer, naviguez vers Add Event Source. La page Event Sources s'affiche.
  2. Sélectionnez Container Source puis cliquez sur Create Event Source. La page Create Event Source s'affiche.
  3. Configurez les paramètres de Container Source en utilisant les boutons Form view ou YAML view:

    Note

    Vous 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.

    1. Dans le champ Image, saisissez l'URI de l'image que vous souhaitez exécuter dans le conteneur créé par la source du conteneur.
    2. Dans le champ Name, saisissez le nom de l'image.
    3. Facultatif : dans le champ Arguments, saisissez les arguments à transmettre au conteneur.
    4. Facultatif : dans le champ Environment variables, ajoutez les variables d'environnement à définir dans le conteneur.
    5. 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 :

      1. Sélectionnez Resource pour utiliser un canal, un courtier ou un service comme puits pour la source d'événement.
      2. Sélectionnez URI pour spécifier où les événements de la source du conteneur sont acheminés.
  4. 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 :

FieldDescriptionObligatoire ou facultatif

apiVersion

Spécifie la version de l'API, par exemple sources.knative.dev/v1.

Exigée

kind

Identifie cet objet de ressource en tant qu'objet ContainerSource.

Exigée

metadata

Spécifie les métadonnées qui identifient de manière unique l'objet ContainerSource. Par exemple, une adresse name.

Exigée

spec

Spécifie les informations de configuration pour cet objet ContainerSource.

Exigée

spec.sink

Une référence à un objet qui se résout en un URI à utiliser comme puits.

Exigée

spec.template

Une spécification template pour l'objet ContainerSource.

Exigée

spec.ceOverrides

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 :

FieldDescriptionObligatoire ou facultatif

extensions

Spécifie quels attributs sont ajoutés ou remplacés sur l'événement sortant. Chaque paire clé-valeur extensions est définie indépendamment sur l'événement en tant qu'extension d'attribut.

En option

Note

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

  1. 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.
  2. Dans la section Sink de la vue du formulaire Create Event Source, sélectionnez votre évier dans la liste Resource.
  3. 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.

  1. Dans la perspective Developer, naviguez jusqu'à Topology.
  2. 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.
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.