Sans serveur
Installation, utilisation et notes de version d'OpenShift Serverless
Résumé
Chapitre 1. Notes de mise à jour
Pour plus d'informations sur le cycle de vie d'OpenShift Serverless et les plateformes prises en charge, consultez la Politique relative au cycle de vie des plateformes.
Les notes de version contiennent des informations sur les fonctionnalités nouvelles et obsolètes, les changements de rupture et les problèmes connus. Les notes de version suivantes s'appliquent aux versions les plus récentes d'OpenShift Serverless sur OpenShift Container Platform.
Pour une vue d'ensemble des fonctionnalités d'OpenShift Serverless, voir À propos d'OpenShift Serverless.
OpenShift Serverless est basé sur le projet open source Knative.
Pour plus de détails sur les dernières versions des composants Knative, consultez le blog Knative.
1.1. À propos des versions de l'API
Les versions d'API sont une mesure importante de l'état de développement de certaines fonctionnalités et ressources personnalisées dans OpenShift Serverless. La création de ressources sur votre cluster qui n'utilisent pas la bonne version d'API peut entraîner des problèmes dans votre déploiement.
L'OpenShift Serverless Operator met automatiquement à jour les anciennes ressources qui utilisent des versions obsolètes d'API pour utiliser la dernière version. Par exemple, si vous avez créé des ressources sur votre cluster qui utilisent des versions plus anciennes de l'API ApiServerSource
, telles que v1beta1
, l'OpenShift Serverless Operator met automatiquement à jour ces ressources pour utiliser la version v1
de l'API lorsqu'elle est disponible et que la version v1beta1
est obsolète.
Une fois qu'elles sont devenues obsolètes, les anciennes versions des API peuvent être supprimées dans une prochaine version. L'utilisation de versions obsolètes des API n'entraîne pas l'échec des ressources. Toutefois, si vous essayez d'utiliser une version d'une API qui a été supprimée, les ressources échoueront. Assurez-vous que vos manifestes sont mis à jour pour utiliser la dernière version afin d'éviter tout problème.
1.2. Fonctionnalités disponibles en général et en avant-première technologique
Les fonctionnalités qui sont généralement disponibles (GA) sont entièrement prises en charge et conviennent à une utilisation en production. Les fonctionnalités de Technology Preview (TP) sont des fonctionnalités expérimentales et ne sont pas destinées à une utilisation en production. Consultez l'étendue de l'assistance de l'aperçu technologique sur le portail client de Red Hat pour plus d'informations sur les fonctionnalités TP.
Le tableau suivant fournit des informations sur les fonctionnalités OpenShift Serverless qui sont GA et celles qui sont TP :
Tableau 1.1. Suivi des caractéristiques de la version générale et de la version préliminaire de la technologie
Fonctionnalité | 1.26 | 1.27 | 1.28 |
---|---|---|---|
| GA | GA | GA |
Fonctions de Quarkus | GA | GA | GA |
Fonctions Node.js | TP | TP | GA |
Fonctions TypeScript | TP | TP | GA |
Fonctions Python | - | - | TP |
Service Mesh mTLS | GA | GA | GA |
| GA | GA | GA |
Redirection HTTPS | GA | GA | GA |
Courtier Kafka | GA | GA | GA |
Puits Kafka | GA | GA | GA |
Support des conteneurs Init pour les services Knative | GA | GA | GA |
Soutien du PVC aux services Knative | GA | GA | GA |
TLS pour le trafic interne | TP | TP | TP |
Courtiers à espace de nommage | - | TP | TP |
| - | - | TP |
1.3. Fonctionnalités obsolètes et supprimées
Certaines fonctionnalités qui étaient généralement disponibles (GA) ou un aperçu technologique (TP) dans les versions précédentes ont été dépréciées ou supprimées. Les fonctionnalités dépréciées sont toujours incluses dans OpenShift Serverless et continuent d'être prises en charge ; cependant, elles seront supprimées dans une prochaine version de ce produit et ne sont pas recommandées pour les nouveaux déploiements.
Pour la liste la plus récente des principales fonctionnalités dépréciées et supprimées dans OpenShift Serverless, reportez-vous au tableau suivant :
Tableau 1.2. Suivi des fonctionnalités obsolètes et supprimées
Fonctionnalité | 1.20 | 1.21 | 1.22 à 1.26 | 1.27 | 1.28 |
---|---|---|---|---|---|
| Déclassé | Déclassé | Supprimé | Supprimé | Supprimé |
| Déclassé | Supprimé | Supprimé | Supprimé | Supprimé |
Serving and Eventing | - | - | - | Déclassé | Déclassé |
| - | - | - | - | Déclassé |
1.4. Notes de version pour Red Hat OpenShift Serverless 1.28
OpenShift Serverless 1.28 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.4.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.7.
- OpenShift Serverless utilise désormais Knative Eventing 1.7.
- OpenShift Serverless utilise désormais Kourier 1.7.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.7. - OpenShift Serverless utilise désormais l'implémentation du courtier Knative pour Apache Kafka 1.7.
-
Le plug-in
kn func
CLI utilise désormais la version 1.9.1 defunc
. - Les moteurs d'exécution Node.js et TypeScript pour OpenShift Serverless Functions sont désormais généralement disponibles (GA).
- Le runtime Python pour OpenShift Serverless Functions est désormais disponible en tant qu'aperçu technologique.
- Le support multi-conteneurs pour Knative Serving est maintenant disponible en tant qu'aperçu technologique. Cette fonctionnalité vous permet d'utiliser un seul service Knative pour déployer un pod multi-conteneurs.
Dans OpenShift Serverless 1.29 ou plus récent, les composants suivants de Knative Eventing seront réduits de deux pods à un seul :
-
imc-controller
-
imc-dispatcher
-
mt-broker-controller
-
mt-broker-filter
-
mt-broker-ingress
-
L'annotation
serverless.openshift.io/enable-secret-informer-filtering
pour le CR Serving est maintenant obsolète. L'annotation n'est valable que pour Istio, et non pour Kourier.Avec OpenShift Serverless 1.28, l'opérateur OpenShift Serverless permet d'injecter la variable d'environnement
ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
pournet-istio
etnet-kourier
.Si vous activez le filtrage des secrets, tous vos secrets doivent être étiquetés avec
networking.internal.knative.dev/certificate-uid: "<id>"
. Sinon, Knative Serving ne les détecte pas, ce qui entraîne des échecs. Vous devez étiqueter à la fois les nouveaux secrets et les secrets existants.Dans l'une des prochaines versions d'OpenShift Serverless, le filtrage des secrets sera activé par défaut. Pour éviter les échecs, étiquetez vos secrets à l'avance.
1.4.2. Problèmes connus
Actuellement, les runtimes pour Python ne sont pas pris en charge pour OpenShift Serverless Functions sur IBM Power, IBM zSystems et IBM® LinuxONE.
Les fonctions Node.js, TypeScript et Quarkus sont prises en charge sur ces architectures.
Sur la plateforme Windows, les fonctions Python ne peuvent pas être construites, exécutées ou déployées localement à l'aide du constructeur Source-to-Image en raison des autorisations du fichier
app.sh
.Pour contourner ce problème, utilisez le sous-système Windows pour Linux.
1.5. Notes de version pour Red Hat OpenShift Serverless 1.27
OpenShift Serverless 1.27 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
OpenShift Serverless 1.26 est la première version entièrement supportée par OpenShift Container Platform 4.12. OpenShift Serverless 1.25 et les versions antérieures ne se déploient pas sur OpenShift Container Platform 4.12.
Pour cette raison, avant de mettre à niveau OpenShift Container Platform vers la version 4.12, il faut d'abord mettre à niveau OpenShift Serverless vers la version 1.26 ou 1.27.
1.5.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.6.
- OpenShift Serverless utilise désormais Knative Eventing 1.6.
- OpenShift Serverless utilise désormais Kourier 1.6.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.6. - OpenShift Serverless utilise désormais Knative Kafka 1.6.
-
Le plug-in CLI
kn func
utilise désormaisfunc
1.8.1. - Les courtiers à espace de nommage sont désormais disponibles en tant qu'aperçu technologique. Ces courtiers peuvent être utilisés, par exemple, pour mettre en œuvre des politiques de contrôle d'accès basées sur les rôles (RBAC).
-
KafkaSink
utilise désormais par défaut le mode de contenu binaireCloudEvent
. Le mode de contenu binaire est plus efficace que le mode structuré car il utilise des en-têtes dans son corps au lieu d'unCloudEvent
. Par exemple, pour le protocole HTTP, il utilise les en-têtes HTTP. - Vous pouvez désormais utiliser le framework gRPC sur le protocole HTTP/2 pour le trafic externe en utilisant OpenShift Route sur OpenShift Container Platform 4.10 et plus. Cela améliore l'efficacité et la vitesse des communications entre le client et le serveur.
-
La version de l'API
v1alpha1
des CRDs Knative Operator Serving et Eventings est obsolète dans la version 1.27. Elle sera supprimée dans les versions futures. Red Hat recommande fortement d'utiliser la versionv1beta1
à la place. Cela n'affecte pas les installations existantes, car les CRD sont mis à jour automatiquement lors de la mise à niveau du Serverless Operator. - La fonction de délai de livraison est désormais activée par défaut. Elle vous permet de spécifier le délai d'attente pour chaque requête HTTP envoyée. Cette fonctionnalité reste un aperçu technologique.
1.5.2. Problèmes corrigés
-
Auparavant, les services Knative ne passaient pas toujours à l'état
Ready
, signalant qu'ils attendaient que l'équilibreur de charge soit prêt. Ce problème a été corrigé.
1.5.3. Problèmes connus
-
L'intégration d'OpenShift Serverless avec Red Hat OpenShift Service Mesh fait en sorte que le pod
net-kourier
manque de mémoire au démarrage lorsque trop de secrets sont présents sur le cluster. Les courtiers à espace de noms peuvent laisser
ClusterRoleBindings
dans l'espace de noms de l'utilisateur même après la suppression des courtiers à espace de noms.Si cela se produit, supprimez le site
ClusterRoleBinding
nommérbac-proxy-reviews-prom-rb-knative-kafka-broker-data-plane-{{.Namespace}}
dans l'espace de noms de l'utilisateur.Si vous utilisez
net-istio
pour Ingress et activez mTLS via SMCP en utilisantsecurity.dataPlane.mtls: true
, Service Mesh déploieDestinationRules
pour l'hôte*.local
, ce qui n'autorise pasDomainMapping
pour OpenShift Serverless.Pour contourner ce problème, activez mTLS en déployant
PeerAuthentication
au lieu d'utilisersecurity.dataPlane.mtls: true
.
1.6. Notes de version pour Red Hat OpenShift Serverless 1.26
OpenShift Serverless 1.26 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.6.1. Nouvelles fonctionnalités
- OpenShift Serverless Functions with Quarkus est maintenant GA.
- OpenShift Serverless utilise désormais Knative Serving 1.5.
- OpenShift Serverless utilise désormais Knative Eventing 1.5.
- OpenShift Serverless utilise désormais Kourier 1.5.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.5. - OpenShift Serverless utilise désormais Knative Kafka 1.5.
- OpenShift Serverless utilise désormais Knative Operator 1.3.
-
Le plugin CLI
kn func
utilise désormaisfunc
1.8.1. - Les réclamations de volumes persistants (PVC) sont désormais des GA. Les PVC fournissent un stockage permanent des données pour vos services Knative.
La nouvelle fonctionnalité des filtres de déclenchement est désormais disponible en avant-première pour les développeurs. Elle permet aux utilisateurs de spécifier un ensemble d'expressions de filtrage, où chaque expression est évaluée comme vraie ou fausse pour chaque événement.
Pour activer les nouveaux filtres de déclenchement, ajoutez l'entrée
new-trigger-filters: enabled
dans la section du typeKnativeEventing
dans la carte de configuration de l'opérateur :apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing ... ... spec: config: features: new-trigger-filters: enabled ...
Knative Operator 1.3 ajoute la version mise à jour de
v1beta1
de l'API pouroperator.knative.dev
.Pour passer de
v1alpha1
àv1beta1
dans vos cartes de configuration des ressources personnaliséesKnativeServing
etKnativeEventing
, modifiez la cléapiVersion
:Exemple
KnativeServing
carte de configuration des ressources personnaliséesapiVersion: operator.knative.dev/v1beta1 kind: KnativeServing ...
Exemple
KnativeEventing
carte de configuration des ressources personnaliséesapiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing ...
1.6.2. Problèmes corrigés
- Auparavant, le mode FIPS (Federal Information Processing Standards) était désactivé pour le courtier Kafka, la source Kafka et le puits Kafka. Ce problème a été corrigé et le mode FIPS est désormais disponible.
1.6.3. Problèmes connus
Si vous utilisez
net-istio
pour Ingress et activez mTLS via SMCP en utilisantsecurity.dataPlane.mtls: true
, Service Mesh déploieDestinationRules
pour l'hôte*.local
, ce qui n'autorise pasDomainMapping
pour OpenShift Serverless.Pour contourner ce problème, activez mTLS en déployant
PeerAuthentication
au lieu d'utilisersecurity.dataPlane.mtls: true
.
Ressources supplémentaires
1.7. Notes de version pour Red Hat OpenShift Serverless 1.25.0
OpenShift Serverless 1.25.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.7.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.4.
- OpenShift Serverless utilise désormais Knative Eventing 1.4.
- OpenShift Serverless utilise désormais Kourier 1.4.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.4. - OpenShift Serverless utilise désormais Knative Kafka 1.4.
-
Le plugin CLI
kn func
utilise désormaisfunc
1.7.0. - Des plugins d'environnement de développement intégré (IDE) pour la création et le déploiement de fonctions sont désormais disponibles pour Visual Studio Code et IntelliJ.
Knative Kafka broker est maintenant GA. Knative Kafka broker est une implémentation très performante de l'API Knative broker, ciblant directement Apache Kafka.
Il est recommandé de ne pas utiliser le MT-Channel-Broker, mais plutôt le Knative Kafka Broker.
-
Le Knative Kafka sink est maintenant GA. Un
KafkaSink
prend unCloudEvent
et l'envoie à un sujet Apache Kafka. Les événements peuvent être spécifiés en mode de contenu structuré ou binaire. - L'activation de TLS pour le trafic interne est désormais disponible en tant qu'aperçu technologique.
1.7.2. Problèmes corrigés
- Auparavant, Knative Serving avait un problème où la sonde de préparation échouait si le conteneur était redémarré après un échec de la sonde de durée de vie. Ce problème a été corrigé.
1.7.3. Problèmes connus
- Le mode Federal Information Processing Standards (FIPS) est désactivé pour le courtier Kafka, la source Kafka et le puits Kafka.
-
L'objet
SinkBinding
ne prend pas en charge les noms de révision personnalisés pour les services. Le pod Knative Serving Controller ajoute un nouvel informateur pour surveiller les secrets dans le cluster. L'informateur inclut les secrets dans le cache, ce qui augmente la consommation de mémoire du pod contrôleur.
Si le module manque de mémoire, vous pouvez contourner le problème en augmentant la limite de mémoire pour le déploiement.
Si vous utilisez
net-istio
pour Ingress et activez mTLS via SMCP en utilisantsecurity.dataPlane.mtls: true
, Service Mesh déploieDestinationRules
pour l'hôte*.local
, ce qui n'autorise pasDomainMapping
pour OpenShift Serverless.Pour contourner ce problème, activez mTLS en déployant
PeerAuthentication
au lieu d'utilisersecurity.dataPlane.mtls: true
.
Ressources supplémentaires
1.8. Notes de version pour Red Hat OpenShift Serverless 1.24.0
OpenShift Serverless 1.24.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.8.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.3.
- OpenShift Serverless utilise désormais Knative Eventing 1.3.
- OpenShift Serverless utilise désormais Kourier 1.3.
-
OpenShift Serverless utilise désormais Knative
kn
CLI 1.3. - OpenShift Serverless utilise désormais Knative Kafka 1.3.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.24. - La prise en charge des services Knative par les conteneurs Init est désormais disponible de manière générale (GA).
- OpenShift Serverless logic est désormais disponible en tant que Developer Preview. Elle permet de définir des modèles de flux de travail déclaratifs pour gérer les applications sans serveur.
- Vous pouvez désormais utiliser le service de gestion des coûts avec OpenShift Serverless.
1.8.2. Problèmes corrigés
L'intégration d'OpenShift Serverless avec Red Hat OpenShift Service Mesh fait en sorte que le pod
net-istio-controller
manque de mémoire au démarrage lorsque trop de secrets sont présents sur le cluster.Il est désormais possible d'activer le filtrage des secrets, ce qui permet à
net-istio-controller
de ne prendre en compte que les secrets portant une étiquettenetworking.internal.knative.dev/certificate-uid
, réduisant ainsi la quantité de mémoire nécessaire.- L'aperçu technologique d'OpenShift Serverless Functions utilise désormais par défaut les Buildpacks Cloud Native pour construire des images de conteneurs.
1.8.3. Problèmes connus
- Le mode Federal Information Processing Standards (FIPS) est désactivé pour le courtier Kafka, la source Kafka et le puits Kafka.
Dans OpenShift Serverless 1.23, le support pour KafkaBindings et le webhook
kafka-binding
ont été supprimés. Cependant, unkafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration
existant peut subsister, pointant vers le servicekafka-source-webhook
, qui n'existe plus.Pour certaines spécifications de KafkaBindings sur le cluster,
kafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration
peut être configuré pour transmettre tout événement de création et de mise à jour à diverses ressources, telles que Deployments, Knative Services ou Jobs, par le biais du webhook, qui échouerait alors.Pour contourner ce problème, supprimez manuellement
kafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration
du cluster après avoir mis à jour OpenShift Serverless 1.23 :$ oc delete mutatingwebhookconfiguration kafkabindings.webhook.kafka.sources.knative.dev
Si vous utilisez
net-istio
pour Ingress et activez mTLS via SMCP en utilisantsecurity.dataPlane.mtls: true
, Service Mesh déploieDestinationRules
pour l'hôte*.local
, ce qui n'autorise pasDomainMapping
pour OpenShift Serverless.Pour contourner ce problème, activez mTLS en déployant
PeerAuthentication
au lieu d'utilisersecurity.dataPlane.mtls: true
.
1.9. Notes de version pour Red Hat OpenShift Serverless 1.23.0
OpenShift Serverless 1.23.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.9.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.2.
- OpenShift Serverless utilise désormais Knative Eventing 1.2.
- OpenShift Serverless utilise désormais Kourier 1.2.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.2. - OpenShift Serverless utilise désormais Knative Kafka 1.2.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.24. -
Il est désormais possible d'utiliser l'annotation
kafka.eventing.knative.dev/external.topic
avec le courtier Kafka. Cette annotation permet d'utiliser un topic existant géré en externe au lieu que le broker crée son propre topic interne. -
Les composants Kafka
kafka-ch-controller
etkafka-webhook
n'existent plus. Ils ont été remplacés par le composantkafka-webhook-eventing
. - L'aperçu technologique d'OpenShift Serverless Functions utilise désormais Source-to-Image (S2I) par défaut pour construire des images de conteneurs.
1.9.2. Problèmes connus
- Le mode Federal Information Processing Standards (FIPS) est désactivé pour le courtier Kafka, la source Kafka et le puits Kafka.
-
Si vous supprimez un espace de noms qui inclut un courtier Kafka, la suppression du finalisateur de l'espace de noms peut échouer si le secret
auth.secret.ref.name
du courtier est supprimé avant le courtier. L'exécution d'OpenShift Serverless avec un grand nombre de services Knative peut faire en sorte que les pods activateurs Knative s'approchent de leur limite de mémoire par défaut de 600 Mo. Ces pods peuvent être redémarrés si la consommation de mémoire atteint cette limite. Les requêtes et les limites pour le déploiement de l'activateur peuvent être configurées en modifiant la ressource personnalisée
KnativeServing
:apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: deployments: - name: activator resources: - container: activator requests: cpu: 300m memory: 60Mi limits: cpu: 1000m memory: 1000Mi
-
Si vous utilisez Cloud Native Buildpacks comme stratégie de construction locale pour une fonction,
kn func
n'est pas en mesure de démarrer automatiquement podman ou d'utiliser un tunnel SSH vers un démon distant. Pour résoudre ces problèmes, il faut qu'un démon Docker ou podman soit déjà en cours d'exécution sur l'ordinateur de développement local avant de déployer une fonction. - Les constructions de fonctions sur le cluster échouent actuellement pour les systèmes d'exécution Quarkus et Golang. Elles fonctionnent correctement pour les exécutions Node, Typescript, Python et Springboot.
Si vous utilisez
net-istio
pour Ingress et activez mTLS via SMCP en utilisantsecurity.dataPlane.mtls: true
, Service Mesh déploieDestinationRules
pour l'hôte*.local
, ce qui n'autorise pasDomainMapping
pour OpenShift Serverless.Pour contourner ce problème, activez mTLS en déployant
PeerAuthentication
au lieu d'utilisersecurity.dataPlane.mtls: true
.
Ressources supplémentaires
1.10. Notes de version pour Red Hat OpenShift Serverless 1.22.0
OpenShift Serverless 1.22.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.10.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.1.
- OpenShift Serverless utilise désormais Knative Eventing 1.1.
- OpenShift Serverless utilise désormais Kourier 1.1.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.1. - OpenShift Serverless utilise désormais Knative Kafka 1.1.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.23. - Le support des conteneurs Init pour les services Knative est maintenant disponible en tant qu'aperçu technologique.
- La prise en charge des réclamations de volume persistantes (PVC) pour les services Knative est désormais disponible en tant qu'aperçu technologique.
-
Les espaces de noms des systèmes
knative-serving
,knative-serving-ingress
,knative-eventing
etknative-kafka
ont désormais l'étiquetteknative.openshift.io/part-of: "openshift-serverless"
par défaut. - Le tableau de bord Knative Eventing - Kafka Broker/Trigger a été ajouté, ce qui permet de visualiser le courtier Kafka et les métriques de déclenchement dans la console web.
- Le tableau de bord Knative Eventing - KafkaSink a été ajouté, ce qui permet de visualiser les métriques de KafkaSink dans la console web.
- Le tableau de bord Knative Eventing - Broker/Trigger s'appelle désormais Knative Eventing - Channel-based Broker/Trigger.
-
Le label
knative.openshift.io/part-of: "openshift-serverless"
a remplacé le labelknative.openshift.io/system-namespace
. -
Le style de nommage dans les fichiers de configuration YAML de Knative Serving est passé de la casse camel (
ExampleName
) au style trait d'union (example-name
). À partir de cette version, utilisez la notation de style trait d'union lors de la création ou de l'édition des fichiers de configuration YAML de Knative Serving.
1.10.2. Problèmes connus
- Le mode Federal Information Processing Standards (FIPS) est désactivé pour le courtier Kafka, la source Kafka et le puits Kafka.
1.11. Notes de version pour Red Hat OpenShift Serverless 1.21.0
OpenShift Serverless 1.21.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.11.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 1.0
- OpenShift Serverless utilise désormais Knative Eventing 1.0.
- OpenShift Serverless utilise désormais Kourier 1.0.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 1.0. - OpenShift Serverless utilise désormais Knative Kafka 1.0.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.21. - Le puits Kafka est maintenant disponible en tant qu'aperçu technologique.
-
Le projet open source Knative a commencé à déprécier les clés de configuration à base de camel en faveur de l'utilisation cohérente de clés à base de kebab. Par conséquent, la clé
defaultExternalScheme
, précédemment mentionnée dans les notes de version 1.18.0 d'OpenShift Serverless, est maintenant obsolète et remplacée par la clédefault-external-scheme
. Les instructions d'utilisation de la clé restent les mêmes.
1.11.2. Problèmes corrigés
-
Dans OpenShift Serverless 1.20.0, il y avait un problème de livraison d'événement affectant l'utilisation de
kn event send
pour envoyer des événements à un service. Ce problème est maintenant corrigé. -
Dans OpenShift Serverless 1.20.0 (
func
0.20), les fonctions TypeScript créées avec le modèlehttp
ne parvenaient pas à se déployer sur le cluster. Ce problème est maintenant corrigé. -
Dans OpenShift Serverless 1.20.0 (
func
0.20), le déploiement d'une fonction utilisant le registregcr.io
échouait avec une erreur. Ce problème est maintenant corrigé. -
Dans OpenShift Serverless 1.20.0 (
func
0.20), la création d'un répertoire de projet de fonction Springboot avec la commandekn func create
et l'exécution de la commandekn func build
ont échoué avec un message d'erreur. Ce problème est maintenant corrigé. -
Dans OpenShift Serverless 1.19.0 (
func
0.19), certains runtimes étaient incapables de construire une fonction en utilisant podman. Ce problème est maintenant corrigé.
1.11.3. Problèmes connus
Actuellement, le contrôleur de mappage de domaine ne peut pas traiter l'URI d'un courtier qui contient un chemin qui n'est actuellement pas pris en charge.
Cela signifie que si vous souhaitez utiliser une ressource personnalisée (CR)
DomainMapping
pour mapper un domaine personnalisé à un courtier, vous devez configurer la CRDomainMapping
avec le service d'entrée du courtier et ajouter le chemin d'accès exact du courtier au domaine personnalisé :Exemple
DomainMapping
CRapiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain-name> namespace: knative-eventing spec: ref: name: broker-ingress kind: Service apiVersion: v1
L'URI du courtier est alors
<domain-name>/<broker-namespace>/<broker-name>
.
1.12. Notes de version pour Red Hat OpenShift Serverless 1.20.0
OpenShift Serverless 1.20.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.12.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 0.26.
- OpenShift Serverless utilise désormais Knative Eventing 0.26.
- OpenShift Serverless utilise désormais Kourier 0.26.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 0.26. - OpenShift Serverless utilise désormais Knative Kafka 0.26.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.20. Le courtier Kafka est désormais disponible en tant qu'aperçu technologique.
ImportantLe courtier Kafka, qui est actuellement en avant-première technologique, n'est pas pris en charge par FIPS.
-
Le plugin
kn event
est désormais disponible en tant qu'aperçu technologique. -
Les drapeaux
--min-scale
et--max-scale
de la commandekn service create
sont obsolètes. Utilisez plutôt les drapeaux--scale-min
et--scale-max
.
1.12.2. Problèmes connus
OpenShift Serverless déploie les services Knative avec une adresse par défaut qui utilise HTTPS. Lors de l'envoi d'un événement à une ressource à l'intérieur du cluster, l'expéditeur n'a pas l'autorité de certification (CA) du cluster configurée. Cela entraîne l'échec de la livraison de l'événement, à moins que le cluster n'utilise des certificats globalement acceptés.
Par exemple, la livraison d'un événement à une adresse accessible au public fonctionne :
$ kn event send --to-url https://ce-api.foo.example.com/
En revanche, cette livraison échoue si le service utilise une adresse publique avec un certificat HTTPS délivré par une autorité de certification personnalisée :
$ kn event send --to Service:serving.knative.dev/v1:event-display
L'envoi d'un événement à d'autres objets adressables, tels que les courtiers ou les canaux, n'est pas concerné par ce problème et fonctionne comme prévu.
- Le courtier Kafka ne fonctionne pas actuellement sur un cluster avec le mode Federal Information Processing Standards (FIPS) activé.
Si vous créez un répertoire de projet de fonction Springboot avec la commande
kn func create
, l'exécution ultérieure de la commandekn func build
échoue avec ce message d'erreur :[analyzer] no stack metadata found at path '' [analyzer] ERROR: failed to : set API for buildpack 'paketo-buildpacks/ca-certificates@3.0.2': buildpack API version '0.7' is incompatible with the lifecycle
Pour contourner le problème, vous pouvez remplacer la propriété
builder
pargcr.io/paketo-buildpacks/builder:base
dans le fichier de configuration de la fonctionfunc.yaml
.Le déploiement d'une fonction à l'aide du registre
gcr.io
échoue avec ce message d'erreur :Error: failed to get credentials: failed to verify credentials: status code: 404
Pour contourner le problème, utilisez un registre différent de celui de
gcr.io
, tel quequay.io
oudocker.io
.Les fonctions TypeScript créées avec le modèle
http
ne se déploient pas sur le cluster.Pour contourner le problème, remplacez la section suivante dans le fichier
func.yaml
:buildEnvs: []
avec ceci :
buildEnvs: - name: BP_NODE_RUN_SCRIPTS value: build
Dans
func
version 0.20, certains runtimes peuvent être incapables de construire une fonction en utilisant podman. Vous pouvez voir un message d'erreur similaire au suivant :ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
La solution suivante permet de résoudre ce problème :
Mettez à jour le service podman en ajoutant
--time=0
à la définition du serviceExecStart
:Exemple de configuration de service
ExecStart=/usr/bin/podman $LOGGING system service --time=0
Redémarrez le service podman en exécutant les commandes suivantes :
$ systemctl --user daemon-reload
$ systemctl restart --user podman.socket
Vous pouvez également exposer l'API podman en utilisant TCP :
$ podman system service --time=0 tcp:127.0.0.1:5534 & export DOCKER_HOST=tcp://127.0.0.1:5534
1.13. Notes de version pour Red Hat OpenShift Serverless 1.19.0
OpenShift Serverless 1.19.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.13.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 0.25.
- OpenShift Serverless utilise désormais Knative Eventing 0.25.
- OpenShift Serverless utilise désormais Kourier 0.25.
-
OpenShift Serverless utilise désormais Knative (
kn
) CLI 0.25. - OpenShift Serverless utilise désormais Knative Kafka 0.25.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.19. -
L'API
KafkaBinding
est obsolète dans OpenShift Serverless 1.19.0 et sera supprimée dans une prochaine version. - La redirection HTTPS est maintenant supportée et peut être configurée soit globalement pour un cluster, soit pour chaque service Knative.
1.13.2. Problèmes corrigés
- Dans les versions précédentes, le répartiteur du canal Kafka n'attendait que le succès du commit local avant de répondre, ce qui pouvait entraîner la perte d'événements en cas de défaillance d'un nœud Apache Kafka. Le répartiteur du canal Kafka attend désormais que toutes les répliques synchronisées s'engagent avant de répondre.
1.13.3. Problèmes connus
Dans
func
version 0.19, certains runtimes peuvent être incapables de construire une fonction en utilisant podman. Vous pouvez voir un message d'erreur similaire au suivant :ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
La solution suivante permet de résoudre ce problème :
Mettez à jour le service podman en ajoutant
--time=0
à la définition du serviceExecStart
:Exemple de configuration de service
ExecStart=/usr/bin/podman $LOGGING system service --time=0
Redémarrez le service podman en exécutant les commandes suivantes :
$ systemctl --user daemon-reload
$ systemctl restart --user podman.socket
Vous pouvez également exposer l'API podman en utilisant TCP :
$ podman system service --time=0 tcp:127.0.0.1:5534 & export DOCKER_HOST=tcp://127.0.0.1:5534
1.14. Notes de version pour Red Hat OpenShift Serverless 1.18.0
OpenShift Serverless 1.18.0 est maintenant disponible. Les nouvelles fonctionnalités, les changements et les problèmes connus qui concernent OpenShift Serverless sur OpenShift Container Platform sont inclus dans cette rubrique.
1.14.1. Nouvelles fonctionnalités
- OpenShift Serverless utilise désormais Knative Serving 0.24.0.
- OpenShift Serverless utilise désormais Knative Eventing 0.24.0.
- OpenShift Serverless utilise désormais Kourier 0.24.0.
-
OpenShift Serverless utilise maintenant Knative (
kn
) CLI 0.24.0. - OpenShift Serverless utilise désormais Knative Kafka 0.24.7.
-
Le plugin CLI
kn func
utilise désormaisfunc
0.18.0. Dans la prochaine version OpenShift Serverless 1.19.0, le schéma d'URL des routes externes sera par défaut HTTPS pour une sécurité accrue.
Si vous ne souhaitez pas que cette modification s'applique à vos charges de travail, vous pouvez remplacer le paramètre par défaut avant de passer à la version 1.19.0, en ajoutant le fichier YAML suivant à votre ressource personnalisée (CR)
KnativeServing
:... spec: config: network: defaultExternalScheme: "http" ...
Si vous voulez que le changement s'applique déjà à la version 1.18.0, ajoutez le YAML suivant :
... spec: config: network: defaultExternalScheme: "https" ...
Dans la prochaine version OpenShift Serverless 1.19.0, le type de service par défaut par lequel la passerelle Kourier est exposée sera
ClusterIP
et nonLoadBalancer
.Si vous ne souhaitez pas que cette modification s'applique à vos charges de travail, vous pouvez remplacer le paramètre par défaut avant la mise à niveau vers la version 1.19.0, en ajoutant le fichier YAML suivant à votre ressource personnalisée (CR)
KnativeServing
:... spec: ingress: kourier: service-type: LoadBalancer ...
-
Vous pouvez désormais utiliser les volumes
emptyDir
avec OpenShift Serverless. Voir la documentation OpenShift Serverless sur Knative Serving pour plus de détails. -
Les modèles Rust sont désormais disponibles lorsque vous créez une fonction à l'aide de
kn func
.
1.14.2. Problèmes corrigés
- La version précédente 1.4 de Camel-K n'était pas compatible avec OpenShift Serverless 1.17.0. Le problème dans Camel-K a été corrigé, et la version 1.4.1 de Camel-K peut être utilisée avec OpenShift Serverless 1.17.0.
Auparavant, si vous créiez un nouvel abonnement pour un canal Kafka ou une nouvelle source Kafka, il était possible que le plan de données Kafka ne soit pas prêt à distribuer les messages après que l'abonnement ou le puits nouvellement créé ait signalé un statut prêt.
Par conséquent, les messages envoyés pendant la période où le plan de données n'indiquait pas qu'il était prêt peuvent ne pas avoir été transmis à l'abonné ou au destinataire.
Dans OpenShift Serverless 1.18.0, le problème est corrigé et les messages initiaux ne sont plus perdus. Pour plus d'informations sur ce problème, voir l'article #6343981 de la base de connaissances.
1.14.3. Problèmes connus
Les anciennes versions du CLI Knative
kn
peuvent utiliser d'anciennes versions des API Knative Serving et Knative Eventing. Par exemple, la version 0.23.2 du CLIkn
utilise la version de l'APIv1alpha1
.D'autre part, les nouvelles versions d'OpenShift Serverless peuvent ne plus prendre en charge les anciennes versions de l'API. Par exemple, OpenShift Serverless 1.18.0 ne prend plus en charge la version
v1alpha1
de l'APIkafkasources.sources.knative.dev
.Par conséquent, l'utilisation d'une ancienne version de la CLI Knative
kn
avec une version plus récente d'OpenShift Serverless peut produire une erreur parce quekn
ne peut pas trouver l'API obsolète. Par exemple, la version 0.23.2 du CLIkn
ne fonctionne pas avec OpenShift Serverless 1.18.0.Pour éviter tout problème, utilisez la dernière version de
kn
CLI disponible pour votre version d'OpenShift Serverless. Pour OpenShift Serverless 1.18.0, utilisez Knativekn
CLI 0.24.0.
Chapitre 2. À propos de Serverless
2.1. Aperçu d'OpenShift Serverless
OpenShift Serverless fournit des blocs de construction natifs de Kubernetes qui permettent aux développeurs de créer et de déployer des applications sans serveur et axées sur les événements sur OpenShift Container Platform. OpenShift Serverless est basé sur le projet open source Knative, qui assure la portabilité et la cohérence pour les environnements hybrides et multicloud en permettant une plateforme serverless de niveau entreprise.
Parce qu'OpenShift Serverless est publié à une cadence différente de celle d'OpenShift Container Platform, la documentation d'OpenShift Serverless ne maintient pas de jeux de documentation distincts pour les versions mineures du produit. La documentation actuelle s'applique à toutes les versions d'OpenShift Serverless actuellement prises en charge, à moins que des limitations spécifiques à une version ne soient indiquées dans un sujet particulier ou pour une fonctionnalité particulière.
Pour plus d'informations sur le cycle de vie d'OpenShift Serverless et les plateformes prises en charge, consultez la Politique relative au cycle de vie des plateformes.
2.1.1. Ressources supplémentaires
2.2. Servir Knative
Knative Serving soutient les développeurs qui souhaitent créer, déployer et gérer des applications cloud-natives. Il fournit un ensemble d'objets en tant que définitions de ressources personnalisées Kubernetes (CRD) qui définissent et contrôlent le comportement des charges de travail sans serveur sur un cluster OpenShift Container Platform.
Les développeurs utilisent ces CRD pour créer des instances de ressources personnalisées (CR) qui peuvent être utilisées comme blocs de construction pour répondre à des cas d'utilisation complexes. Par exemple :
- Déployer rapidement des conteneurs sans serveur.
- Mise à l'échelle automatique des pods.
2.2.1. Ressources de service Knative
- Service
-
Le CRD
service.serving.knative.dev
gère automatiquement le cycle de vie de votre charge de travail pour s'assurer que l'application est déployée et accessible via le réseau. Il crée une route, une configuration et une nouvelle révision pour chaque changement apporté à un service créé par l'utilisateur ou à une ressource personnalisée. La plupart des interactions des développeurs dans Knative sont effectuées en modifiant les services. - Révision
-
Le CRD
revision.serving.knative.dev
est un instantané du code et de la configuration pour chaque modification apportée à la charge de travail. Les révisions sont des objets immuables et peuvent être conservées aussi longtemps que nécessaire. - Itinéraire
-
Le CRD
route.serving.knative.dev
établit une correspondance entre un point d'extrémité du réseau et une ou plusieurs révisions. Vous pouvez gérer le trafic de plusieurs manières, y compris le trafic fractionné et les itinéraires nommés. - Configuration
-
Le CRD
configuration.serving.knative.dev
maintient l'état souhaité pour votre déploiement. Il fournit une séparation nette entre le code et la configuration. La modification d'une configuration crée une nouvelle révision.
2.3. Concours complet d'équitation
Knative Eventing sur OpenShift Container Platform permet aux développeurs d'utiliser une architecture pilotée par les événements avec des applications sans serveur. Une architecture pilotée par les événements est basée sur le concept de relations découplées entre les producteurs et les consommateurs d'événements.
Les producteurs d'événements créent des événements, et les événements sinks, ou consommateurs, reçoivent des événements. Knative Eventing utilise des requêtes HTTP POST standard pour envoyer et recevoir des événements entre les producteurs et les récepteurs d'événements. Ces événements sont conformes aux spécifications CloudEvents, qui permettent de créer, d'analyser, d'envoyer et de recevoir des événements dans n'importe quel langage de programmation.
Knative Eventing prend en charge les cas d'utilisation suivants :
- Publier un événement sans créer de consommateur
- Vous pouvez envoyer des événements à un courtier sous la forme d'un HTTP POST et utiliser la liaison pour découpler la configuration de destination de votre application qui produit les événements.
- Consommer un événement sans créer d'éditeur
- Vous pouvez utiliser un déclencheur pour consommer des événements à partir d'un courtier en fonction des attributs de l'événement. L'application reçoit les événements sous forme de HTTP POST.
Pour permettre la livraison à plusieurs types de puits, Knative Eventing définit les interfaces génériques suivantes qui peuvent être mises en œuvre par plusieurs ressources Kubernetes :
- Ressources adressables
-
Capable de recevoir et d'accuser réception d'un événement transmis par HTTP à une adresse définie dans le champ
status.address.url
de l'événement. La ressource KubernetesService
satisfait également à l'interface adressable. - Ressources appelables
-
Capable de recevoir un événement transmis par HTTP et de le transformer, en renvoyant
0
ou1
nouveaux événements dans la charge utile de la réponse HTTP. Ces événements renvoyés peuvent être traités de la même manière que les événements provenant d'une source externe.
2.3.1. Utiliser le courtier Knative pour Apache Kafka
L'implémentation du courtier Knative pour Apache Kafka fournit des options d'intégration vous permettant d'utiliser les versions prises en charge de la plateforme de streaming de messages Apache Kafka avec OpenShift Serverless. Kafka fournit des options pour la source d'événement, le canal, le courtier et les capacités de puits d'événement.
L'implémentation du courtier Knative pour Apache Kafka n'est pas actuellement prise en charge pour les systèmes IBM zSystems et IBM Power.
Le courtier Knative pour Apache Kafka offre des options supplémentaires, telles que :
- Source Kafka
- Canal Kafka
- Courtier Kafka
- Puits Kafka
2.3.2. Ressources supplémentaires
2.4. À propos d'OpenShift Serverless Functions
OpenShift Serverless Functions permet aux développeurs de créer et de déployer des fonctions sans état et pilotées par des événements en tant que service Knative sur OpenShift Container Platform. Le CLI kn func
est fourni en tant que plugin pour le CLI Knative kn
. Vous pouvez utiliser la CLI kn func
pour créer, construire et déployer l'image du conteneur en tant que service Knative sur le cluster.
2.4.1. Temps d'exécution inclus
OpenShift Serverless Functions fournit des modèles qui peuvent être utilisés pour créer des fonctions de base pour les runtimes suivants :
2.4.2. Prochaines étapes
- Commencer avec les fonctions.
Chapitre 3. Installation de Serverless
3.1. Préparer l'installation d'OpenShift Serverless
Lisez les informations suivantes sur les configurations prises en charge et les prérequis avant d'installer OpenShift Serverless.
- OpenShift Serverless est pris en charge pour une installation dans un environnement réseau restreint.
- OpenShift Serverless ne peut actuellement pas être utilisé dans une configuration multi-tenant sur un seul cluster.
3.1.1. Configurations prises en charge
L'ensemble des fonctionnalités, configurations et intégrations prises en charge pour OpenShift Serverless, versions actuelles et antérieures, est disponible sur la page Configurations prises en charge.
3.1.2. Évolutivité et performance
OpenShift Serverless a été testé avec une configuration de 3 nœuds principaux et 3 nœuds de travail, qui disposent chacun de 64 CPU, 457 Go de mémoire et 394 Go de stockage.
Le nombre maximal de services Knative pouvant être créés à l'aide de cette configuration est de 3 000. Cela correspond à la limite de 10 000 services Kubernetes de OpenShift Container Platform, puisque 1 service Knative crée 3 services Kubernetes.
Le temps de réponse moyen à partir de zéro était d'environ 3,4 secondes, avec un temps de réponse maximum de 8 secondes, et un 99,9ème percentile de 4,5 secondes pour une application Quarkus simple. Ces temps peuvent varier en fonction de l'application et de sa durée d'exécution.
3.1.3. Définition des exigences en matière de taille des grappes
Pour installer et utiliser OpenShift Serverless, le cluster OpenShift Container Platform doit être correctement dimensionné.
Les exigences suivantes ne concernent que le pool de machines de travail du cluster OpenShift Container Platform. Les nœuds du plan de contrôle ne sont pas utilisés pour l'ordonnancement général et ne sont pas pris en compte dans les exigences.
Le minimum requis pour utiliser OpenShift Serverless est un cluster avec 10 CPUs et 40GB de mémoire. Par défaut, chaque pod demande ~400m de CPU, les exigences minimales sont donc basées sur cette valeur.
La taille totale requise pour exécuter OpenShift Serverless dépend des composants installés et des applications déployées, et peut varier en fonction de votre déploiement.
3.1.4. Mise à l'échelle de votre cluster à l'aide d'ensembles de machines de calcul
Vous pouvez utiliser l'API d'OpenShift Container Platform MachineSet
pour augmenter manuellement la taille de votre cluster. Les exigences minimales signifient généralement que vous devez augmenter l'un des ensembles de machines de calcul par défaut de deux machines supplémentaires. Voir Mise à l'échelle manuelle d'un ensemble de machines de calcul.
3.1.4.1. Exigences supplémentaires pour les cas d'utilisation avancés
Pour des cas d'utilisation plus avancés tels que le logging ou le metering sur OpenShift Container Platform, vous devez déployer plus de ressources. Les exigences recommandées pour de tels cas d'utilisation sont 24 CPU et 96 Go de mémoire.
Si vous avez activé la haute disponibilité (HA) sur votre cluster, cela nécessite entre 0,5 et 1,5 cœurs et entre 200 Mo et 2 Go de mémoire pour chaque réplique du plan de contrôle de Knative Serving. HA est activé par défaut pour certains composants de Knative Serving. Vous pouvez désactiver HA en suivant la documentation sur "Configuring high availability replicas".
3.1.5. Ressources supplémentaires
3.2. Installation de l'opérateur OpenShift Serverless
L'installation de l'OpenShift Serverless Operator vous permet d'installer et d'utiliser Knative Serving, Knative Eventing et le courtier Knative pour Apache Kafka sur un cluster OpenShift Container Platform. OpenShift Serverless Operator gère les définitions de ressources personnalisées (CRD) Knative pour votre cluster et vous permet de les configurer sans modifier directement les cartes de configuration individuelles pour chaque composant.
3.2.1. Installer l'opérateur OpenShift Serverless depuis la console web
Vous pouvez installer l'Opérateur OpenShift Serverless depuis l'OperatorHub en utilisant la console web d'OpenShift Container Platform. L'installation de cet opérateur vous permet d'installer et d'utiliser des composants Knative.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Votre cluster a la capacité Marketplace activée ou la source du catalogue Red Hat Operator configurée manuellement.
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
Procédure
- Dans la console web d'OpenShift Container Platform, naviguez jusqu'à la page Operators → OperatorHub.
- Faites défiler ou tapez le mot-clé Serverless dans la boîte Filter by keyword pour trouver l'OpenShift Serverless Operator.
- Examinez les informations relatives à l'opérateur et cliquez sur Install.
Sur la page Install Operator:
-
L'adresse Installation Mode est All namespaces on the cluster (default). Ce mode installe l'opérateur dans l'espace de noms par défaut
openshift-serverless
afin qu'il soit surveillé et mis à la disposition de tous les espaces de noms du cluster. -
Le site Installed Namespace est
openshift-serverless
. - Sélectionnez le canal stable comme Update Channel. Le canal stable permettra l'installation de la dernière version stable d'OpenShift Serverless Operator.
- Sélectionnez la stratégie d'approbation Automatic ou Manual.
-
L'adresse Installation Mode est All namespaces on the cluster (default). Ce mode installe l'opérateur dans l'espace de noms par défaut
- Cliquez sur Install pour rendre l'opérateur disponible pour les espaces de noms sélectionnés sur ce cluster OpenShift Container Platform.
Depuis la page Catalog → Operator Management, vous pouvez surveiller la progression de l'installation et de la mise à niveau de l'abonnement OpenShift Serverless Operator.
- Si vous avez sélectionné une stratégie d'approbation Manual, l'état de mise à niveau de l'abonnement restera Upgrading jusqu'à ce que vous examiniez et approuviez son plan d'installation. Après approbation sur la page Install Plan, le statut de mise à niveau de l'abonnement passe à Up to date.
- Si vous avez sélectionné une stratégie d'approbation Automatic, le statut du surclassement devrait être résolu à Up to date sans intervention.
Vérification
Une fois que l'état de mise à niveau de l'abonnement est Up to date, sélectionnez Catalog → Installed Operators pour vérifier que l'opérateur OpenShift Serverless finit par apparaître et que son Status se résout finalement en InstallSucceeded dans l'espace de noms concerné.
Si ce n'est pas le cas :
- Passez à la page Catalog → Operator Management et inspectez les onglets Operator Subscriptions et Install Plans pour voir s'il n'y a pas de défaillance ou d'erreur sous Status.
-
Vérifiez les journaux de tous les pods du projet
openshift-serverless
sur la page Workloads → Pods qui signalent des problèmes afin de les résoudre.
Si vous souhaitez utiliser Red Hat OpenShift distributed tracing avec OpenShift Serverless, vous devez installer et configurer Red Hat OpenShift distributed tracing avant d'installer Knative Serving ou Knative Eventing.
3.2.2. Installer l'opérateur OpenShift Serverless depuis le CLI
Vous pouvez installer l'Opérateur OpenShift Serverless depuis le OperatorHub en utilisant le CLI. L'installation de cet opérateur vous permet d'installer et d'utiliser des composants Knative.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Votre cluster a la capacité Marketplace activée ou la source du catalogue Red Hat Operator configurée manuellement.
- Vous vous êtes connecté au cluster OpenShift Container Platform.
Procédure
Créez un fichier YAML contenant les objets
Namespace
,OperatorGroup
, etSubscription
pour abonner un espace de noms à l'opérateur OpenShift Serverless. Par exemple, créez le fichierserverless-subscription.yaml
avec le contenu suivant :Exemple d'abonnement
--- apiVersion: v1 kind: Namespace metadata: name: openshift-serverless --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: serverless-operators namespace: openshift-serverless spec: {} --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: serverless-operator namespace: openshift-serverless spec: channel: stable 1 name: serverless-operator 2 source: redhat-operators 3 sourceNamespace: openshift-marketplace 4
- 1
- Le nom du canal de l'opérateur. Le canal
stable
permet l'installation de la version stable la plus récente de l'Opérateur OpenShift Serverless. - 2
- Le nom de l'opérateur auquel s'abonner. Pour l'opérateur OpenShift Serverless, il s'agit toujours de
serverless-operator
. - 3
- Le nom du CatalogSource qui fournit l'opérateur. Utilisez
redhat-operators
pour les sources de catalogue par défaut d'OperatorHub. - 4
- L'espace de noms du CatalogSource. Utilisez
openshift-marketplace
pour les sources de catalogue par défaut d'OperatorHub.
Créer l'objet
Subscription
:$ oc apply -f serverless-subscription.yaml
Vérification
Vérifiez que la version du service de cluster (CSV) a atteint la phase Succeeded
:
Example command
$ oc get csv
Exemple de sortie
NAME DISPLAY VERSION REPLACES PHASE serverless-operator.v1.25.0 Red Hat OpenShift Serverless 1.25.0 serverless-operator.v1.24.0 Succeeded
Si vous souhaitez utiliser Red Hat OpenShift distributed tracing avec OpenShift Serverless, vous devez installer et configurer Red Hat OpenShift distributed tracing avant d'installer Knative Serving ou Knative Eventing.
3.2.3. Configuration globale
L'opérateur OpenShift Serverless gère la configuration globale d'une installation Knative, y compris la propagation des valeurs à partir de KnativeServing
et KnativeEventing
ressources personnalisées aux cartes de configuration du système. Toute mise à jour des cartes de configuration appliquée manuellement est écrasée par l'Opérateur. Cependant, la modification des ressources personnalisées Knative vous permet de définir des valeurs pour ces cartes de configuration.
Knative dispose de plusieurs cartes de configuration qui sont nommées avec le préfixe config-
. Toutes les cartes de configuration Knative sont créées dans le même espace de noms que la ressource personnalisée à laquelle elles s'appliquent. Par exemple, si la ressource personnalisée KnativeServing
est créée dans l'espace de noms knative-serving
, toutes les cartes de configuration Knative Serving sont également créées dans cet espace de noms.
Les ressources personnalisées Knative spec.config
ont une entrée <name>
pour chaque carte de configuration, nommée config-<name>
, avec une valeur qui sera utilisée pour la carte de configuration data
.
3.2.4. Ressources supplémentaires
3.2.5. Prochaines étapes
- Une fois l'OpenShift Serverless Operator installé, vous pouvez installer Knative Serving ou Knative Eventing.
3.3. Installation du CLI Knative
Le CLI de Knative (kn
) n'a pas son propre mécanisme de connexion. Pour vous connecter au cluster, vous devez installer la CLI OpenShift (oc
) et utiliser la commande oc login
. Les options d'installation des CLI peuvent varier en fonction de votre système d'exploitation.
Pour plus d'informations sur l'installation de l'OpenShift CLI (oc
) pour votre système d'exploitation et la connexion avec oc
, consultez la documentation de démarrage de l'OpenShift CLI.
OpenShift Serverless ne peut pas être installé à l'aide de la CLI Knative (kn
). Un administrateur de cluster doit installer l'opérateur OpenShift Serverless et configurer les composants Knative, comme décrit dans la documentation Installation de l'opérateur OpenShift Serverless.
Si vous essayez d'utiliser une ancienne version du CLI Knative (kn
) avec une version plus récente d'OpenShift Serverless, l'API n'est pas trouvée et une erreur se produit.
Par exemple, si vous utilisez la version 1.23.0 du CLI Knative (kn
), qui utilise la version 1.2, avec la version 1.24.0 d'OpenShift Serverless, qui utilise les versions 1.3 des API Knative Serving et Knative Eventing, le CLI ne fonctionne pas parce qu'il continue à rechercher les versions dépassées de l'API 1.2.
Assurez-vous que vous utilisez la dernière version du CLI Knative (kn
) pour votre version OpenShift Serverless afin d'éviter les problèmes.
3.3.1. Installer le CLI Knative à l'aide de la console web de OpenShift Container Platform
L'utilisation de la console web d'OpenShift Container Platform fournit une interface utilisateur rationalisée et intuitive pour installer le CLI Knative (kn
). Après l'installation d'OpenShift Serverless Operator, vous verrez un lien pour télécharger la CLI Knative (kn
) pour Linux (amd64, s390x, ppc64le), macOS ou Windows à partir de la page Command Line Tools dans la console web d'OpenShift Container Platform.
Conditions préalables
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster OpenShift Container Platform.
ImportantSi libc n'est pas disponible, vous risquez d'obtenir l'erreur suivante lorsque vous exécutez des commandes CLI :
$ kn: No such file or directory
-
Si vous souhaitez utiliser les étapes de vérification pour cette procédure, vous devez installer le CLI OpenShift (
oc
).
Procédure
-
Téléchargez le CLI Knative (
kn
) à partir de la page Command Line Tools. Vous pouvez accéder à la page Command Line Tools en cliquant sur ledans le coin supérieur droit de la console web et en sélectionnant Command Line Tools dans la liste.
Décompressez l'archive :
tar -xf <fichier>
-
Déplacez le fichier binaire
kn
dans un répertoire de votre sitePATH
. Pour vérifier votre
PATH
, exécutez :$ echo $PATH
Vérification
Exécutez les commandes suivantes pour vérifier que les ressources et la route Knative CLI correctes ont été créées :
$ oc get ConsoleCLIDownload
Exemple de sortie
NAME DISPLAY NAME AGE kn kn - OpenShift Serverless Command Line Interface (CLI) 2022-09-20T08:41:18Z oc-cli-downloads oc - OpenShift Command Line Interface (CLI) 2022-09-20T08:00:20Z
$ oc get route -n openshift-serverless
Exemple de sortie
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD kn kn-openshift-serverless.apps.example.com knative-openshift-metrics-3 http-cli edge/Redirect None
3.3.2. Installer le CLI Knative pour Linux à l'aide d'un gestionnaire de paquets RPM
Pour Red Hat Enterprise Linux (RHEL), vous pouvez installer le CLI Knative (kn
) en tant que RPM à l'aide d'un gestionnaire de paquets, tel que yum
ou dnf
. Cela permet au système de gérer automatiquement la version du CLI Knative. Par exemple, l'utilisation d'une commande telle que dnf upgrade
met à jour tous les paquets, y compris kn
, si une nouvelle version est disponible.
Conditions préalables
- Vous disposez d'un abonnement OpenShift Container Platform actif sur votre compte Red Hat.
Procédure
S'inscrire auprès du gestionnaire d'abonnements Red Hat :
# subscription-manager register
Extraire les données d'abonnement les plus récentes :
# subscription-manager refresh
Attachez l'abonnement au système enregistré :
# subscription-manager attach --pool=<pool_id> 1
- 1
- ID du pool pour un abonnement actif à OpenShift Container Platform
Activer les dépôts requis par le CLI Knative (
kn
) :Linux (x86_64, amd64)
# subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-x86_64-rpms"
Linux sur IBM zSystems et IBM® LinuxONE (s390x)
# subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-s390x-rpms"
Linux sur IBM Power (ppc64le)
# subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-ppc64le-rpms"
Installez le CLI Knative (
kn
) en tant que RPM à l'aide d'un gestionnaire de paquets :Exemple de commande
yum
# yum install openshift-serverless-clients
3.3.3. Installation du CLI Knative pour Linux
Si vous utilisez une distribution Linux qui ne dispose pas de RPM ou d'un autre gestionnaire de paquets, vous pouvez installer le CLI Knative (kn
) sous la forme d'un fichier binaire. Pour ce faire, vous devez télécharger et décompresser une archive tar.gz
et ajouter le fichier binaire à un répertoire de votre PATH
.
Conditions préalables
Si vous n'utilisez pas RHEL ou Fedora, assurez-vous que libc est installé dans un répertoire de votre chemin de bibliothèque.
ImportantSi libc n'est pas disponible, vous risquez d'obtenir l'erreur suivante lorsque vous exécutez des commandes CLI :
$ kn: No such file or directory
Procédure
Téléchargez l'archive Knative (
kn
) CLItar.gz
:Vous pouvez également télécharger n'importe quelle version de
kn
en naviguant vers le répertoire correspondant à cette version dans le miroir de téléchargement du client Serverless.Décompressez l'archive :
tar -xf <filename>
-
Déplacez le fichier binaire
kn
dans un répertoire de votre sitePATH
. Pour vérifier votre
PATH
, exécutez :$ echo $PATH
3.3.4. Installation de la CLI Knative pour macOS
Si vous utilisez macOS, vous pouvez installer le CLI Knative (kn
) sous forme de fichier binaire. Pour ce faire, vous devez télécharger et décompresser une archive tar.gz
et ajouter le fichier binaire à un répertoire de votre PATH
.
Procédure
Téléchargez l'archive du CLI Knative (
kn
)tar.gz
.Vous pouvez également télécharger n'importe quelle version de
kn
en naviguant vers le répertoire correspondant à cette version dans le miroir de téléchargement du client Serverless.- Décompressez et extrayez l'archive.
-
Déplacez le fichier binaire
kn
dans un répertoire de votre sitePATH
. Pour vérifier votre
PATH
, ouvrez une fenêtre de terminal et exécutez :$ echo $PATH
3.3.5. Installation du CLI Knative pour Windows
Si vous utilisez Windows, vous pouvez installer le CLI Knative (kn
) sous forme de fichier binaire. Pour ce faire, vous devez télécharger et décompresser une archive ZIP et ajouter le fichier binaire à un répertoire de votre site PATH
.
Procédure
Télécharger l'archive ZIP du CLI Knative (
kn
).Vous pouvez également télécharger n'importe quelle version de
kn
en naviguant vers le répertoire correspondant à cette version dans le miroir de téléchargement du client Serverless.- Extraire l'archive à l'aide d'un programme ZIP.
-
Déplacez le fichier binaire
kn
dans un répertoire de votre sitePATH
. Pour vérifier votre
PATH
, ouvrez l'invite de commande et exécutez la commande suivante :C:\N> path
3.4. Installation de Knative Serving
L'installation de Knative Serving vous permet de créer des services et des fonctions Knative sur votre cluster. Elle vous permet également d'utiliser des fonctionnalités supplémentaires telles que l'autoscaling et les options de mise en réseau pour vos applications.
Après avoir installé OpenShift Serverless Operator, vous pouvez installer Knative Serving en utilisant les paramètres par défaut ou configurer des paramètres plus avancés dans la ressource personnalisée (CR) KnativeServing
. Pour plus d'informations sur les options de configuration de la CR KnativeServing
, voir Configuration globale.
Si vous souhaitez utiliser Red Hat OpenShift distributed tracing avec OpenShift Serverless, vous devez installer et configurer Red Hat OpenShift distributed tracing avant d'installer Knative Serving.
3.4.1. Installer Knative Serving en utilisant la console web
Après avoir installé l'OpenShift Serverless Operator, installez Knative Serving en utilisant la console web OpenShift Container Platform. Vous pouvez installer Knative Serving en utilisant les paramètres par défaut ou configurer des paramètres plus avancés dans la ressource personnalisée (CR) KnativeServing
.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
- Vous avez installé OpenShift Serverless Operator.
Procédure
- Dans la perspective Administrator de la console web OpenShift Container Platform, naviguez vers Operators → Installed Operators.
- Vérifiez que le menu déroulant Project en haut de la page est bien réglé sur Project: knative-serving.
- Cliquez sur Knative Serving dans la liste de Provided APIs pour l'OpenShift Serverless Operator afin d'accéder à l'onglet Knative Serving.
- Cliquez sur Create Knative Serving.
Dans la page Create Knative Serving, vous pouvez installer Knative Serving en utilisant les paramètres par défaut en cliquant sur Create.
Vous pouvez également modifier les paramètres de l'installation de Knative Serving en éditant l'objet
KnativeServing
à l'aide du formulaire fourni ou en éditant le YAML.-
L'utilisation du formulaire est recommandée pour les configurations plus simples qui ne nécessitent pas un contrôle total de la création des objets
KnativeServing
. Il est recommandé d'éditer le YAML pour les configurations plus complexes qui nécessitent un contrôle total de la création des objets
KnativeServing
. Vous pouvez accéder au YAML en cliquant sur le lien edit YAML en haut à droite de la page Create Knative Serving.Une fois que vous avez rempli le formulaire ou que vous avez fini de modifier le YAML, cliquez sur Create.
NotePour plus d'informations sur les options de configuration de la définition des ressources personnalisées KnativeServing, voir la documentation sur Advanced installation configuration options.
-
L'utilisation du formulaire est recommandée pour les configurations plus simples qui ne nécessitent pas un contrôle total de la création des objets
-
Après avoir installé Knative Serving, l'objet
KnativeServing
est créé et vous êtes automatiquement dirigé vers l'onglet Knative Serving. Vous verrez la ressource personnaliséeknative-serving
dans la liste des ressources.
Vérification
-
Cliquez sur
knative-serving
custom resource dans l'onglet Knative Serving. Vous serez automatiquement dirigé vers la page Knative Serving Overview.
- Faites défiler la page vers le bas pour consulter la liste de Conditions.
La liste des conditions dont l'état est True s'affiche, comme le montre l'image d'exemple.
NoteLa création des ressources Knative Serving peut prendre quelques secondes. Vous pouvez vérifier leur statut dans l'onglet Resources.
- Si les conditions ont un statut de Unknown ou False, attendez quelques instants et vérifiez à nouveau après avoir confirmé que les ressources ont été créées.
3.4.2. Installer Knative Serving en utilisant YAML
Après avoir installé OpenShift Serverless Operator, vous pouvez installer Knative Serving en utilisant les paramètres par défaut, ou configurer des paramètres plus avancés dans la ressource personnalisée (CR) KnativeServing
. Vous pouvez utiliser la procédure suivante pour installer Knative Serving en utilisant des fichiers YAML et le CLI oc
.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Vous avez installé OpenShift Serverless Operator.
-
Installez le CLI OpenShift (
oc
).
Procédure
Créez un fichier nommé
serving.yaml
et copiez-y l'exemple YAML suivant :apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving
Appliquer le fichier
serving.yaml
:$ oc apply -f serving.yaml
Vérification
Pour vérifier que l'installation est terminée, entrez la commande suivante :
$ oc get knativeserving.operator.knative.dev/knative-serving -n knative-serving --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'
Exemple de sortie
DependenciesInstalled=True DeploymentsAvailable=True InstallSucceeded=True Ready=True
NoteLa création des ressources Knative Serving peut prendre quelques secondes.
Si les conditions ont un statut de
Unknown
ouFalse
, attendez quelques instants et vérifiez à nouveau après avoir confirmé que les ressources ont été créées.Vérifier que les ressources Knative Serving ont été créées :
$ oc get pods -n knative-serving
Exemple de sortie
NAME READY STATUS RESTARTS AGE activator-67ddf8c9d7-p7rm5 2/2 Running 0 4m activator-67ddf8c9d7-q84fz 2/2 Running 0 4m autoscaler-5d87bc6dbf-6nqc6 2/2 Running 0 3m59s autoscaler-5d87bc6dbf-h64rl 2/2 Running 0 3m59s autoscaler-hpa-77f85f5cc4-lrts7 2/2 Running 0 3m57s autoscaler-hpa-77f85f5cc4-zx7hl 2/2 Running 0 3m56s controller-5cfc7cb8db-nlccl 2/2 Running 0 3m50s controller-5cfc7cb8db-rmv7r 2/2 Running 0 3m18s domain-mapping-86d84bb6b4-r746m 2/2 Running 0 3m58s domain-mapping-86d84bb6b4-v7nh8 2/2 Running 0 3m58s domainmapping-webhook-769d679d45-bkcnj 2/2 Running 0 3m58s domainmapping-webhook-769d679d45-fff68 2/2 Running 0 3m58s storage-version-migration-serving-serving-0.26.0--1-6qlkb 0/1 Completed 0 3m56s webhook-5fb774f8d8-6bqrt 2/2 Running 0 3m57s webhook-5fb774f8d8-b8lt5 2/2 Running 0 3m57s
Vérifiez que les composants réseau nécessaires ont été installés dans l'espace de noms
knative-serving-ingress
créé automatiquement :$ oc get pods -n knative-serving-ingress
Exemple de sortie
NAME READY STATUS RESTARTS AGE net-kourier-controller-7d4b6c5d95-62mkf 1/1 Running 0 76s net-kourier-controller-7d4b6c5d95-qmgm2 1/1 Running 0 76s 3scale-kourier-gateway-6688b49568-987qz 1/1 Running 0 75s 3scale-kourier-gateway-6688b49568-b5tnp 1/1 Running 0 75s
3.4.3. Prochaines étapes
- Si vous souhaitez utiliser l'architecture événementielle de Knative, vous pouvez installer Knative Eventing.
3.5. Installation de Knative Eventing
Pour utiliser une architecture pilotée par les événements sur votre cluster, installez Knative Eventing. Vous pouvez créer des composants Knative tels que des sources d'événements, des courtiers et des canaux, puis les utiliser pour envoyer des événements à des applications ou à des systèmes externes.
Après avoir installé OpenShift Serverless Operator, vous pouvez installer Knative Eventing en utilisant les paramètres par défaut ou configurer des paramètres plus avancés dans la ressource personnalisée (CR) KnativeEventing
. Pour plus d'informations sur les options de configuration de la CR KnativeEventing
, voir Configuration globale.
Si vous souhaitez utiliser Red Hat OpenShift distributed tracing avec OpenShift Serverless, vous devez installer et configurer Red Hat OpenShift distributed tracing avant d'installer Knative Eventing.
3.5.1. Installation de Knative Eventing à l'aide de la console web
Après avoir installé l'OpenShift Serverless Operator, installez Knative Eventing en utilisant la console web OpenShift Container Platform. Vous pouvez installer Knative Eventing en utilisant les paramètres par défaut ou configurer des paramètres plus avancés dans la ressource personnalisée (CR) KnativeEventing
.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
- Vous avez installé OpenShift Serverless Operator.
Procédure
- Dans la perspective Administrator de la console web OpenShift Container Platform, naviguez vers Operators → Installed Operators.
- Vérifiez que le menu déroulant Project en haut de la page est bien réglé sur Project: knative-eventing.
- Cliquez sur Knative Eventing dans la liste de Provided APIs pour l'OpenShift Serverless Operator afin d'accéder à l'onglet Knative Eventing.
- Cliquez sur Create Knative Eventing.
Dans la page Create Knative Eventing, vous pouvez choisir de configurer l'objet
KnativeEventing
en utilisant le formulaire par défaut fourni ou en modifiant le YAML.L'utilisation du formulaire est recommandée pour les configurations plus simples qui ne nécessitent pas un contrôle total de la création des objets
KnativeEventing
.Facultatif. Si vous configurez l'objet
KnativeEventing
à l'aide du formulaire, apportez les modifications que vous souhaitez mettre en œuvre pour votre déploiement Knative Eventing.
Cliquez sur Create.
Il est recommandé d'éditer le YAML pour les configurations plus complexes qui nécessitent un contrôle total de la création des objets
KnativeEventing
. Vous pouvez accéder au YAML en cliquant sur le lien edit YAML en haut à droite de la page Create Knative Eventing.Facultatif. Si vous configurez l'objet
KnativeEventing
en modifiant le YAML, apportez toutes les modifications au YAML que vous souhaitez mettre en œuvre pour votre déploiement Knative Eventing.
- Cliquez sur Create.
-
Après avoir installé Knative Eventing, l'objet
KnativeEventing
est créé et vous êtes automatiquement dirigé vers l'onglet Knative Eventing. Vous verrez la ressource personnaliséeknative-eventing
dans la liste des ressources.
Vérification
-
Cliquez sur la ressource personnalisée
knative-eventing
dans l'onglet Knative Eventing. Vous êtes automatiquement dirigé vers la page Knative Eventing Overview.
- Faites défiler la page vers le bas pour consulter la liste de Conditions.
La liste des conditions dont l'état est True s'affiche, comme le montre l'image d'exemple.
NoteLa création des ressources Knative Eventing peut prendre quelques secondes. Vous pouvez vérifier leur statut dans l'onglet Resources.
- Si les conditions ont un statut de Unknown ou False, attendez quelques instants et vérifiez à nouveau après avoir confirmé que les ressources ont été créées.
3.5.2. Installer Knative Eventing en utilisant YAML
Après avoir installé OpenShift Serverless Operator, vous pouvez installer Knative Eventing en utilisant les paramètres par défaut, ou configurer des paramètres plus avancés dans la ressource personnalisée (CR) KnativeEventing
. Vous pouvez utiliser la procédure suivante pour installer Knative Eventing en utilisant des fichiers YAML et le CLI oc
.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Vous avez installé OpenShift Serverless Operator.
-
Installez le CLI OpenShift (
oc
).
Procédure
-
Créez un fichier nommé
eventing.yaml
. Copiez l'exemple suivant de YAML dans
eventing.yaml
:apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing
- Facultatif. Apportez toutes les modifications au YAML que vous souhaitez mettre en œuvre pour votre déploiement Knative Eventing.
Appliquez le fichier
eventing.yaml
en entrant :$ oc apply -f eventing.yaml
Vérification
Vérifiez que l'installation est terminée en entrant la commande suivante et en observant la sortie :
$ oc get knativeeventing.operator.knative.dev/knative-eventing \ -n knative-eventing \ --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'
Exemple de sortie
InstallSucceeded=True Ready=True
NoteLa création des ressources Knative Eventing peut prendre quelques secondes.
-
Si les conditions ont un statut de
Unknown
ouFalse
, attendez quelques instants et vérifiez à nouveau après avoir confirmé que les ressources ont été créées. Vérifier que les ressources Knative Eventing ont été créées en entrant :
$ oc get pods -n knative-eventing
Exemple de sortie
NAME READY STATUS RESTARTS AGE broker-controller-58765d9d49-g9zp6 1/1 Running 0 7m21s eventing-controller-65fdd66b54-jw7bh 1/1 Running 0 7m31s eventing-webhook-57fd74b5bd-kvhlz 1/1 Running 0 7m31s imc-controller-5b75d458fc-ptvm2 1/1 Running 0 7m19s imc-dispatcher-64f6d5fccb-kkc4c 1/1 Running 0 7m18s
3.5.3. Installation du courtier Knative pour Apache Kafka
L'implémentation du courtier Knative pour Apache Kafka fournit des options d'intégration qui vous permettent d'utiliser les versions prises en charge de la plateforme de streaming de messages Apache Kafka avec OpenShift Serverless. La fonctionnalité Knative broker for Apache Kafka est disponible dans une installation OpenShift Serverless si vous avez installé la ressource personnalisée KnativeKafka
.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator et Knative Eventing sur votre cluster.
- Vous avez accès à un cluster Red Hat AMQ Streams.
-
Installez le CLI OpenShift (
oc
) si vous souhaitez utiliser les étapes de vérification.
- Vous disposez des droits d'administrateur de cluster sur OpenShift Container Platform.
- Vous êtes connecté à la console web de OpenShift Container Platform.
Procédure
- Dans la perspective Administrator, naviguez vers Operators → Installed Operators.
- Vérifiez que le menu déroulant Project en haut de la page est bien réglé sur Project: knative-eventing.
- Dans la liste de Provided APIs pour l'OpenShift Serverless Operator, trouvez la boîte Knative Kafka et cliquez sur Create Instance.
Configurez l'objet KnativeKafka dans la page Create Knative Kafka.
ImportantPour utiliser le canal, la source, le courtier ou le puits Kafka sur votre cluster, vous devez basculer le commutateur enabled pour les options que vous souhaitez utiliser sur true. Ces commutateurs sont réglés sur false par défaut. En outre, pour utiliser le canal, le courtier ou le puits Kafka, vous devez spécifier les serveurs d'amorçage.
Exemple
KnativeKafka
ressource personnaliséeapiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: name: knative-kafka namespace: knative-eventing spec: channel: enabled: true 1 bootstrapServers: <bootstrap_servers> 2 source: enabled: true 3 broker: enabled: true 4 defaultConfig: bootstrapServers: <bootstrap_servers> 5 numPartitions: <num_partitions> 6 replicationFactor: <replication_factor> 7 sink: enabled: true 8
- 1
- Permet aux développeurs d'utiliser le type de canal
KafkaChannel
dans le cluster. - 2
- Une liste de serveurs d'amorçage de votre cluster AMQ Streams, séparés par des virgules.
- 3
- Permet aux développeurs d'utiliser le type de source d'événement
KafkaSource
dans le cluster. - 4
- Permet aux développeurs d'utiliser l'implémentation du courtier Knative pour Apache Kafka dans le cluster.
- 5
- Une liste de serveurs d'amorçage de votre cluster Red Hat AMQ Streams, séparée par des virgules.
- 6
- Définit le nombre de partitions des sujets Kafka, soutenus par les objets
Broker
. La valeur par défaut est10
. - 7
- Définit le facteur de réplication des sujets Kafka, soutenu par les objets
Broker
. La valeur par défaut est3
. - 8
- Permet aux développeurs d'utiliser un puits Kafka dans le cluster.
NoteLa valeur
replicationFactor
doit être inférieure ou égale au nombre de nœuds de votre cluster Red Hat AMQ Streams.- L'utilisation du formulaire est recommandée pour les configurations plus simples qui ne nécessitent pas un contrôle total de la création des objets KnativeKafka.
- Il est recommandé d'éditer le YAML pour les configurations plus complexes qui nécessitent un contrôle total de la création des objets KnativeKafka. Vous pouvez accéder au YAML en cliquant sur le lien Edit YAML en haut à droite de la page Create Knative Kafka.
- Cliquez sur Create après avoir effectué l'une des configurations optionnelles pour Kafka. Vous êtes automatiquement dirigé vers l'onglet Knative Kafka où se trouve knative-kafka dans la liste des ressources.
Vérification
- Cliquez sur la ressource knative-kafka dans l'onglet Knative Kafka. Vous êtes automatiquement dirigé vers la page Knative Kafka Overview.
Consulter la liste de Conditions pour la ressource et confirmer qu'ils ont un statut de True.
Si les conditions ont un statut de Unknown ou False, attendez quelques instants pour rafraîchir la page.
Vérifier que les ressources Knative broker for Apache Kafka ont été créées :
$ oc get pods -n knative-eventing
Exemple de sortie
NAME READY STATUS RESTARTS AGE kafka-broker-dispatcher-7769fbbcbb-xgffn 2/2 Running 0 44s kafka-broker-receiver-5fb56f7656-fhq8d 2/2 Running 0 44s kafka-channel-dispatcher-84fd6cb7f9-k2tjv 2/2 Running 0 44s kafka-channel-receiver-9b7f795d5-c76xr 2/2 Running 0 44s kafka-controller-6f95659bf6-trd6r 2/2 Running 0 44s kafka-source-dispatcher-6bf98bdfff-8bcsn 2/2 Running 0 44s kafka-webhook-eventing-68dc95d54b-825xs 2/2 Running 0 44s
3.5.4. Prochaines étapes
- Si vous souhaitez utiliser les services Knative, vous pouvez installer Knative Serving.
3.6. Configuration du courtier Knative pour Apache Kafka
L'implémentation du courtier Knative pour Apache Kafka fournit des options d'intégration vous permettant d'utiliser les versions prises en charge de la plateforme de streaming de messages Apache Kafka avec OpenShift Serverless. Kafka fournit des options pour la source d'événement, le canal, le courtier et les capacités de puits d'événement.
En plus des composants Knative Eventing qui sont fournis dans le cadre d'une installation de base d'OpenShift Serverless, les administrateurs de cluster peuvent installer la ressource personnalisée (CR) KnativeKafka
.
Knative broker for Apache Kafka n'est pas actuellement pris en charge pour IBM zSystems et IBM Power.
Le CR KnativeKafka
offre aux utilisateurs des options supplémentaires, telles que
- Source Kafka
- Canal Kafka
- Courtier Kafka
- Puits Kafka
3.7. Configuration des fonctions OpenShift Serverless
Pour améliorer le processus de déploiement du code de votre application, vous pouvez utiliser OpenShift Serverless pour déployer des fonctions sans état et pilotées par les événements en tant que service Knative sur OpenShift Container Platform. Si vous souhaitez développer des fonctions, vous devez effectuer les étapes de configuration.
3.7.1. Conditions préalables
Pour activer l'utilisation d'OpenShift Serverless Functions sur votre cluster, vous devez effectuer les étapes suivantes :
L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
NoteLes fonctions sont déployées en tant que service Knative. Si vous souhaitez utiliser une architecture pilotée par les événements avec vos fonctions, vous devez également installer Knative Eventing.
-
Vous avez installé le CLI
oc
. -
Vous avez installé le CLI Knative (
kn
). L'installation du CLI Knative permet d'utiliser les commandeskn func
pour créer et gérer des fonctions. - Vous avez installé Docker Container Engine ou Podman version 3.4.7 ou supérieure.
- Vous avez accès à un registre d'images disponible, tel que le OpenShift Container Registry.
- Si vous utilisez Quay.io comme registre d'images, vous devez vous assurer que le dépôt n'est pas privé, ou que vous avez suivi la documentation d'OpenShift Container Platform sur l'autorisation des pods à référencer des images à partir d'autres registres sécurisés.
- Si vous utilisez le OpenShift Container Registry, un administrateur de cluster doit exposer le registre.
3.7.2. Mise en place de Podman
Pour utiliser des fonctionnalités avancées de gestion de conteneurs, vous pourriez vouloir utiliser Podman avec OpenShift Serverless Functions. Pour ce faire, vous devez démarrer le service Podman et configurer le CLI Knative (kn
) pour vous y connecter.
Procédure
Démarrez le service Podman qui sert l'API Docker sur un socket UNIX à l'adresse
${XDG_RUNTIME_DIR}/podman/podman.sock
:$ systemctl start --user podman.socket
NoteSur la plupart des systèmes, cette prise est située à l'adresse
/run/user/$(id -u)/podman/podman.sock
.Établir la variable d'environnement qui est utilisée pour construire une fonction :
$ export DOCKER_HOST="unix://${XDG_RUNTIME_DIR}/podman/podman.sock"
Exécutez la commande build dans le répertoire de votre projet de fonction avec le drapeau
-v
pour voir la sortie verbose. Vous devriez voir une connexion à votre socket UNIX local :$ kn func build -v
3.7.3. Installation de Podman sur macOS
Pour utiliser des fonctionnalités avancées de gestion de conteneurs, vous pourriez vouloir utiliser Podman avec OpenShift Serverless Functions. Pour ce faire sur macOS, vous devez démarrer la machine Podman et configurer le CLI Knative (kn
) pour vous y connecter.
Procédure
Créer la machine Podman :
$ podman machine init --memory=8192 --cpus=2 --disk-size=20
Démarrez la machine Podman, qui sert l'API Docker sur un socket UNIX :
$ podman machine start Starting machine "podman-machine-default" Waiting for VM ... Mounting volume... /Users/myuser:/Users/user [...truncated output...] You can still connect Docker API clients by setting DOCKER_HOST using the following command in your terminal session: export DOCKER_HOST='unix:///Users/myuser/.local/share/containers/podman/machine/podman-machine-default/podman.sock' Machine "podman-machine-default" started successfully
NoteSur la plupart des systèmes macOS, cette prise se trouve à l'adresse
/Users/myuser/.local/share/containers/podman/machine/podman-machine-default/podman.sock
.Établir la variable d'environnement qui est utilisée pour construire une fonction :
$ export DOCKER_HOST='unix:///Users/myuser/.local/share/containers/podman/machine/podman-machine-default/podman.sock'
Exécutez la commande build dans le répertoire de votre projet de fonction avec le drapeau
-v
pour voir la sortie verbose. Vous devriez voir une connexion à votre socket UNIX local :$ kn func build -v
3.7.4. Prochaines étapes
- Pour plus d'informations sur Docker Container Engine ou Podman, voir Options d'outils de construction de conteneurs.
- Voir la section Démarrer avec les fonctions.
3.8. Mises à niveau sans serveur
OpenShift Serverless doit être mis à niveau sans sauter de version. Cette section montre comment résoudre les problèmes de mise à niveau.
3.8.1. Résoudre un échec de mise à niveau de l'opérateur OpenShift Serverless
Vous pouvez rencontrer une erreur lors de la mise à niveau d'OpenShift Serverless Operator, par exemple, lors de désinstallations et réinstallations manuelles. Si vous rencontrez une erreur, vous devez réinstaller manuellement OpenShift Serverless Operator.
Procédure
Identifier la version d'OpenShift Serverless Operator qui a été installée à l'origine en recherchant dans les notes de version d'OpenShift Serverless.
Par exemple, le message d'erreur lors d'une tentative de mise à niveau peut contenir la chaîne suivante :
The installed KnativeServing version is v1.5.0.
Dans cet exemple, la version de KnativeServing
MAJOR.MINOR
est1.5
, qui est couverte par les notes de version d'OpenShift Serverless 1.26 : OpenShift Serverless now uses Knative Serving 1.5.- Désinstaller OpenShift Serverless Operator et tous ses plans d'installation.
Installez manuellement la version d'OpenShift Serverless Operator que vous avez découverte à la première étape. Pour l'installation, créez d'abord un fichier
serverless-subscription.yaml
comme indiqué dans l'exemple suivant :apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: serverless-operator namespace: openshift-serverless spec: channel: stable name: serverless-operator source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Manual startingCSV: serverless-operator.v1.26.0
Ensuite, installez l'abonnement en exécutant la commande suivante :
$ oc apply -f serverless-subscription.yaml
- Mettre à niveau en approuvant manuellement les plans d'installation de la mise à niveau au fur et à mesure qu'ils apparaissent.
Chapitre 4. Servir
4.1. Démarrer avec Knative Serving
4.1.1. Applications sans serveur
Les applications sans serveur sont créées et déployées en tant que services Kubernetes, définies par une route et une configuration, et contenues dans un fichier YAML. Pour déployer une application sans serveur à l'aide d'OpenShift Serverless, vous devez créer un objet Knative Service
.
Exemple de fichier YAML de l'objet Knative Service
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello 1 namespace: default 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift 3 env: - name: RESPONSE 4 value: "Hello Serverless!"
Vous pouvez créer une application sans serveur en utilisant l'une des méthodes suivantes :
Créez un service Knative à partir de la console web d'OpenShift Container Platform.
Pour plus d'informations, voir Création d'applications à l'aide de la perspective du développeur.
-
Créer un service Knative en utilisant le CLI Knative (
kn
). -
Créer et appliquer un objet Knative
Service
sous la forme d'un fichier YAML, en utilisant le CLIoc
.
4.1.1.1. Créer des applications sans serveur en utilisant le CLI Knative
L'utilisation de la CLI Knative (kn
) pour créer des applications sans serveur offre une interface utilisateur plus rationalisée et plus intuitive que la modification directe des fichiers YAML. Vous pouvez utiliser la commande kn service create
pour créer une application sans serveur de base.
Conditions préalables
- OpenShift Serverless Operator et Knative Serving sont installés sur votre 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.
Procédure
Créer un service Knative :
$ kn service create <service-name> --image <image> --tag <tag-value>
Où ?
-
--image
est l'URI de l'image pour l'application. --tag
est un indicateur facultatif qui peut être utilisé pour ajouter une étiquette à la révision initiale créée avec le service.Example command
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Exemple de sortie
Creating service 'event-display' in namespace 'default': 0.271s The Route is still working to reflect the latest desired specification. 0.580s Configuration "event-display" is waiting for a Revision to become ready. 3.857s ... 3.861s Ingress has not yet been reconciled. 4.270s Ready to serve. Service 'event-display' created with latest revision 'event-display-bxshg-1' and URL: http://event-display-default.apps-crc.testing
-
4.1.1.2. Créer des applications sans serveur à 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 des applications de manière déclarative et reproductible. Pour créer une application sans serveur à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet Knative Service
, puis l'appliquer à l'aide de oc apply
.
Une fois le service créé et l'application déployée, Knative crée une révision immuable pour cette version de l'application. Knative effectue également la programmation du réseau pour créer une route, une entrée, un service et un équilibreur de charge pour votre application et fait automatiquement évoluer vos pods vers le haut ou vers le bas en fonction du trafic.
Conditions préalables
- OpenShift Serverless Operator et Knative Serving 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.
-
Installez le CLI OpenShift (
oc
).
Procédure
Créez un fichier YAML contenant l'exemple de code suivant :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-delivery namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest env: - name: RESPONSE value: "Hello Serverless!"
Naviguez jusqu'au répertoire où se trouve le fichier YAML et déployez l'application en appliquant le fichier YAML :
$ oc apply -f <filename>
Si vous ne souhaitez pas passer à la perspective Developer dans la console web d'OpenShift Container Platform ou utiliser le CLI Knative (kn
) ou les fichiers YAML, vous pouvez créer des composants Knative en utilisant la perspective Administator de la console web d'OpenShift Container Platform.
4.1.1.3. Créer des applications sans serveur en utilisant la perspective de l'administrateur
Les applications sans serveur sont créées et déployées en tant que services Kubernetes, définies par une route et une configuration, et contenues dans un fichier YAML. Pour déployer une application sans serveur à l'aide d'OpenShift Serverless, vous devez créer un objet Knative Service
.
Exemple de fichier YAML de l'objet Knative Service
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello 1 namespace: default 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift 3 env: - name: RESPONSE 4 value: "Hello Serverless!"
Une fois le service créé et l'application déployée, Knative crée une révision immuable pour cette version de l'application. Knative effectue également la programmation du réseau pour créer une route, une entrée, un service et un équilibreur de charge pour votre application et fait automatiquement évoluer vos pods vers le haut ou vers le bas en fonction du trafic.
Conditions préalables
Pour créer des applications sans serveur à l'aide de la perspective Administrator, assurez-vous d'avoir effectué les étapes suivantes.
- L'opérateur OpenShift Serverless et Knative Serving sont installés.
- Vous vous êtes connecté à la console web et vous vous trouvez dans la perspective Administrator.
Procédure
- Naviguez jusqu'à la page Serverless → Serving.
- Dans la liste Create, sélectionnez Service.
- Saisir manuellement des définitions YAML ou JSON, ou glisser-déposer un fichier dans l'éditeur.
- Cliquez sur Create.
4.1.1.4. Création d'un service en mode hors ligne
Vous pouvez exécuter les commandes kn service
en mode déconnecté, de sorte qu'aucune modification n'est apportée au cluster et que le fichier de descripteur de service est créé sur votre machine locale. Une fois le fichier descripteur créé, vous pouvez le modifier avant de propager les changements au cluster.
Le mode hors ligne de la CLI Knative est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, permettant aux clients de tester les fonctionnalités et de fournir un retour d'information au cours du processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
Conditions préalables
- OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster.
-
Vous avez installé le CLI Knative (
kn
).
Procédure
En mode déconnecté, créez un fichier de descripteurs de service Knative local :
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test
Exemple de sortie
Service 'event-display' created in namespace 'test'.
L'option
--target ./
active le mode hors ligne et spécifie./
comme répertoire de stockage de la nouvelle arborescence.Si vous n'indiquez pas de répertoire existant, mais que vous utilisez un nom de fichier, tel que
--target my-service.yaml
, aucune arborescence n'est créée. Seul le fichier de descripteurs de servicemy-service.yaml
est créé dans le répertoire actuel.Le nom de fichier peut avoir l'extension
.yaml
,.yml
, ou.json
. Le choix de.json
crée le fichier du descripteur de service au format JSON.L'option
--namespace test
place le nouveau service dans l'espace de nomstest
.Si vous n'utilisez pas
--namespace
, et que vous êtes connecté à un cluster OpenShift Container Platform, le fichier de descripteurs est créé dans l'espace de noms actuel. Sinon, le fichier de descripteurs est créé dans l'espace de nomsdefault
.
Examinez la structure de répertoire créée :
$ tree ./
Exemple de sortie
./ └── test └── ksvc └── event-display.yaml 2 directories, 1 file
-
Le répertoire actuel
./
spécifié avec--target
contient le nouveau répertoiretest/
qui porte le nom de l'espace de noms spécifié. -
Le répertoire
test/
contient le répertoireksvc
, nommé d'après le type de ressource. -
Le répertoire
ksvc
contient le fichier descripteurevent-display.yaml
, nommé d'après le nom du service spécifié.
-
Le répertoire actuel
Examinez le fichier de descripteurs de service généré :
$ cat test/ksvc/event-display.yaml
Exemple de sortie
apiVersion: serving.knative.dev/v1 kind: Service metadata: creationTimestamp: null name: event-display namespace: test spec: template: metadata: annotations: client.knative.dev/user-image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest creationTimestamp: null spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest name: "" resources: {} status: {}
Liste des informations sur le nouveau service :
$ kn service describe event-display --target ./ --namespace test
Exemple de sortie
Name: event-display Namespace: test Age: URL: Revisions: Conditions: OK TYPE AGE REASON
L'option
--target ./
spécifie le répertoire racine de la structure de répertoires contenant les sous-répertoires de l'espace de noms.Vous pouvez également spécifier directement un nom de fichier YAML ou JSON à l'aide de l'option
--target
. Les extensions de fichier acceptées sont.yaml
,.yml
, et.json
.L'option
--namespace
spécifie l'espace de noms, qui communique àkn
le sous-répertoire contenant le fichier de descripteur de service nécessaire.Si vous n'utilisez pas
--namespace
et que vous êtes connecté à un cluster OpenShift Container Platform,kn
recherche le service dans le sous-répertoire portant le nom de l'espace de noms actuel. Sinon,kn
effectue la recherche dans le sous-répertoiredefault/
.
Utilisez le fichier descripteur de service pour créer le service sur le cluster :
$ kn service create -f test/ksvc/event-display.yaml
Exemple de sortie
Creating service 'event-display' in namespace 'test': 0.058s The Route is still working to reflect the latest desired specification. 0.098s ... 0.168s Configuration "event-display" is waiting for a Revision to become ready. 23.377s ... 23.419s Ingress has not yet been reconciled. 23.534s Waiting for load balancer to be ready 23.723s Ready to serve. Service 'event-display' created to latest revision 'event-display-00001' is available at URL: http://event-display-test.apps.example.com
4.1.1.5. Ressources supplémentaires
4.1.2. Vérifier le déploiement de votre application sans serveur
Pour vérifier que votre application serverless a été déployée avec succès, vous devez obtenir l'URL de l'application créée par Knative, puis envoyer une requête à cette URL et observer la sortie. OpenShift Serverless prend en charge l'utilisation d'URL HTTP et HTTPS, mais la sortie de oc get ksvc
imprime toujours les URL en utilisant le format http://
.
4.1.2.1. Vérifier le déploiement de votre application sans serveur
Pour vérifier que votre application serverless a été déployée avec succès, vous devez obtenir l'URL de l'application créée par Knative, puis envoyer une requête à cette URL et observer la sortie. OpenShift Serverless prend en charge l'utilisation d'URL HTTP et HTTPS, mais la sortie de oc get ksvc
imprime toujours les URL en utilisant le format http://
.
Conditions préalables
- OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster.
-
Vous avez installé le CLI
oc
. - Vous avez créé un service Knative.
Conditions préalables
-
Installez le CLI OpenShift (
oc
).
Procédure
Recherchez l'URL de l'application :
oc get ksvc -YRFFGUNA nom_du_service>
Exemple de sortie
NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True
Envoyez une requête à votre cluster et observez le résultat.
Exemple de demande HTTP
$ curl http://event-delivery-default.example.com
Exemple de demande HTTPS
$ curl https://event-delivery-default.example.com
Exemple de sortie
Hello Serverless!
Facultatif. Si vous recevez une erreur concernant un certificat auto-signé dans la chaîne de certificats, vous pouvez ajouter le drapeau
--insecure
à la commande curl pour ignorer l'erreur :$ curl https://event-delivery-default.example.com --insecure
Exemple de sortie
Hello Serverless!
ImportantLes certificats auto-signés ne doivent pas être utilisés dans un déploiement de production. Cette méthode ne doit être utilisée qu'à des fins de test.
Facultatif. Si votre cluster OpenShift Container Platform est configuré avec un certificat signé par une autorité de certification (CA) mais pas encore configuré globalement pour votre système, vous pouvez le spécifier avec la commande
curl
. Le chemin d'accès au certificat peut être transmis à la commande curl à l'aide de l'indicateur--cacert
:$ curl https://event-delivery-default.example.com --cacert <file>
Exemple de sortie
Hello Serverless!
4.2. Mise à l'échelle automatique
4.2.1. Mise à l'échelle automatique
Knative Serving fournit une mise à l'échelle automatique, ou autoscaling, pour les applications afin de répondre à la demande entrante. Par exemple, si une application ne reçoit aucun trafic et que l'option scale-to-zero est activée, Knative Serving réduit l'application à zéro réplicas. Si l'option scale-to-zero est désactivée, l'application est réduite au nombre minimum de répliques configuré pour les applications sur le cluster. Les répliques peuvent également être mises à l'échelle pour répondre à la demande si le trafic de l'application augmente.
Les paramètres de mise à l'échelle automatique des services Knative peuvent être des paramètres globaux configurés par les administrateurs du cluster, ou des paramètres par révision configurés pour des services individuels.
Vous pouvez modifier les paramètres par révision de vos services en utilisant la console web d'OpenShift Container Platform, en modifiant le fichier YAML de votre service, ou en utilisant le CLI Knative (kn
).
Toutes les limites ou tous les objectifs que vous définissez pour un service sont mesurés par rapport à une instance unique de votre application. Par exemple, la définition de l'annotation target
sur 50
configure l'autoscaler pour qu'il mette l'application à l'échelle de manière à ce que chaque révision traite 50 demandes à la fois.
4.2.2. Limites d'échelle
Les limites d'échelle déterminent les nombres minimum et maximum de répliques pouvant servir une application à un moment donné. Vous pouvez définir des limites d'échelle pour une application afin d'éviter les démarrages à froid ou de contrôler les coûts informatiques.
4.2.2.1. Limites minimales de l'échelle
Le nombre minimum de répliques pouvant servir une application est déterminé par l'annotation min-scale
. Si la mise à zéro n'est pas activée, la valeur de min-scale
est par défaut 1
.
La valeur min-scale
est remplacée par défaut par des répliques 0
si les conditions suivantes sont remplies :
-
L'annotation
min-scale
n'est pas définie - La mise à l'échelle à zéro est activée
-
La classe
KPA
est utilisée
Exemple de spécification de service avec l'annotation min-scale
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "0" ...
4.2.2.1.1. Définir l'annotation min-scale en utilisant le CLI Knative
L'utilisation de l'interface de programmation Knative (kn
) pour définir l'annotation min-scale
offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML. Vous pouvez utiliser la commande kn service
avec l'indicateur --scale-min
pour créer ou modifier la valeur min-scale
pour un service.
Conditions préalables
- Knative Serving est installé sur le cluster.
-
Vous avez installé le CLI Knative (
kn
).
Procédure
Définissez le nombre minimum de répliques pour le service en utilisant l'option
--scale-min
:$ kn service create <service_name> --image <image_uri> --scale-min <integer>
Example command
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2
4.2.2.2. Limites maximales de l'échelle
Le nombre maximum de répliques pouvant servir une application est déterminé par l'annotation max-scale
. Si l'annotation max-scale
n'est pas définie, il n'y a pas de limite supérieure pour le nombre de répliques créées.
Exemple de spécification de service avec l'annotation max-scale
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/max-scale: "10" ...
4.2.2.2.1. Définir l'annotation max-scale en utilisant le CLI Knative
L'utilisation de l'interface de programmation Knative (kn
) pour définir l'annotation max-scale
offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML. Vous pouvez utiliser la commande kn service
avec l'indicateur --scale-max
pour créer ou modifier la valeur max-scale
pour un service.
Conditions préalables
- Knative Serving est installé sur le cluster.
-
Vous avez installé le CLI Knative (
kn
).
Procédure
Définissez le nombre maximum de répliques pour le service en utilisant l'option
--scale-max
:$ kn service create <service_name> --image <image_uri> --scale-max <integer>
Example command
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10
4.2.3. Concurrence
La concurence détermine le nombre de requêtes simultanées qui peuvent être traitées par chaque réplique d'une application à un moment donné. La simultanéité peut être configurée comme soft limit ou hard limit:
- Une limite souple est une limite de demande ciblée, plutôt qu'une limite strictement appliquée. Par exemple, en cas d'augmentation soudaine du trafic, la limite souple peut être dépassée.
Une limite stricte est une limite supérieure de demandes strictement appliquée. Si la concurrence atteint la limite supérieure, les demandes excédentaires sont mises en mémoire tampon et doivent attendre qu'il y ait suffisamment de capacité libre pour les exécuter.
ImportantL'utilisation d'une configuration de limite stricte n'est recommandée que s'il existe un cas d'utilisation clair pour votre application. Le fait de spécifier une limite basse et stricte peut avoir un impact négatif sur le débit et la latence d'une application, et peut provoquer des démarrages à froid.
L'ajout d'une cible souple et d'une limite stricte signifie que l'autoscaler vise la cible souple du nombre de requêtes simultanées, mais impose une limite stricte de la valeur de la limite stricte pour le nombre maximum de requêtes.
Si la valeur de la limite dure est inférieure à la valeur de la limite souple, la valeur de la limite souple est réduite, car il n'est pas nécessaire de cibler plus de demandes que le nombre qui peut réellement être traité.
4.2.3.1. Configuration d'une cible de concurrence douce
Une limite souple est une limite de demande ciblée, plutôt qu'une limite strictement appliquée. Par exemple, s'il y a une explosion soudaine du trafic, la cible de la limite souple peut être dépassée. Vous pouvez spécifier un objectif de concurrence souple pour votre service Knative en définissant l'annotation autoscaling.knative.dev/target
dans la spécification, ou en utilisant la commande kn service
avec les drapeaux corrects.
Procédure
Facultatif : Définissez l'annotation
autoscaling.knative.dev/target
pour votre service Knative dans la spécification de la ressource personnaliséeService
:Exemple de cahier des charges
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/target: "200"
Facultatif : Utilisez la commande
kn service
pour spécifier l'indicateur--concurrency-target
:$ kn service create <service_name> --image <image_uri> --concurrency-target <integer>
Exemple de commande pour créer un service avec un objectif de concurrence de 50 requêtes
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-target 50
4.2.3.2. Configuration d'une limite de concurrence stricte
Une limite de concurrence stricte est une limite supérieure de demandes strictement appliquée. Si la concurrence atteint la limite dure, les demandes excédentaires sont mises en mémoire tampon et doivent attendre qu'il y ait suffisamment de capacité libre pour les exécuter. Vous pouvez spécifier une limite dure de concurrence pour votre service Knative en modifiant la spécification containerConcurrency
, ou en utilisant la commande kn service
avec les drapeaux corrects.
Procédure
Facultatif : Définissez la spécification
containerConcurrency
pour votre service Knative dans la spécification de la ressource personnaliséeService
:Exemple de cahier des charges
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: spec: containerConcurrency: 50
La valeur par défaut est
0
, ce qui signifie qu'il n'y a pas de limite au nombre de requêtes simultanées autorisées dans une réplique du service à la fois.Une valeur supérieure à
0
spécifie le nombre exact de requêtes autorisées à circuler dans une réplique du service à la fois. Dans cet exemple, la limite de simultanéité est fixée à 50 requêtes.Facultatif : Utilisez la commande
kn service
pour spécifier l'indicateur--concurrency-limit
:$ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>
Exemple de commande pour créer un service avec une limite de concurrence de 50 requêtes
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-limit 50
4.2.3.3. Utilisation de l'objectif de simultanéité
Cette valeur indique le pourcentage de la limite de concurrence qui est effectivement ciblé par l'autoscaler. Il s'agit également de spécifier la valeur hotness à laquelle un réplica s'exécute, ce qui permet à l'autoscaler d'augmenter sa capacité avant que la limite définie ne soit atteinte.
Par exemple, si la valeur containerConcurrency
est fixée à 10 et la valeur target-utilization-percentage
à 70 %, l'autoscaler crée une nouvelle réplique lorsque le nombre moyen de requêtes simultanées dans toutes les répliques existantes atteint 7. Les demandes numérotées de 7 à 10 sont toujours envoyées aux répliques existantes, mais des répliques supplémentaires sont démarrées en prévision d'un besoin lorsque la valeur containerConcurrency
est atteinte.
Exemple de service configuré à l'aide de l'annotation target-utilization-percentage
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/target-utilization-percentage: "70" ...
4.2.4. Échelle zéro
Knative Serving permet une mise à l'échelle automatique, ou autoscaling, des applications pour répondre à la demande entrante.
4.2.4.1. Permettre le passage à l'échelle zéro
Vous pouvez utiliser la spécification enable-scale-to-zero
pour activer ou désactiver globalement le passage à l'échelle zéro pour les applications sur le cluster.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator et Knative Serving sur votre cluster.
- Vous avez des droits d'administrateur de cluster.
- Vous utilisez le Knative Pod Autoscaler par défaut. La fonction de mise à zéro n'est pas disponible si vous utilisez le Kubernetes Horizontal Pod Autoscaler.
Procédure
Modifier la spécification
enable-scale-to-zero
dans la ressource personnalisée (CR)KnativeServing
:Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: autoscaler: enable-scale-to-zero: "false" 1
- 1
- La spécification
enable-scale-to-zero
peut être"true"
ou"false"
. Si elle vaut true, la fonction scale-to-zero est activée. S'il est défini sur false, les applications sont réduites à la valeur configurée minimum scale bound. La valeur par défaut est"true"
.
4.2.4.2. Configuration du délai de grâce scale-to-zero
Knative Serving fournit une mise à l'échelle automatique jusqu'à zéro pods pour les applications. Vous pouvez utiliser la spécification scale-to-zero-grace-period
pour définir une limite de temps supérieure pendant laquelle Knative attend que le mécanisme de mise à l'échelle vers zéro soit en place avant que la dernière réplique d'une application soit supprimée.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator et Knative Serving sur votre cluster.
- Vous avez des droits d'administrateur de cluster.
- Vous utilisez le Knative Pod Autoscaler par défaut. La fonctionnalité scale-to-zero n'est pas disponible si vous utilisez le Kubernetes Horizontal Pod Autoscaler.
Procédure
Modifier la spécification
scale-to-zero-grace-period
dans la ressource personnalisée (CR)KnativeServing
:Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: autoscaler: scale-to-zero-grace-period: "30s" 1
- 1
- Durée du délai de grâce en secondes. La valeur par défaut est de 30 secondes.
4.3. Configuration des applications sans serveur
4.3.1. Remplacer les configurations de déploiement du système Knative Serving
Vous pouvez remplacer les configurations par défaut pour certains déploiements spécifiques en modifiant la spécification deployments
dans les ressources personnalisées (CR) KnativeServing
.
Vous ne pouvez remplacer que les sondes définies par défaut dans le déploiement.
Tous les déploiements de Knative Serving définissent par défaut une sonde de préparation et une sonde de disponibilité, à ces exceptions près :
-
net-kourier-controller
et3scale-kourier-gateway
ne définissent qu'une sonde de préparation. -
net-istio-controller
etnet-istio-webhook
ne définissent pas de sondes.
4.3.1.1. Remplacer les configurations de déploiement du système
Actuellement, le remplacement des paramètres de configuration par défaut est possible pour les champs resources
, replicas
, labels
, annotations
et nodeSelector
, ainsi que pour les champs readiness
et liveness
pour les sondes.
Dans l'exemple suivant, une CR KnativeServing
remplace le déploiement webhook
de sorte que :
-
Le délai d'attente de la sonde
readiness
pournet-kourier-controller
est fixé à 10 secondes. - Le déploiement a spécifié des limites de ressources de CPU et de mémoire.
- Le déploiement comporte 3 répliques.
-
L'étiquette
example-label: label
est ajoutée. -
L'annotation
example-annotation: annotation
est ajoutée. -
Le champ
nodeSelector
est défini pour sélectionner les nœuds portant l'étiquettedisktype: hdd
.
Les paramètres d'étiquetage et d'annotation de KnativeServing
CR remplacent les étiquettes et les annotations du déploiement, tant pour le déploiement lui-même que pour les pods qui en résultent.
Exemple de CR KnativeServing
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: ks
namespace: knative-serving
spec:
high-availability:
replicas: 2
deployments:
- name: net-kourier-controller
readinessProbes: 1
- container: controller
timeoutSeconds: 10
- name: webhook
resources:
- container: webhook
requests:
cpu: 300m
memory: 60Mi
limits:
cpu: 1000m
memory: 1000Mi
replicas: 3
labels:
example-label: label
annotations:
example-annotation: annotation
nodeSelector:
disktype: hdd
- 1
- Vous pouvez utiliser les surcharges de sonde
readiness
etliveness
pour remplacer tous les champs d'une sonde dans un conteneur d'un déploiement comme spécifié dans l'API Kubernetes, à l'exception des champs liés au gestionnaire de la sonde :exec
,grpc
,httpGet
, ettcpSocket
.
Ressources supplémentaires
4.3.2. Prise en charge de plusieurs conteneurs pour le service
Vous pouvez déployer un pod multi-conteneurs en utilisant un seul service Knative. Cette méthode est utile pour séparer les responsabilités de l'application en parties plus petites et spécialisées.
La prise en charge de plusieurs conteneurs pour Serving est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes d'un point de vue fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
4.3.2.1. Configuration d'un service multi-conteneurs
La prise en charge de plusieurs conteneurs est activée par défaut. Vous pouvez créer un pod multi-conteneurs en spécifiant plusieurs conteneurs dans le service.
Procédure
Modifiez votre service pour inclure des conteneurs supplémentaires. Un seul conteneur peut traiter les requêtes, il faut donc spécifier
ports
pour un seul conteneur. Voici un exemple de configuration avec deux conteneurs :Configuration de plusieurs conteneurs
apiVersion: serving.knative.dev/v1 kind: Service ... spec: template: spec: containers: - name: first-container 1 image: gcr.io/knative-samples/helloworld-go ports: - containerPort: 8080 2 - name: second-container 3 image: gcr.io/knative-samples/helloworld-java
4.3.3. Volumes EmptyDir
emptyDir
les volumes emptyDir
sont des volumes vides créés lors de la création d'un pod et utilisés pour fournir un espace disque de travail temporaire. Les volumes sont supprimés lorsque le pod pour lequel ils ont été créés est supprimé.
4.3.3.1. Configuration de l'extension EmptyDir
L'extension kubernetes.podspec-volumes-emptydir
contrôle si les volumes emptyDir
peuvent être utilisés avec Knative Serving. Pour permettre l'utilisation des volumes emptyDir
, vous devez modifier la ressource personnalisée (CR) KnativeServing
pour inclure le YAML suivant :
Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: features: kubernetes.podspec-volumes-emptydir: enabled ...
4.3.4. Réclamations de volumes persistants pour la mise en service
Certaines applications sans serveur ont besoin d'un stockage permanent des données. Pour y parvenir, vous pouvez configurer des réclamations de volumes persistants (PVC) pour vos services Knative.
4.3.4.1. Activation de la prise en charge du PVC
Procédure
Pour permettre à Knative Serving d'utiliser les PVC et d'y écrire, modifiez la ressource personnalisée (CR)
KnativeServing
pour inclure le YAML suivant :Activation des PVC avec accès en écriture
... spec: config: features: "kubernetes.podspec-persistent-volume-claim": enabled "kubernetes.podspec-persistent-volume-write": enabled ...
-
L'extension
kubernetes.podspec-persistent-volume-claim
détermine si les volumes persistants (PV) peuvent être utilisés avec Knative Serving. -
L'extension
kubernetes.podspec-persistent-volume-write
détermine si les PV sont disponibles pour Knative Serving avec l'accès en écriture.
-
L'extension
Pour réclamer un PV, modifiez votre service pour inclure la configuration du PV. Par exemple, vous pouvez avoir une demande de volume persistant avec la configuration suivante :
NoteUtilisez la classe de stockage qui prend en charge le mode d'accès que vous demandez. Par exemple, vous pouvez utiliser la classe
ocs-storagecluster-cephfs
pour le mode d'accèsReadWriteMany
.Configuration de PersistentVolumeClaim
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pv-claim namespace: my-ns spec: accessModes: - ReadWriteMany storageClassName: ocs-storagecluster-cephfs resources: requests: storage: 1Gi
Dans ce cas, pour réclamer un PV avec accès en écriture, modifiez votre service comme suit :
Configuration du service Knative PVC
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns ... spec: template: spec: containers: ... volumeMounts: 1 - mountPath: /data name: mydata readOnly: false volumes: - name: mydata persistentVolumeClaim: 2 claimName: example-pv-claim readOnly: false 3
NotePour utiliser avec succès le stockage persistant dans les services Knative, vous avez besoin d'une configuration supplémentaire, telle que les autorisations de l'utilisateur du conteneur Knative.
4.3.4.2. Ressources supplémentaires
4.3.5. Init containers
Les conteneurs d'initialisation sont des conteneurs spécialisés qui sont exécutés avant les conteneurs d'application dans un pod. Ils sont généralement utilisés pour mettre en œuvre la logique d'initialisation d'une application, ce qui peut inclure l'exécution de scripts d'installation ou le téléchargement des configurations requises. Vous pouvez activer l'utilisation de conteneurs d'initialisation pour les services Knative en modifiant la ressource personnalisée (CR) KnativeServing
.
Les conteneurs Init peuvent entraîner des temps de démarrage d'application plus longs et doivent être utilisés avec prudence pour les applications sans serveur, qui sont censées évoluer fréquemment à la hausse et à la baisse.
4.3.5.1. Activation des conteneurs init
Conditions préalables
- Vous avez installé OpenShift Serverless Operator et Knative Serving sur votre cluster.
- Vous avez des droits d'administrateur de cluster.
Procédure
Activez l'utilisation des conteneurs init en ajoutant le drapeau
kubernetes.podspec-init-containers
au CRKnativeServing
:Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: features: kubernetes.podspec-init-containers: enabled ...
4.3.6. Transformer les balises d'images en condensés
Si le contrôleur Knative Serving a accès au registre des conteneurs, Knative Serving résout les balises d'image en un condensé lorsque vous créez une révision d'un service. Ceci est connu sous le nom de tag-to-digest resolution, et permet d'assurer la cohérence des déploiements.
4.3.6.1. Résolution Tag-to-digest
Pour donner au contrôleur l'accès au registre des conteneurs sur OpenShift Container Platform, vous devez créer un secret et ensuite configurer les certificats personnalisés du contrôleur. Vous pouvez configurer les certificats personnalisés du contrôleur en modifiant la spécification controller-custom-certs
dans la ressource personnalisée (CR) KnativeServing
. Le secret doit résider dans le même espace de noms que la CR KnativeServing
.
Si un secret n'est pas inclus dans le CR KnativeServing
, ce paramètre utilise par défaut l'infrastructure à clé publique (PKI). Lors de l'utilisation de l'ICP, les certificats de l'ensemble du cluster sont automatiquement injectés dans le contrôleur Knative Serving à l'aide de la carte de configuration config-service-sa
. L'OpenShift Serverless Operator remplit la carte de configuration config-service-sa
avec les certificats de l'ensemble du cluster et monte la carte de configuration en tant que volume sur le contrôleur.
4.3.6.1.1. Configuration de la résolution tag-to-digest par l'utilisation d'un secret
Si la spécification controller-custom-certs
utilise le type Secret
, le secret est monté en tant que volume secret. Les composants Knative consomment le secret directement, en supposant que le secret possède les certificats requis.
Conditions préalables
- Vous disposez des droits d'administrateur de cluster sur OpenShift Container Platform.
- Vous avez installé OpenShift Serverless Operator et Knative Serving sur votre cluster.
Procédure
Créez un secret :
Example command
oc -n knative-serving create secret generic custom-secret --from-file=<secret_name>.crt=<path_to_certificate>
Configurez la spécification
controller-custom-certs
dans la ressource personnalisée (CR)KnativeServing
pour utiliser le typeSecret
:Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: controller-custom-certs: name: custom-secret type: Secret
4.3.7. Configuration de l'authentification TLS
Vous pouvez utiliser Transport Layer Security (TLS) pour crypter le trafic Knative et pour l'authentification.
TLS est la seule méthode de cryptage du trafic prise en charge pour Knative Kafka. Red Hat recommande d'utiliser à la fois SASL et TLS pour le courtier Knative pour les ressources Apache Kafka.
Si vous souhaitez activer TLS interne avec une intégration Red Hat OpenShift Service Mesh, vous devez activer Service Mesh avec mTLS au lieu du chiffrement interne expliqué dans la procédure suivante. Voir la documentation pour l'activation des métriques Knative Serving lors de l'utilisation de Service Mesh avec mTLS.
4.3.7.1. Activation de l'authentification TLS pour le trafic interne
OpenShift Serverless prend en charge la terminaison TLS par défaut, de sorte que le trafic HTTPS des utilisateurs finaux est chiffré. Cependant, le trafic interne derrière la route OpenShift est transmis aux applications en utilisant des données en clair. En activant TLS pour le trafic interne, le trafic envoyé entre les composants est chiffré, ce qui rend ce trafic plus sûr.
Si vous souhaitez activer TLS interne avec une intégration Red Hat OpenShift Service Mesh, vous devez activer Service Mesh avec mTLS au lieu du chiffrement interne expliqué dans la procédure suivante.
La prise en charge du cryptage TLS interne est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator et Knative Serving.
-
Vous avez installé le CLI OpenShift (
oc
).
Procédure
Créer un service Knative qui inclut le champ
internal-encryption: "true"
dans la spécification :... spec: config: network: internal-encryption: "true" ...
Redémarrez les pods activateurs dans l'espace de noms
knative-serving
pour charger les certificats :$ oc delete pod -n knative-serving --selector app=activator
4.3.8. Politiques de réseau restrictives
4.3.8.1. Clusters avec des politiques de réseau restrictives
Si vous utilisez un cluster auquel plusieurs utilisateurs ont accès, votre cluster peut utiliser des stratégies de réseau pour contrôler quels pods, services et espaces de noms peuvent communiquer les uns avec les autres sur le réseau. Si votre cluster utilise des stratégies de réseau restrictives, il est possible que les pods du système Knative ne puissent pas accéder à votre application Knative. Par exemple, si votre espace de noms a la politique de réseau suivante, qui refuse toutes les demandes, les pods du système Knative ne peuvent pas accéder à votre application Knative :
Exemple d'objet NetworkPolicy qui refuse toutes les demandes d'accès à l'espace de noms
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: deny-by-default namespace: example-namespace spec: podSelector: ingress: []
4.3.8.2. Permettre la communication avec les applications Knative sur un cluster avec des politiques de réseau restrictives
Pour permettre l'accès à vos applications à partir des pods du système Knative, vous devez ajouter un label à chacun des espaces de noms du système Knative, puis créer un objet NetworkPolicy
dans l'espace de noms de votre application qui autorise l'accès à l'espace de noms pour d'autres espaces de noms qui ont ce label.
Une politique de réseau qui refuse les demandes de services non Knative sur votre cluster empêche toujours l'accès à ces services. Cependant, en autorisant l'accès à votre application Knative à partir des espaces de noms du système Knative, vous autorisez l'accès à votre application Knative à partir de tous les espaces de noms du cluster.
Si vous ne souhaitez pas autoriser l'accès à votre application Knative à partir de tous les espaces de noms du cluster, vous pouvez utiliser JSON Web Token authentication for Knative services à la place. L'authentification par jeton Web JSON pour les services Knative nécessite Service Mesh.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). - OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster.
Procédure
Ajoutez l'étiquette
knative.openshift.io/system-namespace=true
à chaque espace de noms du système Knative qui nécessite un accès à votre application :Étiqueter l'espace de noms
knative-serving
:$ oc label namespace knative-serving knative.openshift.io/system-namespace=true
Étiqueter l'espace de noms
knative-serving-ingress
:$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
Étiqueter l'espace de noms
knative-eventing
:$ oc label namespace knative-eventing knative.openshift.io/system-namespace=true
Étiqueter l'espace de noms
knative-kafka
:$ oc label namespace knative-kafka knative.openshift.io/system-namespace=true
Créez un objet
NetworkPolicy
dans l'espace de noms de votre application afin d'autoriser l'accès à partir des espaces de noms portant l'étiquetteknative.openshift.io/system-namespace
:Exemple d'objet
NetworkPolicy
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: <network_policy_name> 1 namespace: <namespace> 2 spec: ingress: - from: - namespaceSelector: matchLabels: knative.openshift.io/system-namespace: "true" podSelector: {} policyTypes: - Ingress
4.4. Fractionnement du trafic
4.4.1. Vue d'ensemble du fractionnement du trafic
Dans une application Knative, le trafic peut être géré en créant une division du trafic. Un partage de trafic est configuré comme une partie d'une route, qui est gérée par un service Knative.

La configuration d'une route permet d'envoyer des requêtes à différentes révisions d'un service. Ce routage est déterminé par la spécification traffic
de l'objet Service
.
Une déclaration de spécification traffic
consiste en une ou plusieurs révisions, chacune étant responsable de la gestion d'une partie du trafic global. Les pourcentages de trafic acheminés vers chaque révision doivent être égaux à 100 %, ce qui est garanti par une validation Knative.
Les révisions spécifiées dans une spécification traffic
peuvent être soit une révision fixe et nommée, soit pointer vers la "dernière" révision, qui suit la tête de la liste de toutes les révisions pour le service. La révision "la plus récente" est un type de référence flottante qui se met à jour si une nouvelle révision est créée. Chaque révision peut être associée à une balise qui crée une URL d'accès supplémentaire pour cette révision.
La spécification traffic
peut être modifiée par :
-
Éditer directement le YAML d'un objet
Service
. -
Utilisation de l'indicateur Knative (
kn
) CLI--traffic
. - Utilisation de la console web OpenShift Container Platform.
Lorsque vous créez un service Knative, il n'a pas de paramètres par défaut traffic
spec.
4.4.2. Exemples de spécifications de trafic
L'exemple suivant montre une spécification traffic
où 100 % du trafic est acheminé vers la dernière révision du service. Sous status
, vous pouvez voir le nom de la dernière révision à laquelle latestRevision
se réfère :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: ... traffic: - latestRevision: true percent: 100 status: ... traffic: - percent: 100 revisionName: example-service
L'exemple suivant montre une spécification traffic
où 100 % du trafic est acheminé vers la révision étiquetée current
, et le nom de cette révision est spécifié comme example-service
. La révision étiquetée latest
reste disponible, même si aucun trafic n'est acheminé vers elle :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: ... traffic: - tag: current revisionName: example-service percent: 100 - tag: latest latestRevision: true percent: 0
L'exemple suivant montre comment la liste des révisions de la spécification traffic
peut être étendue pour que le trafic soit réparti entre plusieurs révisions. Cet exemple envoie 50 % du trafic à la révision étiquetée current
, et 50 % du trafic à la révision étiquetée candidate
. La révision étiquetée latest
reste disponible, même si aucun trafic n'est acheminé vers elle :
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: ... traffic: - tag: current revisionName: example-service-1 percent: 50 - tag: candidate revisionName: example-service-2 percent: 50 - tag: latest latestRevision: true percent: 0
4.4.3. Fractionnement du trafic à l'aide de la CLI Knative
L'utilisation de la CLI Knative (kn
) pour créer des scissions de trafic offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML. Vous pouvez utiliser la commande kn service update
pour diviser le trafic entre les révisions d'un service.
4.4.3.1. Création d'une division du trafic à l'aide du CLI Knative
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
-
Vous avez installé le CLI Knative (
kn
). - Vous avez créé un service Knative.
Procédure
Spécifiez la révision de votre service et le pourcentage de trafic que vous voulez acheminer vers lui en utilisant la balise
--traffic
avec une commande standardkn service update
:Example command
$ kn service update <service_name> --traffic <revision>=<percentage>
Où ?
-
<service_name>
est le nom du service Knative pour lequel vous configurez le routage du trafic. -
<revision>
est la révision que vous souhaitez configurer pour recevoir un pourcentage du trafic. Vous pouvez spécifier soit le nom de la révision, soit une étiquette que vous avez attribuée à la révision en utilisant l'indicateur--tag
. -
<percentage>
est le pourcentage de trafic que vous souhaitez envoyer à la révision spécifiée.
-
Facultatif : L'indicateur
--traffic
peut être spécifié plusieurs fois dans une commande. Par exemple, si vous avez une révision étiquetée comme@latest
et une révision nomméestable
, vous pouvez spécifier le pourcentage de trafic que vous voulez répartir sur chaque révision comme suit :Example command
$ kn service update example-service --traffic @latest=20,stable=80
Si vous avez plusieurs révisions et que vous ne spécifiez pas le pourcentage de trafic qui doit être attribué à la dernière révision, l'indicateur
--traffic
peut le calculer automatiquement. Par exemple, si vous avez une troisième révision nomméeexample
, et que vous utilisez la commande suivante :Example command
$ kn service update example-service --traffic @latest=10,stable=60
Les 30 % restants du trafic sont répartis sur la révision
example
, même si elle n'a pas été spécifiée.
4.4.4. Indicateurs CLI pour la répartition du trafic
La CLI Knative (kn
) prend en charge les opérations de trafic sur le bloc de trafic d'un service dans le cadre de la commande kn service update
.
4.4.4.1. Drapeaux de division du trafic de la CLI Knative
Le tableau suivant présente un résumé des indicateurs de répartition du trafic, des formats de valeur et de l'opération effectuée par l'indicateur. La colonne Repetition indique si la répétition de la valeur particulière de l'indicateur est autorisée dans une commande kn service update
.
Drapeau | Valeur(s) | Fonctionnement | Répétition |
---|---|---|---|
|
|
Donne à | Oui |
|
|
Donne le trafic | Oui |
|
|
| Non |
|
|
Donne | Oui |
|
|
Donne | Non |
|
|
Supprime | Oui |
4.4.4.1.1. Drapeaux multiples et ordre de préséance
Tous les indicateurs relatifs au trafic peuvent être spécifiés à l'aide d'une seule commande kn service update
. kn
définit la priorité de ces indicateurs. L'ordre des indicateurs spécifiés lors de l'utilisation de la commande n'est pas pris en compte.
La priorité des drapeaux tels qu'ils sont évalués par kn
est la suivante :
-
--untag
: Toutes les révisions référencées avec cet indicateur sont supprimées du bloc de trafic. -
--tag
: Les révisions sont étiquetées comme spécifié dans le bloc de trafic. -
--traffic
: Les révisions référencées se voient attribuer une partie de la répartition du trafic.
Vous pouvez ajouter des balises aux révisions et diviser le trafic en fonction des balises que vous avez définies.
4.4.4.1.2. URL personnalisés pour les révisions
L'attribution de l'indicateur --tag
à un service à l'aide de la commande kn service update
crée une URL personnalisée pour la révision qui est créée lorsque vous mettez à jour le service. L'URL personnalisée suit le modèle https://<tag>-<service_name>-<namespace>.<domain>
ou http://<tag>-<service_name>-<namespace>.<domain>
.
Les drapeaux --tag
et --untag
utilisent la syntaxe suivante :
- Exiger une valeur.
- Indique une balise unique dans le bloc de trafic du service.
- Peut être spécifié plusieurs fois dans une même commande.
4.4.4.1.2.1. Exemple : Attribuer une étiquette à une révision
L'exemple suivant attribue l'étiquette latest
à une révision nommée example-revision
:
$ kn service update -YRFFGUNA nom_du_service> --tag @latest=example-tag
4.4.4.1.2.2. Exemple : Supprimer une balise d'une révision
Vous pouvez supprimer une balise pour supprimer l'URL personnalisée, en utilisant l'indicateur --untag
.
Si les balises d'une révision sont supprimées et que 0 % du trafic lui est attribué, la révision est entièrement supprimée du bloc de trafic.
La commande suivante supprime toutes les balises de la révision nommée example-revision
:
$ kn service update -YRFFGUNA nom_du_service> --untag exemple-tag
4.4.5. Diviser le trafic entre les révisions
Après avoir créé une application sans serveur, l'application est affichée dans la vue Topology de la perspective Developer dans la console web d'OpenShift Container Platform. La révision de l'application est représentée par le nœud, et le service Knative est indiqué par un quadrilatère autour du nœud.
Toute nouvelle modification du code ou de la configuration du service crée une nouvelle révision, qui est un instantané du code à un moment donné. Pour un service, vous pouvez gérer le trafic entre les révisions du service en le divisant et en l'acheminant vers les différentes révisions selon les besoins.
4.4.5.1. Gérer le trafic entre les révisions en utilisant la console web d'OpenShift Container Platform
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
- Vous vous êtes connecté à la console web de OpenShift Container Platform.
Procédure
Pour répartir le trafic entre plusieurs révisions d'une application dans la vue Topology:
- Cliquez sur le service Knative pour voir son aperçu dans le panneau latéral.
Cliquez sur l'onglet Resources pour obtenir une liste de Revisions et Routes pour le service.
Figure 4.1. Application sans serveur
- Cliquez sur le service, indiqué par l'icône S en haut du panneau latéral, pour obtenir une vue d'ensemble des détails du service.
-
Cliquez sur l'onglet YAML et modifiez la configuration du service dans l'éditeur YAML, puis cliquez sur Save. Par exemple, changez le
timeoutseconds
de 300 à 301 . Cette modification de la configuration déclenche une nouvelle révision. Dans la vue Topology, la dernière révision est affichée et l'onglet Resources du service affiche maintenant les deux révisions. Dans l'onglet Resources, cliquez sur Définir la distribution du trafic pour afficher la boîte de dialogue de distribution du trafic :
- Ajoutez le pourcentage de trafic divisé pour les deux révisions dans le champ Splits.
- Ajoutez des balises pour créer des URL personnalisées pour les deux révisions.
Cliquez sur Save pour voir apparaître deux nœuds représentant les deux révisions dans la vue Topologie.
Figure 4.2. Révisions d'applications sans serveur
4.4.6. Reroutage du trafic à l'aide de la stratégie bleu-vert
Vous pouvez réacheminer en toute sécurité le trafic d'une version de production d'une application vers une nouvelle version, en utilisant une stratégie de déploiement bleu-vert.
4.4.6.1. Routage et gestion du trafic grâce à une stratégie de déploiement bleu-vert
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur le cluster.
-
Installez le CLI OpenShift (
oc
).
Procédure
- Créer et déployer une application en tant que service Knative.
Trouvez le nom de la première révision qui a été créée lorsque vous avez déployé le service, en consultant la sortie de la commande suivante :
$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'
Example command
$ oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'
Exemple de sortie
$ example-service-00001
Ajoutez le fichier YAML suivant au service
spec
pour envoyer le trafic entrant à la révision :... spec: traffic: - revisionName: <first_revision_name> percent: 100 # All traffic goes to this revision ...
Vérifiez que vous pouvez voir votre application à l'URL que vous obtenez en exécutant la commande suivante :
oc get ksvc -YRFFGUNA nom_du_service>
-
Déployez une deuxième révision de votre application en modifiant au moins un champ de la spécification
template
du service et en le redéployant. Par exemple, vous pouvez modifier l'adresseimage
du service, ou une variable d'environnementenv
. Vous pouvez redéployer le service en appliquant le fichier YAML du service, ou en utilisant la commandekn service update
si vous avez installé le CLI Knative (kn
). Recherchez le nom de la deuxième révision, la plus récente, qui a été créée lorsque vous avez redéployé le service, en exécutant la commande :
$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'
À ce stade, les première et deuxième révisions du service sont déployées et fonctionnent.
Mettez à jour votre service existant pour créer un nouveau point d'arrivée test pour la deuxième révision, tout en continuant à envoyer tout le reste du trafic vers la première révision :
Exemple de spécification de service mise à jour avec point final de test
... spec: traffic: - revisionName: <first_revision_name> percent: 100 # All traffic is still being routed to the first revision - revisionName: <second_revision_name> percent: 0 # No traffic is routed to the second revision tag: v2 # A named route ...
Après avoir redéployé ce service en réappliquant la ressource YAML, la deuxième révision de l'application est maintenant mise en scène. Aucun trafic n'est acheminé vers la deuxième révision à l'URL principale, et Knative crée un nouveau service nommé
v2
pour tester la nouvelle révision déployée.Obtenez l'URL du nouveau service pour la deuxième révision, en exécutant la commande suivante :
$ oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"
Vous pouvez utiliser cette URL pour vérifier que la nouvelle version de l'application se comporte comme prévu avant d'y acheminer du trafic.
Mettez à nouveau à jour votre service existant, de sorte que 50 % du trafic soit envoyé à la première révision et 50 % à la seconde :
Exemple de spécification de service actualisée divisant le trafic 50/50 entre les révisions
... spec: traffic: - revisionName: <first_revision_name> percent: 50 - revisionName: <second_revision_name> percent: 50 tag: v2 ...
Lorsque vous êtes prêt à acheminer tout le trafic vers la nouvelle version de l'application, mettez à nouveau à jour le service pour envoyer 100 % du trafic vers la deuxième révision :
Exemple de spécification de service mise à jour envoyant tout le trafic à la deuxième révision
... spec: traffic: - revisionName: <first_revision_name> percent: 0 - revisionName: <second_revision_name> percent: 100 tag: v2 ...
AstuceVous pouvez supprimer la première révision au lieu de la fixer à 0 % du trafic si vous ne prévoyez pas de revenir en arrière. Les objets de révision non acheminables sont alors mis au rebut.
- Visitez l'URL de la première révision pour vérifier qu'aucun trafic n'est plus envoyé vers l'ancienne version de l'application.
4.5. Routage externe et entrant
4.5.1. Aperçu du routage
Knative exploite la terminaison TLS de OpenShift Container Platform pour assurer le routage des services Knative. Lorsqu'un service Knative est créé, une route OpenShift Container Platform est automatiquement créée pour le service. Cette route est gérée par l'opérateur OpenShift Serverless. La route OpenShift Container Platform expose le service Knative à travers le même domaine que le cluster OpenShift Container Platform.
Vous pouvez désactiver le contrôle par l'opérateur du routage d'OpenShift Container Platform afin de configurer une route Knative pour utiliser directement vos certificats TLS à la place.
Les routes Knative peuvent également être utilisées avec la route OpenShift Container Platform pour fournir des capacités de routage plus fines, telles que la division du trafic.
4.5.1.1. Ressources supplémentaires
4.5.2. Personnalisation des étiquettes et des annotations
Les routes OpenShift Container Platform prennent en charge l'utilisation d'étiquettes et d'annotations personnalisées, que vous pouvez configurer en modifiant la spécification metadata
d'un service Knative. Les labels et annotations personnalisés sont propagés du service à la route Knative, puis à l'ingress Knative et enfin à la route OpenShift Container Platform.
4.5.2.1. Personnaliser les étiquettes et les annotations pour les routes de OpenShift Container Platform
Conditions préalables
- Vous devez avoir l'OpenShift Serverless Operator et Knative Serving installés sur votre cluster OpenShift Container Platform.
-
Installez le CLI OpenShift (
oc
).
Procédure
Créez un service Knative qui contient l'étiquette ou l'annotation que vous souhaitez propager à la route OpenShift Container Platform :
Pour créer un service en utilisant YAML :
Exemple de service créé à l'aide de YAML
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> labels: <label_name>: <label_value> annotations: <annotation_name>: <annotation_value> ...
Pour créer un service en utilisant le CLI Knative (
kn
), entrez :Exemple de service créé à l'aide d'une commande
kn
$ kn service create <service_name> \ --image=<image> \ --annotation <annotation_name>=<annotation_value> \ --label <label_value>=<label_value>
Vérifiez que la route OpenShift Container Platform a été créée avec l'annotation ou l'étiquette que vous avez ajoutée en inspectant la sortie de la commande suivante :
Exemple de commande de vérification
$ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=<service_name> \ 1 -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \ 2 -n knative-serving-ingress -o yaml \ | grep -e "<label_name>: \"<label_value>\"" -e "<annotation_name>: <annotation_value>" 3
4.5.3. Configuration des routes pour les services Knative
Si vous souhaitez configurer un service Knative pour utiliser votre certificat TLS sur OpenShift Container Platform, vous devez désactiver la création automatique d'une route pour le service par OpenShift Serverless Operator et créer manuellement une route pour le service.
Lorsque vous effectuez la procédure suivante, la route par défaut d'OpenShift Container Platform dans l'espace de noms knative-serving-ingress
n'est pas créée. Cependant, la route Knative pour l'application est toujours créée dans cet espace de noms.
4.5.3.1. Configurer les routes de OpenShift Container Platform pour les services Knative
Conditions préalables
- L'opérateur OpenShift Serverless et le composant Knative Serving doivent être installés sur votre cluster OpenShift Container Platform.
-
Installez le CLI OpenShift (
oc
).
Procédure
Créer un service Knative qui inclut l'annotation
serving.knative.openshift.io/disableRoute=true
:ImportantL'annotation
serving.knative.openshift.io/disableRoute=true
indique à OpenShift Serverless de ne pas créer automatiquement une route pour vous. Cependant, le service affiche toujours une URL et atteint un statut deReady
. Cette URL ne fonctionne pas en externe jusqu'à ce que vous créiez votre propre route avec le même nom d'hôte que le nom d'hôte dans l'URL.Créer une ressource Knative
Service
:Exemple de ressource
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> annotations: serving.knative.openshift.io/disableRoute: "true" spec: template: spec: containers: - image: <image> ...
Appliquer la ressource
Service
:$ oc apply -f <filename>
Facultatif. Créez un service Knative à l'aide de la commande
kn service create
:Exemple de commande
kn
$ kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=true
Vérifiez qu'aucune route OpenShift Container Platform n'a été créée pour le service :
Example command
$ $ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingress
Vous obtiendrez le résultat suivant :
No resources found in knative-serving-ingress namespace.
Créer une ressource
Route
dans l'espace de nomsknative-serving-ingress
:apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/timeout: 600s 1 name: <route_name> 2 namespace: knative-serving-ingress 3 spec: host: <service_host> 4 port: targetPort: http2 to: kind: Service name: kourier weight: 100 tls: insecureEdgeTerminationPolicy: Allow termination: edge 5 key: |- -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- certificate: |- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- caCertificate: |- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE---- wildcardPolicy: None
- 1
- La valeur du délai d'attente pour la route OpenShift Container Platform. Vous devez définir la même valeur que le paramètre
max-revision-timeout-seconds
(600s
par défaut). - 2
- Le nom de la route OpenShift Container Platform.
- 3
- L'espace de noms pour la route OpenShift Container Platform. Il doit s'agir de
knative-serving-ingress
. - 4
- Le nom d'hôte pour l'accès externe. Vous pouvez le définir sur
<service_name>-<service_namespace>.<domain>
. - 5
- Les certificats que vous souhaitez utiliser. Actuellement, seule la terminaison
edge
est prise en charge.
Appliquer la ressource
Route
:$ oc apply -f <filename>
4.5.4. Redirection HTTPS globale
La redirection HTTPS permet de rediriger les requêtes HTTP entrantes. Ces requêtes HTTP redirigées sont cryptées. Vous pouvez activer la redirection HTTPS pour tous les services du cluster en configurant la spécification httpProtocol
pour la ressource personnalisée (CR) KnativeServing
.
4.5.4.1. Paramètres globaux de la redirection HTTPS
Exemple KnativeServing
CR qui active la redirection HTTPS
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: network: httpProtocol: "redirected" ...
4.5.5. Schéma d'URL pour les routes externes
Le schéma d'URL des itinéraires externes est par défaut HTTPS pour une meilleure sécurité. Ce schéma est déterminé par la clé default-external-scheme
dans la spécification des ressources personnalisées (CR) KnativeServing
.
4.5.5.1. Définition du schéma d'URL pour les itinéraires externes
Spécification par défaut
... spec: config: network: default-external-scheme: "https" ...
Vous pouvez remplacer la spécification par défaut d'utiliser HTTP en modifiant la clé default-external-scheme
:
Spécification d'annulation HTTP
... spec: config: network: default-external-scheme: "http" ...
4.5.6. Redirection HTTPS par service
Vous pouvez activer ou désactiver la redirection HTTPS pour un service en configurant l'annotation networking.knative.dev/http-option
.
4.5.6.1. Redirection de HTTPS pour un service
L'exemple suivant montre comment utiliser cette annotation dans un objet YAML Knative Service
:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example namespace: default annotations: networking.knative.dev/http-option: "redirected" spec: ...
4.5.7. Disponibilité locale du cluster
Par défaut, les services Knative sont publiés sur une adresse IP publique. Le fait d'être publié sur une adresse IP publique signifie que les services Knative sont des applications publiques et qu'ils ont une URL accessible au public.
Les URL accessibles au public sont accessibles depuis l'extérieur du cluster. Cependant, les développeurs peuvent avoir besoin de construire des services back-end qui ne sont accessibles que depuis l'intérieur du cluster, connus sous le nom de private services. Les développeurs peuvent étiqueter des services individuels dans le cluster avec l'étiquette networking.knative.dev/visibility=cluster-local
pour les rendre privés.
Pour OpenShift Serverless 1.15.0 et les versions plus récentes, le label serving.knative.dev/visibility
n'est plus disponible. Vous devez mettre à jour les services existants pour utiliser le label networking.knative.dev/visibility
à la place.
4.5.7.1. Paramétrage de la disponibilité du cluster sur le cluster local
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur le cluster.
- Vous avez créé un service Knative.
Procédure
Définissez la visibilité de votre service en ajoutant le label
networking.knative.dev/visibility=cluster-local
:oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local
Vérification
Vérifiez que l'URL de votre service est maintenant au format
http://<service_name>.<namespace>.svc.cluster.local
, en entrant la commande suivante et en examinant la sortie :$ oc get ksvc
Exemple de sortie
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 True
4.5.7.2. Activation de l'authentification TLS pour les services locaux du cluster
Pour les services locaux du cluster, la passerelle locale Kourier kourier-internal
est utilisée. Si vous souhaitez utiliser le trafic TLS avec la passerelle locale Kourier, vous devez configurer vos propres certificats de serveur dans la passerelle locale.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator et Knative Serving.
- Vous avez des droits d'administrateur.
-
Vous avez installé le CLI OpenShift (
oc
).
Procédure
Déployer les certificats de serveur dans l'espace de noms
knative-serving-ingress
:$ export san="knative"
NoteLa validation du nom alternatif du sujet (SAN) est nécessaire pour que ces certificats puissent transmettre la demande à
<app_name>.<namespace>.svc.cluster.local
.Générer une clé racine et un certificat :
$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=Example/CN=Example' \ -keyout ca.key \ -out ca.crt
Générer une clé de serveur qui utilise la validation SAN :
$ openssl req -out tls.csr -newkey rsa:2048 -nodes -keyout tls.key \ -subj "/CN=Example/O=Example" \ -addext "subjectAltName = DNS:$san"
Créer des certificats de serveur :
$ openssl x509 -req -extfile <(printf "subjectAltName=DNS:$san") \ -days 365 -in tls.csr \ -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt
Configurez un secret pour la passerelle locale de Kourier :
Déployer un secret dans l'espace de noms
knative-serving-ingress
à partir des certificats créés lors des étapes précédentes :$ oc create -n knative-serving-ingress secret tls server-certs \ --key=tls.key \ --cert=tls.crt --dry-run=client -o yaml | oc apply -f -
Mettre à jour la spécification de la ressource personnalisée (CR)
KnativeServing
pour utiliser le secret créé par la passerelle Kourier :Exemple KnativeServing CR
... spec: config: kourier: cluster-cert-secret: server-certs ...
Le contrôleur Kourier établit le certificat sans redémarrer le service, de sorte qu'il n'est pas nécessaire de redémarrer le pod.
Vous pouvez accéder au service interne de Kourier avec TLS via le port 443
en montant et en utilisant le site ca.crt
à partir du client.
4.5.8. Type de service de la passerelle Kourier
La passerelle Kourier est exposée par défaut en tant que type de service ClusterIP
. Ce type de service est déterminé par la spécification d'entrée service-type
dans la ressource personnalisée (CR) KnativeServing
.
Spécification par défaut
... spec: ingress: kourier: service-type: ClusterIP ...
4.5.8.1. Définition du type de service de la passerelle Kourier
Vous pouvez remplacer le type de service par défaut par un type de service d'équilibreur de charge en modifiant la spécification service-type
:
Spécification de l'override LoadBalancer
... spec: ingress: kourier: service-type: LoadBalancer ...
4.5.9. Utilisation de HTTP2 et gRPC
OpenShift Serverless ne prend en charge que les itinéraires non sécurisés ou terminés par des bords. Les routes non sécurisées ou terminées par un bord ne supportent pas HTTP2 sur OpenShift Container Platform. Ces itinéraires ne prennent pas non plus en charge gRPC, car gRPC est transporté par HTTP2. Si vous utilisez ces protocoles dans votre application, vous devez appeler l'application en utilisant directement la passerelle d'entrée. Pour ce faire, vous devez trouver l'adresse publique de la passerelle d'entrée et l'hôte spécifique de l'application.
4.5.9.1. Interagir avec une application sans serveur en utilisant HTTP2 et gRPC
Cette méthode s'applique à OpenShift Container Platform 4.10 et aux versions ultérieures. Pour les versions antérieures, voir la section suivante.
Conditions préalables
- Installez OpenShift Serverless Operator et Knative Serving sur votre cluster.
-
Installez le CLI OpenShift (
oc
). - Créer un service Knative.
- Mettez à jour OpenShift Container Platform 4.10 ou une version ultérieure.
- Activer HTTP/2 sur le contrôleur OpenShift Ingress.
Procédure
Ajoutez l'annotation
serverless.openshift.io/default-enable-http2=true
à la ressource personnaliséeKnativeServing
:oc annotate knativeserving <your_knative_CR> -n knative-serving serverless.openshift.io/default-enable-http2=true
Après l'ajout de l'annotation, vous pouvez vérifier que la valeur
appProtocol
du service Kourier esth2c
:$ oc get svc -n knative-serving-ingress kourier -o jsonpath="{.spec.ports[0].appProtocol}"
Exemple de sortie
h2c
Vous pouvez désormais utiliser le cadre gRPC sur le protocole HTTP/2 pour le trafic externe, par exemple :
import "google.golang.org/grpc" grpc.Dial( YOUR_URL, 1 grpc.WithTransportCredentials(insecure.NewCredentials())), 2 )
Ressources supplémentaires
4.5.9.2. Interagir avec une application sans serveur en utilisant HTTP2 et gRPC dans OpenShift Container Platform 4.9 et plus
Cette méthode doit exposer la passerelle Kourier en utilisant le type de service LoadBalancer
. Vous pouvez configurer cela en ajoutant le fichier YAML suivant à votre définition de ressource personnalisée (CRD) KnativeServing
:
... spec: ingress: kourier: service-type: LoadBalancer ...
Conditions préalables
- Installez OpenShift Serverless Operator et Knative Serving sur votre cluster.
-
Installez le CLI OpenShift (
oc
). - Créer un service Knative.
Procédure
- Trouvez l'hôte de l'application. Voir les instructions dans Verifying your serverless application deployment.
Recherchez l'adresse publique de la passerelle d'entrée :
$ oc -n knative-serving-ingress get svc kourier
Exemple de sortie
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m
L'adresse publique apparaît dans le champ
EXTERNAL-IP
et, dans ce cas, il s'agit dea83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
.Définissez manuellement l'en-tête host de votre requête HTTP sur l'hôte de l'application, mais dirigez la requête elle-même vers l'adresse publique de la passerelle d'entrée.
$ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
Exemple de sortie
Hello Serverless!
Vous pouvez également effectuer une requête gRPC directe auprès de la passerelle d'entrée :
import "google.golang.org/grpc" grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )
NoteVeillez à ajouter le port correspondant, 80 par défaut, aux deux hôtes, comme indiqué dans l'exemple précédent.
4.6. Configurer l'accès aux services Knative
4.6.1. Configuration de l'authentification par jeton Web JSON pour les services Knative
OpenShift Serverless ne dispose pas actuellement de fonctionnalités d'autorisation définies par l'utilisateur. Pour ajouter une autorisation définie par l'utilisateur à votre déploiement, vous devez intégrer OpenShift Serverless à Red Hat OpenShift Service Mesh, puis configurer l'authentification JSON Web Token (JWT) et l'injection sidecar pour les services Knative.
4.6.2. Utilisation de l'authentification par jeton Web JSON avec Service Mesh 2.x
Vous pouvez utiliser l'authentification par jeton Web JSON (JWT) avec les services Knative en utilisant Service Mesh 2.x et OpenShift Serverless. Pour ce faire, vous devez créer des demandes et des politiques d'authentification dans l'espace de noms de l'application qui est membre de l'objet ServiceMeshMemberRoll
. Vous devez également activer l'injection de sidecar pour le service.
4.6.2.1. Configuration de l'authentification par jeton Web JSON pour Service Mesh 2.x et OpenShift Serverless
L'ajout d'une injection de sidecar aux pods dans les espaces de noms du système, tels que knative-serving
et knative-serving-ingress
, n'est pas pris en charge lorsque Kourier est activé.
Si vous avez besoin de l'injection de sidecar pour les pods dans ces espaces de noms, consultez la documentation OpenShift Serverless sur Integrating Service Mesh with OpenShift Serverless natively.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator, Knative Serving et Red Hat OpenShift Service Mesh sur votre 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
Ajoutez l'annotation
sidecar.istio.io/inject="true"
à votre service :Exemple de service
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> spec: template: metadata: annotations: sidecar.istio.io/inject: "true" 1 sidecar.istio.io/rewriteAppHTTPProbers: "true" 2 ...
- 1
- Ajouter l'annotation
sidecar.istio.io/inject="true"
. - 2
- Vous devez définir l'annotation
sidecar.istio.io/rewriteAppHTTPProbers: "true"
dans votre service Knative, car les versions 1.14.0 et supérieures d'OpenShift Serverless utilisent par défaut une sonde HTTP comme sonde de préparation pour les services Knative.
Appliquer la ressource
Service
:$ oc apply -f <filename>
Créer une ressource
RequestAuthentication
dans chaque espace de noms d'application sans serveur qui est un membre de l'objetServiceMeshMemberRoll
:apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: jwt-example namespace: <namespace> spec: jwtRules: - issuer: testing@secure.istio.io jwksUri: https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json
Appliquer la ressource
RequestAuthentication
:$ oc apply -f <filename>
Autoriser l'accès à la ressource
RequestAuthenticaton
à partir des pods système pour chaque espace de noms d'application sans serveur qui est un membre de l'objetServiceMeshMemberRoll
, en créant la ressourceAuthorizationPolicy
suivante :apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allowlist-by-paths namespace: <namespace> spec: action: ALLOW rules: - to: - operation: paths: - /metrics 1 - /healthz 2
Appliquer la ressource
AuthorizationPolicy
:$ oc apply -f <filename>
Pour chaque espace de noms d'application sans serveur qui est un membre de l'objet
ServiceMeshMemberRoll
, créez la ressourceAuthorizationPolicy
suivante :apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: require-jwt namespace: <namespace> spec: action: ALLOW rules: - from: - source: requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
Appliquer la ressource
AuthorizationPolicy
:$ oc apply -f <filename>
Vérification
Si vous essayez d'utiliser une requête
curl
pour obtenir l'URL du service Knative, elle est refusée :Example command
$ curl http://hello-example-1-default.apps.mycluster.example.com/
Exemple de sortie
RBAC: access denied
Vérifier la demande avec un JWT valide.
Obtenir le jeton JWT valide :
$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
Accédez au service en utilisant le jeton valide dans l'en-tête de la requête
curl
:$ curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.com
La demande est désormais autorisée :
Exemple de sortie
Hello OpenShift!
4.6.3. Utilisation de l'authentification par jeton Web JSON avec Service Mesh 1.x
Vous pouvez utiliser l'authentification par jeton Web JSON (JWT) avec les services Knative en utilisant Service Mesh 1.x et OpenShift Serverless. Pour ce faire, vous devez créer une politique dans l'espace de noms de l'application qui est un membre de l'objet ServiceMeshMemberRoll
. Vous devez également activer l'injection de sidecar pour le service.
4.6.3.1. Configuration de l'authentification par jeton Web JSON pour Service Mesh 1.x et OpenShift Serverless
L'ajout d'une injection de sidecar aux pods dans les espaces de noms du système, tels que knative-serving
et knative-serving-ingress
, n'est pas pris en charge lorsque Kourier est activé.
Si vous avez besoin de l'injection de sidecar pour les pods dans ces espaces de noms, consultez la documentation OpenShift Serverless sur Integrating Service Mesh with OpenShift Serverless natively.
Conditions préalables
- Vous avez installé OpenShift Serverless Operator, Knative Serving et Red Hat OpenShift Service Mesh sur votre 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
Ajoutez l'annotation
sidecar.istio.io/inject="true"
à votre service :Exemple de service
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> spec: template: metadata: annotations: sidecar.istio.io/inject: "true" 1 sidecar.istio.io/rewriteAppHTTPProbers: "true" 2 ...
- 1
- Ajouter l'annotation
sidecar.istio.io/inject="true"
. - 2
- Vous devez définir l'annotation
sidecar.istio.io/rewriteAppHTTPProbers: "true"
dans votre service Knative, car les versions 1.14.0 et supérieures d'OpenShift Serverless utilisent par défaut une sonde HTTP comme sonde de préparation pour les services Knative.
Appliquer la ressource
Service
:$ oc apply -f <filename>
Créer une politique dans l'espace de noms d'une application sans serveur, qui est un membre de l'objet
ServiceMeshMemberRoll
, qui n'autorise que les demandes avec des jetons Web JSON valides (JWT) :ImportantLes chemins
/metrics
et/healthz
doivent être inclus dansexcludedPaths
car ils sont accessibles à partir des pods du système dans l'espace de nomsknative-serving
.apiVersion: authentication.istio.io/v1alpha1 kind: Policy metadata: name: default namespace: <namespace> spec: origins: - jwt: issuer: testing@secure.istio.io jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/jwks.json" triggerRules: - excludedPaths: - prefix: /metrics 1 - prefix: /healthz 2 principalBinding: USE_ORIGIN
Appliquer la ressource
Policy
:$ oc apply -f <filename>
Vérification
Si vous essayez d'utiliser une requête
curl
pour obtenir l'URL du service Knative, elle est refusée :$ curl http://hello-example-default.apps.mycluster.example.com/
Exemple de sortie
Origin authentication failed.
Vérifier la demande avec un JWT valide.
Obtenir le jeton JWT valide :
$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
Accédez au service en utilisant le jeton valide dans l'en-tête de la requête
curl
:$ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"
La demande est désormais autorisée :
Exemple de sortie
Hello OpenShift!
4.7. Configurer des domaines personnalisés pour les services Knative
4.7.1. Configurer un domaine personnalisé pour un service Knative
Les services Knative se voient automatiquement attribuer un nom de domaine par défaut basé sur la configuration de votre cluster. Par exemple, <service_name>-<namespace>.example.com
. Vous pouvez personnaliser le domaine de votre service Knative en associant un nom de domaine personnalisé que vous possédez à un service Knative.
Pour ce faire, vous pouvez créer une ressource DomainMapping
pour le service. Vous pouvez également créer plusieurs ressources DomainMapping
pour associer plusieurs domaines et sous-domaines à un seul service.
4.7.2. Mappage de domaine personnalisé
Vous pouvez personnaliser le domaine de votre service Knative en mappant un nom de domaine personnalisé que vous possédez à un service Knative. Pour mapper un nom de domaine personnalisé à une ressource personnalisée (CR), vous devez créer une CR DomainMapping
qui est mappée à une CR cible adressable, telle qu'un service Knative ou une route Knative.
4.7.2.1. Créer un mappage de domaine personnalisé
Vous pouvez personnaliser le domaine de votre service Knative en mappant un nom de domaine personnalisé que vous possédez à un service Knative. Pour mapper un nom de domaine personnalisé à une ressource personnalisée (CR), vous devez créer une CR DomainMapping
qui est mappée à une CR cible adressable, telle qu'un service Knative ou une route Knative.
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre 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.
Vous avez créé un service Knative et contrôlé un domaine personnalisé que vous souhaitez associer à ce service.
NoteVotre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.
Procédure
Créez un fichier YAML contenant le CR
DomainMapping
dans le même espace de noms que le CR cible que vous souhaitez mapper :apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> 1 namespace: <namespace> 2 spec: ref: name: <target_name> 3 kind: <target_type> 4 apiVersion: serving.knative.dev/v1
Exemple de mappage de domaine de service
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: example-domain namespace: default spec: ref: name: example-service kind: Service apiVersion: serving.knative.dev/v1
Exemple de mappage de domaines de routes
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: example-domain namespace: default spec: ref: name: example-route kind: Route apiVersion: serving.knative.dev/v1
Appliquer le CR
DomainMapping
sous la forme d'un fichier YAML :$ oc apply -f <filename>
4.7.3. Domaines personnalisés pour les services Knative à l'aide du CLI Knative
Vous pouvez personnaliser le domaine de votre service Knative en faisant correspondre un nom de domaine personnalisé que vous possédez à un service Knative. Vous pouvez utiliser la CLI Knative (kn
) pour créer une ressource personnalisée (CR) DomainMapping
qui correspond à une CR cible adressable, telle qu'un service Knative ou une route Knative.
4.7.3.1. Créer un mappage de domaine personnalisé en utilisant le CLI Knative
Conditions préalables
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
Vous avez créé un service ou une route Knative, et vous contrôlez un domaine personnalisé que vous souhaitez associer à ce CR.
NoteVotre domaine personnalisé doit pointer vers le DNS du cluster OpenShift Container Platform.
-
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.
Procédure
Associe un domaine à un CR dans l'espace de noms actuel :
kn domain create <domain_mapping_name> --ref <target_name>
Example command
$ kn domain create example-domain-map --ref example-service
L'indicateur
--ref
spécifie un CR cible adressable pour le mappage de domaine.Si aucun préfixe n'est fourni lors de l'utilisation de l'indicateur
--ref
, il est supposé que la cible est un service Knative dans l'espace de noms actuel.Associer un domaine à un service Knative dans un espace de noms spécifié :
kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>
Example command
$ kn domain create example-domain-map --ref ksvc:example-service:example-namespace
Associer un domaine à une route Knative :
$ kn domain create <domain_mapping_name> --ref <kroute:route_name>
Example command
$ kn domain create example-domain-map --ref kroute:example-route
4.7.4. Cartographie des domaines selon la perspective du développeur
Vous pouvez personnaliser le domaine de votre service Knative en mappant un nom de domaine personnalisé que vous possédez à un service Knative. Vous pouvez utiliser la perspective Developer de la console web OpenShift Container Platform pour mapper une ressource personnalisée (CR) DomainMapping
à un service Knative.
4.7.4.1. Mapper un domaine personnalisé à un service en utilisant la perspective du développeur
Conditions préalables
- Vous vous êtes connecté à la console web.
- Vous êtes dans la perspective Developer.
- OpenShift Serverless Operator et Knative Serving sont installés sur votre cluster. Cette opération doit être réalisée par un administrateur de 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éé un service Knative et contrôlé un domaine personnalisé que vous souhaitez associer à ce service.
NoteVotre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.
Procédure
- Naviguez jusqu'à la page Topology.
-
Cliquez avec le bouton droit de la souris sur le service que vous voulez mapper à un domaine, et sélectionnez l'option Edit qui contient le nom du service. Par exemple, si le service s'appelle
example-service
, sélectionnez l'option Edit example-service. Dans la section Advanced options, cliquez sur Show advanced Routing options.
- Si le CR de mappage de domaine que vous souhaitez mapper au service existe déjà, vous pouvez le sélectionner dans la liste Domain mapping.
-
Si vous voulez créer un nouveau CR de mappage de domaine, tapez le nom de domaine dans la case et sélectionnez l'option Create. Par exemple, si vous tapez
example.com
, l'option Create est Create "example.com".
- Cliquez sur Save pour enregistrer les modifications apportées à votre service.
Vérification
- Naviguez jusqu'à la page Topology.
- Cliquez sur le service que vous avez créé.
- Dans l'onglet Resources de la fenêtre d'information sur le service, vous pouvez voir le domaine que vous avez mappé au service listé sous Domain mappings.
4.7.5. Mappage de domaines à l'aide de la perspective de l'administrateur
Si vous ne souhaitez pas passer à la perspective Developer dans la console web d'OpenShift Container Platform ou utiliser le CLI Knative (kn
) ou les fichiers YAML, vous pouvez utiliser la perspective Administator de la console web d'OpenShift Container Platform.
4.7.5.1. Mapper un domaine personnalisé à un service en utilisant la perspective de l'administrateur
Les services Knative se voient automatiquement attribuer un nom de domaine par défaut basé sur la configuration de votre cluster. Par exemple, <service_name>-<namespace>.example.com
. Vous pouvez personnaliser le domaine de votre service Knative en associant un nom de domaine personnalisé que vous possédez à un service Knative.
Pour ce faire, vous pouvez créer une ressource DomainMapping
pour le service. Vous pouvez également créer plusieurs ressources DomainMapping
pour associer plusieurs domaines et sous-domaines à un seul service.
Si vous disposez des droits d'administrateur de cluster, vous pouvez créer une ressource personnalisée (CR) DomainMapping
en utilisant la perspective Administrator dans la console Web d'OpenShift Container Platform.
Conditions préalables
- Vous vous êtes connecté à la console web.
- Vous êtes dans la perspective Administrator.
- Vous avez installé OpenShift Serverless Operator.
- Vous avez installé Knative Serving.
- 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 service Knative et contrôlé un domaine personnalisé que vous souhaitez associer à ce service.
NoteVotre domaine personnalisé doit pointer vers l'adresse IP du cluster OpenShift Container Platform.
Procédure
- Naviguez jusqu'à CustomResourceDefinitions et utilisez la boîte de recherche pour trouver la définition de ressource personnalisée (CRD) DomainMapping.
- Cliquez sur le CRD DomainMapping, puis naviguez jusqu'à l'onglet Instances.
- Cliquez sur Create DomainMapping.
Modifiez le YAML pour le CR
DomainMapping
afin qu'il inclue les informations suivantes pour votre instance :apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> 1 namespace: <namespace> 2 spec: ref: name: <target_name> 3 kind: <target_type> 4 apiVersion: serving.knative.dev/v1
Exemple de mappage d'un domaine vers un service Knative
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: custom-ksvc-domain.example.com namespace: default spec: ref: name: example-service kind: Service apiVersion: serving.knative.dev/v1
Vérification
Accédez au domaine personnalisé en utilisant une requête
curl
. Par exemple, il est possible d'accéder au domaine personnalisé en utilisant une requête :Example command
$ curl custom-ksvc-domain.example.com
Exemple de sortie
Hello OpenShift!
4.7.6. Sécurisation d'un service mappé à l'aide d'un certificat TLS
4.7.6.1. Sécuriser un service avec un domaine personnalisé en utilisant un certificat TLS
Après avoir configuré un domaine personnalisé pour un service Knative, vous pouvez utiliser un certificat TLS pour sécuriser le service mappé. Pour ce faire, vous devez créer un secret TLS Kubernetes, puis mettre à jour le CR DomainMapping
pour utiliser le secret TLS que vous avez créé.
Si vous utilisez net-istio
pour Ingress et activez mTLS via SMCP en utilisant security.dataPlane.mtls: true
, Service Mesh déploie DestinationRules
pour l'hôte *.local
, ce qui n'autorise pas DomainMapping
pour OpenShift Serverless.
Pour contourner ce problème, activez mTLS en déployant PeerAuthentication
au lieu d'utiliser security.dataPlane.mtls: true
.
Conditions préalables
-
Vous avez configuré un domaine personnalisé pour un service Knative et vous disposez d'un CR
DomainMapping
fonctionnel. - Vous disposez d'un certificat TLS délivré par votre autorité de certification ou d'un certificat auto-signé.
-
Vous avez obtenu les fichiers
cert
etkey
auprès du fournisseur de votre autorité de certification, ou un certificat auto-signé. -
Installez le CLI OpenShift (
oc
).
Procédure
Créez un secret TLS Kubernetes :
$ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
Ajoutez le label
networking.internal.knative.dev/certificate-uid: <id>`
au secret TLS de Kubernetes :$ oc label secret <tls_secret_name> networking.internal.knative.dev/certificate-uid="<id>"
Si vous utilisez un fournisseur de secret tiers tel que cert-manager, vous pouvez configurer votre gestionnaire de secret pour étiqueter automatiquement le secret TLS de Kubernetes. Les utilisateurs de Cert-manager peuvent utiliser le modèle de secret proposé pour générer automatiquement des secrets avec l'étiquette correcte. Dans ce cas, le filtrage des secrets est effectué sur la base de la clé uniquement, mais cette valeur peut contenir des informations utiles telles que l'ID du certificat que le secret contient.
NoteL'opérateur cert-manager pour Red Hat OpenShift est une fonctionnalité de l'aperçu technologique. Pour plus d'informations, consultez la documentation Installing the cert-manager Operator for Red Hat OpenShift.
Mettez à jour le CR
DomainMapping
pour utiliser le secret TLS que vous avez créé :apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> namespace: <namespace> spec: ref: name: <service_name> kind: Service apiVersion: serving.knative.dev/v1 # TLS block specifies the secret to be used tls: secretName: <tls_secret_name>
Vérification
Vérifiez que l'état de la CR
DomainMapping
estTrue
et que la colonneURL
de la sortie indique le domaine mappé avec le schémahttps
:oc get domainmapping <domain_name>
Exemple de sortie
NAME URL READY REASON example.com https://example.com True
Facultatif : si le service est exposé publiquement, vérifiez qu'il est disponible en exécutant la commande suivante :
$ curl https://<domain_name>
Si le certificat est auto-signé, passez la vérification en ajoutant le drapeau
-k
à la commandecurl
.
4.7.6.2. Amélioration de l'utilisation de la mémoire du net-kourier par l'utilisation du filtrage secret
Par défaut, l'implémentation des informateurs pour la bibliothèque Kubernetes client-go
récupère toutes les ressources d'un type particulier. Cela peut entraîner une surcharge substantielle lorsque de nombreuses ressources sont disponibles, ce qui peut faire échouer le contrôleur d'entrée Knative net-kourier
sur les grands clusters en raison de fuites de mémoire. Cependant, un mécanisme de filtrage est disponible pour le contrôleur d'entrée Knative net-kourier
, ce qui permet au contrôleur de ne récupérer que les secrets liés à Knative. Vous pouvez activer ce mécanisme en définissant une variable d'environnement pour la ressource personnalisée (CR) KnativeServing
.
Si vous activez le filtrage des secrets, tous vos secrets doivent être étiquetés avec networking.internal.knative.dev/certificate-uid: "<id>"
. Sinon, Knative Serving ne les détecte pas, ce qui entraîne des échecs. Vous devez étiqueter à la fois les nouveaux secrets et les secrets existants.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- Un projet que vous avez créé ou pour lequel vous avez des rôles et des permissions afin de créer des applications et d'autres charges de travail dans OpenShift Container Platform.
- Installez OpenShift Serverless Operator et Knative Serving.
-
Installez le CLI OpenShift (
oc
).
Procédure
Définissez la variable
ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
àtrue
pournet-kourier-controller
dans le CRKnativeServing
:Exemple KnativeServing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: deployments: - env: - container: controller envVars: - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID value: 'true' name: net-kourier-controller
4.8. Configuration de la haute disponibilité pour les services Knative
4.8.1. Haute disponibilité des services Knative
La haute disponibilité (HA) est une fonctionnalité standard des API Kubernetes qui permet de garantir que les API restent opérationnelles en cas de perturbation. Dans un déploiement HA, si un contrôleur actif tombe en panne ou est supprimé, un autre contrôleur est immédiatement disponible. Ce contrôleur prend en charge le traitement des API qui étaient gérées par le contrôleur qui n'est plus disponible.
HA dans OpenShift Serverless est disponible via l'élection de leader, qui est activée par défaut après l'installation du plan de contrôle Knative Serving ou Eventing. Lors de l'utilisation d'un modèle HA d'élection de leader, les instances de contrôleurs sont déjà planifiées et en cours d'exécution dans le cluster avant qu'elles ne soient nécessaires. Ces instances de contrôleurs sont en concurrence pour l'utilisation d'une ressource partagée, connue sous le nom de verrou d'élection du leader. L'instance du contrôleur qui a accès à la ressource de verrouillage de l'élection du leader à un moment donné est appelée le leader.
4.8.2. Haute disponibilité des services Knative
La haute disponibilité (HA) est disponible par défaut pour les composants Knative Serving activator
, autoscaler
, autoscaler-hpa
, controller
, webhook
, kourier-control
, et kourier-gateway
, qui sont configurés pour avoir deux répliques chacun par défaut. Vous pouvez changer le nombre de répliques pour ces composants en modifiant la valeur spec.high-availability.replicas
dans la ressource personnalisée (CR) KnativeServing
.
4.8.2.1. Configuration des répliques de haute disponibilité pour Knative Serving
Pour spécifier trois répliques minimum pour les ressources de déploiement éligibles, définissez la valeur du champ spec.high-availability.replicas
dans la ressource personnalisée sur 3
.
Conditions préalables
- Vous avez accès à un compte OpenShift Container Platform avec un accès administrateur de cluster.
- L'opérateur OpenShift Serverless et Knative Serving sont installés sur votre cluster.
Procédure
- Dans la perspective de la console web de OpenShift Container Platform Administrator, naviguez vers OperatorHub → Installed Operators.
-
Sélectionnez l'espace de noms
knative-serving
. - Cliquez sur Knative Serving dans la liste de Provided APIs pour l'OpenShift Serverless Operator afin d'accéder à l'onglet Knative Serving.
Cliquez sur knative-serving, puis sur l'onglet YAML dans la page knative-serving.
Modifier le nombre de répliques dans le CR
KnativeServing
:Exemple YAML
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: high-availability: replicas: 3
Chapitre 5. Concours complet
5.1. Concours complet d'équitation
Knative Eventing sur OpenShift Container Platform permet aux développeurs d'utiliser une architecture pilotée par les événements avec des applications sans serveur. Une architecture pilotée par les événements est basée sur le concept de relations découplées entre les producteurs et les consommateurs d'événements.
Les producteurs d'événements créent des événements, et les événements sinks, ou consommateurs, reçoivent des événements. Knative Eventing utilise des requêtes HTTP POST standard pour envoyer et recevoir des événements entre les producteurs et les récepteurs d'événements. Ces événements sont conformes aux spécifications CloudEvents, qui permettent de créer, d'analyser, d'envoyer et de recevoir des événements dans n'importe quel langage de programmation.
Knative Eventing prend en charge les cas d'utilisation suivants :
- Publier un événement sans créer de consommateur
- Vous pouvez envoyer des événements à un courtier sous la forme d'un HTTP POST et utiliser la liaison pour découpler la configuration de destination de votre application qui produit les événements.
- Consommer un événement sans créer d'éditeur
- Vous pouvez utiliser un déclencheur pour consommer des événements à partir d'un courtier en fonction des attributs de l'événement. L'application reçoit les événements sous forme de HTTP POST.
Pour permettre la livraison à plusieurs types de puits, Knative Eventing définit les interfaces génériques suivantes qui peuvent être mises en œuvre par plusieurs ressources Kubernetes :
- Ressources adressables
-
Capable de recevoir et d'accuser réception d'un événement transmis par HTTP à une adresse définie dans le champ
status.address.url
de l'événement. La ressource KubernetesService
satisfait également à l'interface adressable. - Ressources appelables
-
Capable de recevoir un événement transmis par HTTP et de le transformer, en renvoyant
0
ou1
nouveaux événements dans la charge utile de la réponse HTTP. Ces événements renvoyés peuvent être traités de la même manière que les événements provenant d'une source externe.
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 → Edit URI.
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.
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.
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.
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.
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.
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.
5.3. Les puits d'événements
5.3.1. Les puits d'événements
Lorsque vous créez une source d'événements, vous pouvez spécifier un puits d'événements vers lequel les événements sont envoyés à partir de la source. Un puits d'événements est une ressource adressable ou appelable qui peut recevoir des événements d'autres ressources. Les services Knative, les canaux et les courtiers sont des exemples de puits d'événements. Il existe également un type de puits Apache Kafka spécifique.
Les objets adressables reçoivent et accusent réception d'un événement transmis par HTTP à une adresse définie dans leur champ status.address.url
. Dans un cas particulier, l'objet principal Kubernetes Service
remplit également l'interface adressable.
Les objets appelables sont capables de recevoir un événement transmis par HTTP et de le transformer, en renvoyant 0
ou 1
nouveaux événements dans la réponse HTTP. Ces événements renvoyés peuvent être traités de la même manière que les événements provenant d'une source externe.
5.3.1.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
.
Vous pouvez configurer les CR qui peuvent être utilisés avec l'indicateur --sink
pour les commandes CLI Knative (kn
) en personnalisant kn
.
5.3.2. Création de puits d'événements
Lorsque vous créez une source d'événements, vous pouvez spécifier un puits d'événements vers lequel les événements sont envoyés à partir de la source. Un puits d'événements est une ressource adressable ou appelable qui peut recevoir des événements d'autres ressources. Les services Knative, les canaux et les courtiers sont des exemples de puits d'événements. Il existe également un type de puits Apache Kafka spécifique.
Pour plus d'informations sur la création de ressources pouvant être utilisées comme puits d'événements, voir la documentation suivante :
5.3.3. Sink pour Apache Kafka
Les puits Apache Kafka sont un type de puits d'événements disponibles si un administrateur de cluster a activé Apache Kafka sur votre cluster. Vous pouvez envoyer des événements directement d'une source d'événements à un sujet Kafka en utilisant un puits Kafka.
5.3.3.1. Créer un puits Apache Kafka en utilisant YAML
Vous pouvez créer un puits Kafka qui envoie des événements à un sujet Kafka. Par défaut, un sink Kafka utilise le mode de contenu binaire, qui est plus efficace que le mode structuré. Pour créer un puits Kafka à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet KafkaSink
, puis l'appliquer à l'aide de la commande oc apply
.
Conditions préalables
-
L'opérateur OpenShift Serverless, Knative Eventing 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.
-
Installez le CLI OpenShift (
oc
).
Procédure
Créer une définition d'objet
KafkaSink
sous forme de fichier YAML :Evier Kafka YAML
apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink metadata: name: <sink-name> namespace: <namespace> spec: topic: <topic-name> bootstrapServers: - <bootstrap-server>
Pour créer le puits Kafka, appliquez le fichier YAML
KafkaSink
:$ oc apply -f <filename>
Configurer une source d'événements de manière à ce que le puits soit spécifié dans sa spécification :
Exemple d'un puits Kafka connecté à une source de serveur API
apiVersion: sources.knative.dev/v1alpha2 kind: ApiServerSource metadata: name: <source-name> 1 namespace: <namespace> 2 spec: serviceAccountName: <service-account-name> 3 mode: Resource resources: - apiVersion: v1 kind: Event sink: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <sink-name> 4
5.3.3.2. Créer un puits d'événements pour Apache Kafka en utilisant la console web d'OpenShift Container Platform
Vous pouvez créer un puits Kafka qui envoie des événements à un sujet Kafka en utilisant la perspective Developer dans la console web d'OpenShift Container Platform. Par défaut, un sink Kafka utilise le mode de contenu binaire, qui est plus efficace que le mode structuré.
En tant que développeur, vous pouvez créer un puits d'événements pour recevoir des événements d'une source particulière et les envoyer à un sujet Kafka.
Conditions préalables
- Vous avez installé l'OpenShift Serverless Operator, avec Knative Serving, Knative Eventing, et Knative broker for Apache Kafka APIs, depuis l'OperatorHub.
- Vous avez créé un sujet Kafka dans votre environnement Kafka.
Procédure
- Dans la perspective Developer, accédez à la vue Add.
- Cliquez sur Event Sink dans la page Eventing catalog.
-
Recherchez
KafkaSink
dans les éléments du catalogue et cliquez dessus. - Cliquez sur Create Event Sink.
Dans la vue du formulaire, saisissez l'URL du serveur d'amorçage, qui est une combinaison du nom d'hôte et du port.
- Saisissez le nom de la rubrique à laquelle envoyer les données d'événement.
- Saisissez le nom du puits d'événement.
- Cliquez sur Create.
Vérification
- Dans la perspective Developer, accédez à la vue Topology.
- Cliquez sur le puits d'événement créé pour afficher ses détails dans le panneau de droite.
5.3.3.3. Configuration de la sécurité pour les puits Apache Kafka
Transport Layer Security (TLS) est utilisé par les clients et les serveurs Apache Kafka pour chiffrer le trafic entre Knative et Kafka, ainsi que pour l'authentification. TLS est la seule méthode de cryptage du trafic prise en charge par l'implémentation du courtier Knative pour 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
-
OpenShift Serverless Operator, Knative Eventing et les ressources personnalisées (CR)
KnativeKafka
sont installés sur votre cluster OpenShift Container Platform. -
Le puits Kafka est activé dans le CR
KnativeKafka
. - 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 certificat d'autorité de certification pour le cluster Kafka stocké dans un fichier
.pem
. -
Vous disposez d'un certificat client pour le cluster Kafka et d'une clé stockée sous forme de fichiers
.pem
. -
Vous avez installé le CLI OpenShift (
oc
). -
Vous avez choisi le mécanisme SASL à utiliser, par exemple
PLAIN
,SCRAM-SHA-256
, ouSCRAM-SHA-512
.
Procédure
Créez les fichiers de certificat en tant que secret dans le même espace de noms que votre objet
KafkaSink
:ImportantLes certificats et les clés doivent être au format PEM.
Pour l'authentification par SASL sans cryptage :
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SASL_PLAINTEXT \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-literal=user=<username> \ --from-literal=password=<password>
Pour l'authentification à l'aide de SASL et le cryptage à l'aide de TLS :
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SASL_SSL \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-file=ca.crt=<my_caroot.pem_file_path> \ 1 --from-literal=user=<username> \ --from-literal=password=<password>
- 1
- L'adresse
ca.crt
peut être omise pour utiliser le jeu de CA racine du système si vous utilisez un service Kafka géré dans un nuage public, tel que Red Hat OpenShift Streams pour Apache Kafka.
Pour l'authentification et le cryptage à l'aide de TLS :
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=<my_caroot.pem_file_path> \ 1 --from-file=user.crt=<my_cert.pem_file_path> \ --from-file=user.key=<my_key.pem_file_path>
- 1
- L'adresse
ca.crt
peut être omise pour utiliser le jeu de CA racine du système si vous utilisez un service Kafka géré dans un nuage public, tel que Red Hat OpenShift Streams pour Apache Kafka.
Créez ou modifiez un objet
KafkaSink
et ajoutez une référence à votre secret dans la spécificationauth
:apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink metadata: name: <sink_name> namespace: <namespace> spec: ... auth: secret: ref: name: <secret_name> ...
Appliquer l'objet
KafkaSink
:$ oc apply -f <filename>
5.4. Courtiers
5.4.1. Courtiers
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. Les événements sont envoyés d'une source d'événements à un broker sous la forme d'une requête HTTP POST
. Une fois que les événements sont entrés dans le courtier, ils peuvent être filtrés par les attributs CloudEvent à l'aide de déclencheurs, puis envoyés sous la forme d'une requête HTTP POST
à un puits d'événements.

5.4.2. Types de courtiers
Les administrateurs de clusters peuvent définir l'implémentation par défaut des courtiers pour un cluster. Lorsque vous créez un courtier, l'implémentation du courtier par défaut est utilisée, à moins que vous ne fournissiez des configurations définies dans l'objet Broker
.
5.4.2.1. Mise en œuvre par défaut du courtier à des fins de développement
Knative fournit une implémentation par défaut d'un courtier basé sur un canal. Ce courtier peut être utilisé à des fins de développement et de test, mais il ne fournit pas de garanties suffisantes en matière de livraison d'événements pour les environnements de production. Le courtier par défaut est soutenu par l'implémentation du canal InMemoryChannel
par défaut.
Si vous souhaitez utiliser Apache Kafka pour réduire les sauts de réseau, utilisez l'implémentation du courtier Knative pour Apache Kafka. Ne configurez pas le courtier basé sur les canaux pour qu'il soit soutenu par l'implémentation du canal KafkaChannel
.
5.4.2.2. Mise en œuvre d'un courtier Knative pour Apache Kafka, prêt pour la production
Pour les déploiements Knative Eventing prêts pour la production, Red Hat recommande d'utiliser l'implémentation du courtier Knative pour Apache Kafka. Le courtier est une implémentation native d'Apache Kafka du courtier Knative, qui envoie les CloudEvents directement à l'instance Kafka.
Le courtier Knative dispose d'une intégration native avec Kafka pour le stockage et l'acheminement des événements. Cela permet une meilleure intégration avec Kafka pour le modèle de courtier et de déclencheur par rapport à d'autres types de courtiers, et réduit les sauts de réseau. Les autres avantages de la mise en œuvre du courtier Knative sont les suivants :
- Garanties de livraison au moins une fois
- Livraison ordonnée des événements, basée sur l'extension de partitionnement CloudEvents
- Haute disponibilité du plan de contrôle
- Un plan de données extensible horizontalement
L'implémentation du courtier Knative pour Apache Kafka stocke les CloudEvents entrants en tant qu'enregistrements Kafka, en utilisant le mode de contenu binaire. Cela signifie que tous les attributs et extensions de CloudEvent sont mappés en tant qu'en-têtes sur l'enregistrement Kafka, tandis que la spécification data
du CloudEvent correspond à la valeur de l'enregistrement Kafka.
5.4.3. Création de courtiers
Knative fournit une implémentation par défaut d'un courtier basé sur un canal. Ce courtier peut être utilisé à des fins de développement et de test, mais il n'offre pas de garanties suffisantes en matière de livraison d'événements pour les environnements de production.
Si un administrateur de cluster a configuré votre déploiement OpenShift Serverless pour utiliser Apache Kafka comme type de courtier par défaut, la création d'un courtier en utilisant les paramètres par défaut crée un courtier Knative pour Apache Kafka.
Si votre déploiement OpenShift Serverless n'est pas configuré pour utiliser le courtier Knative pour Apache Kafka comme type de courtier par défaut, le courtier basé sur les canaux est créé lorsque vous utilisez les paramètres par défaut dans les procédures suivantes.
5.4.3.1. Créer un courtier en utilisant le CLI Knative
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. L'utilisation de la CLI Knative (kn
) pour créer des courtiers offre une interface utilisateur plus rationnelle et plus intuitive que la modification directe des fichiers YAML. Vous pouvez utiliser la commande kn broker create
pour créer un courtier.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
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.
Procédure
Créer un courtier :
$ kn broker create <nom_du_courtier>
Vérification
La commande
kn
permet d'obtenir la liste de tous les courtiers existants :$ kn broker list
Exemple de sortie
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
Facultatif : Si vous utilisez la console web de OpenShift Container Platform, vous pouvez naviguer vers la vue Topology dans la perspective Developer, et observer que le courtier existe :
5.4.3.2. Création d'un courtier par l'annotation d'un déclencheur
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. Vous pouvez créer un broker en ajoutant l'annotation eventing.knative.dev/injection: enabled
à un objet Trigger
.
Si vous créez un courtier en utilisant l'annotation eventing.knative.dev/injection: enabled
, vous ne pouvez pas supprimer ce courtier sans les autorisations de l'administrateur de la grappe. Si vous supprimez le courtier sans qu'un administrateur de cluster ait d'abord supprimé cette annotation, le courtier est à nouveau créé après la suppression.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
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
Créez un objet
Trigger
sous la forme d'un fichier YAML comportant l'annotationeventing.knative.dev/injection: enabled
:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: annotations: eventing.knative.dev/injection: enabled name: <trigger_name> spec: broker: default subscriber: 1 ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service_name>
- 1
- Spécifiez les détails du puits d'événements, ou subscriber, vers lequel le déclencheur envoie des événements.
Appliquer le fichier YAML
Trigger
:$ oc apply -f <filename>
Vérification
Vous pouvez vérifier que le courtier a été créé avec succès en utilisant le CLI oc
, ou en l'observant dans la vue Topology de la console web.
Entrez la commande suivante
oc
pour obtenir le courtier :oc -n <namespace> get broker default
Exemple de sortie
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
Facultatif : Si vous utilisez la console web de OpenShift Container Platform, vous pouvez naviguer vers la vue Topology dans la perspective Developer, et observer que le courtier existe :
5.4.3.3. Créer un courtier en étiquetant un espace de noms
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. Vous pouvez créer automatiquement le courtier default
en étiquetant un espace de noms dont vous êtes le propriétaire ou pour lequel vous disposez de droits d'écriture.
Les courtiers créés à l'aide de cette méthode ne sont pas supprimés si vous retirez l'étiquette. Vous devez les supprimer manuellement.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
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
Étiqueter un espace de noms avec
eventing.knative.dev/injection=enabled
:oc label namespace <namespace> eventing.knative.dev/injection=enabled
Vérification
Vous pouvez vérifier que le courtier a été créé avec succès en utilisant le CLI oc
, ou en l'observant dans la vue Topology de la console web.
Utilisez la commande
oc
pour obtenir le courtier :oc -n <namespace> get broker <broker_name>
Example command
$ oc -n default get broker default
Exemple de sortie
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
Facultatif : Si vous utilisez la console web de OpenShift Container Platform, vous pouvez naviguer vers la vue Topology dans la perspective Developer, et observer que le courtier existe :
5.4.3.4. Suppression d'un courtier créé par injection
Si vous créez un courtier par injection et que vous souhaitez ensuite le supprimer, vous devez le faire manuellement. Les courtiers créés à l'aide d'une étiquette d'espace de noms ou d'une annotation de déclenchement ne sont pas supprimés définitivement si vous supprimez l'étiquette ou l'annotation.
Conditions préalables
-
Installez le CLI OpenShift (
oc
).
Procédure
Supprimer l'étiquette
eventing.knative.dev/injection=enabled
de l'espace de noms :oc label namespace <namespace> eventing.knative.dev/injection-
La suppression de l'annotation empêche Knative de recréer le courtier après l'avoir supprimé.
Supprime le courtier de l'espace de noms sélectionné :
oc -n <namespace> delete broker <broker_name>
Vérification
Utilisez la commande
oc
pour obtenir le courtier :oc -n <namespace> get broker <broker_name>
Example command
$ oc -n default get broker default
Exemple de sortie
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found
5.4.3.5. Création d'un courtier à l'aide de la console web
Une fois Knative Eventing installé sur votre cluster, vous pouvez créer un broker 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 un broker.
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
- Dans la perspective Developer, naviguez vers Add → Broker. La page Broker s'affiche.
-
Facultatif. Mettez à jour le site Name du courtier. Si vous ne mettez pas à jour le nom, le courtier généré s'appelle
default
. - Cliquez sur Create.
Vérification
Vous pouvez vérifier que le courtier a été créé en affichant les composants du courtier dans la page Topology.
- Dans la perspective Developer, naviguez jusqu'à Topology.
Consultez les composants
mt-broker-ingress
,mt-broker-filter
, etmt-broker-controller
.
5.4.3.6. Création d'un courtier en utilisant la perspective de l'administrateur
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. Les événements sont envoyés d'une source d'événements à un broker sous la forme d'une requête HTTP POST
. Une fois que les événements sont entrés dans le courtier, ils peuvent être filtrés par les attributs CloudEvent à l'aide de déclencheurs, puis envoyés sous la forme d'une requête HTTP POST
à un puits d'événements.

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 Broker. Vous serez dirigé vers la page Create Broker.
- En option : Modifier la configuration YAML du courtier.
- Cliquez sur Create.
5.4.3.7. Prochaines étapes
- Configurez les paramètres de livraison d'événements qui sont appliqués dans les cas où un événement n'est pas livré à un récepteur d'événements. Voir Exemples de configuration des paramètres de livraison d'événements.
5.4.3.8. Ressources supplémentaires
5.4.4. Configuration du canal d'accompagnement du courtier par défaut
Si vous utilisez un courtier basé sur des canaux, vous pouvez définir le type de canal de soutien par défaut pour le courtier sur InMemoryChannel
ou KafkaChannel
.
Conditions préalables
- Vous disposez de droits d'administrateur sur OpenShift Container Platform.
- Vous avez installé OpenShift Serverless Operator et Knative Eventing sur votre cluster.
-
Vous avez installé le CLI OpenShift (
oc
). -
Si vous souhaitez utiliser les canaux Apache Kafka comme type de canal de sauvegarde par défaut, vous devez également installer le CR
KnativeKafka
sur votre cluster.
Procédure
Modifier la ressource personnalisée (CR)
KnativeEventing
pour ajouter des détails de configuration pour la carte de configurationconfig-br-default-channel
:apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: 1 config-br-default-channel: channel-template-spec: | apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel 2 spec: numPartitions: 6 3 replicationFactor: 3 4
- 1
- Dans
spec.config
, vous pouvez spécifier les cartes de configuration pour lesquelles vous souhaitez ajouter des configurations modifiées. - 2
- La configuration du type de canal de sauvegarde par défaut. Dans cet exemple, l'implémentation du canal par défaut pour le cluster est
KafkaChannel
. - 3
- Le nombre de partitions pour le canal Kafka qui soutient le courtier.
- 4
- Le facteur de réplication pour le canal Kafka qui soutient le courtier.
Appliquer la mise à jour de
KnativeEventing
CR :$ oc apply -f <filename>
5.4.5. Configuration de la classe de courtier par défaut
Vous pouvez utiliser la carte de configuration config-br-defaults
pour spécifier les paramètres de la classe de courtier par défaut pour Knative Eventing. Vous pouvez spécifier la classe de courtier par défaut pour l'ensemble du cluster ou pour un ou plusieurs espaces de noms. Actuellement, les types de courtiers MTChannelBasedBroker
et Kafka
sont pris en charge.
Conditions préalables
- Vous disposez de droits d'administrateur sur OpenShift Container Platform.
- Vous avez installé OpenShift Serverless Operator et Knative Eventing sur votre cluster.
-
Si vous souhaitez utiliser le courtier Knative pour Apache Kafka comme courtier par défaut, vous devez également installer le CR
KnativeKafka
sur votre cluster.
Procédure
Modifier la ressource personnalisée
KnativeEventing
pour ajouter des détails de configuration pour la carte de configurationconfig-br-defaults
:apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: defaultBrokerClass: Kafka 1 config: 2 config-br-defaults: 3 default-br-config: | clusterDefault: 4 brokerClass: Kafka apiVersion: v1 kind: ConfigMap name: kafka-broker-config 5 namespace: knative-eventing 6 namespaceDefaults: 7 my-namespace: brokerClass: MTChannelBasedBroker apiVersion: v1 kind: ConfigMap name: config-br-default-channel 8 namespace: knative-eventing 9 ...
- 1
- La classe de courtier par défaut pour Knative Eventing.
- 2
- Dans
spec.config
, vous pouvez spécifier les cartes de configuration pour lesquelles vous souhaitez ajouter des configurations modifiées. - 3
- La carte de configuration
config-br-defaults
spécifie les paramètres par défaut pour tout courtier qui ne spécifie pas de paramètresspec.config
ou de classe de courtier. - 4
- La configuration de la classe de courtage par défaut à l'échelle du cluster. Dans cet exemple, l'implémentation de la classe de courtage par défaut pour le cluster est
Kafka
. - 5
- La carte de configuration
kafka-broker-config
spécifie les paramètres par défaut du courtier Kafka. Voir "Configurer le courtier Knative pour les paramètres Apache Kafka" dans la section "Ressources supplémentaires". - 6
- L'espace de noms dans lequel la carte de configuration
kafka-broker-config
existe. - 7
- La configuration de la classe de courtage par défaut de l'espace de noms. Dans cet exemple, l'implémentation de la classe de courtage par défaut pour l'espace de noms
my-namespace
estMTChannelBasedBroker
. Vous pouvez spécifier des implémentations de classe de courtage par défaut pour plusieurs espaces de noms. - 8
- La carte de configuration
config-br-default-channel
spécifie le canal d'appui par défaut du courtier. Voir "Configurer le canal d'appui par défaut du courtier" dans la section "Ressources supplémentaires". - 9
- L'espace de noms dans lequel la carte de configuration
config-br-default-channel
existe.
ImportantLa configuration d'une valeur par défaut spécifique à l'espace de nommage est prioritaire sur les paramètres applicables à l'ensemble du cluster.
5.4.6. Mise en œuvre d'un courtier Knative pour Apache Kafka
Pour les déploiements Knative Eventing prêts pour la production, Red Hat recommande d'utiliser l'implémentation du courtier Knative pour Apache Kafka. Le courtier est une implémentation native d'Apache Kafka du courtier Knative, qui envoie les CloudEvents directement à l'instance Kafka.
Le courtier Knative dispose d'une intégration native avec Kafka pour le stockage et l'acheminement des événements. Cela permet une meilleure intégration avec Kafka pour le modèle de courtier et de déclencheur par rapport à d'autres types de courtiers, et réduit les sauts de réseau. Les autres avantages de la mise en œuvre du courtier Knative sont les suivants :
- Garanties de livraison au moins une fois
- Livraison ordonnée des événements, basée sur l'extension de partitionnement CloudEvents
- Haute disponibilité du plan de contrôle
- Un plan de données extensible horizontalement
L'implémentation du courtier Knative pour Apache Kafka stocke les CloudEvents entrants en tant qu'enregistrements Kafka, en utilisant le mode de contenu binaire. Cela signifie que tous les attributs et extensions de CloudEvent sont mappés en tant qu'en-têtes sur l'enregistrement Kafka, tandis que la spécification data
du CloudEvent correspond à la valeur de l'enregistrement Kafka.
5.4.6.1. Création d'un courtier Apache Kafka lorsqu'il n'est pas configuré comme type de courtier par défaut
Si votre déploiement OpenShift Serverless n'est pas configuré pour utiliser le courtier Kafka comme type de courtier par défaut, vous pouvez utiliser l'une des procédures suivantes pour créer un courtier basé sur Kafka.
5.4.6.1.1. Créer un courtier Apache Kafka en utilisant YAML
La création de ressources Knative à l'aide de fichiers YAML utilise une API déclarative, qui permet de décrire des applications de manière déclarative et reproductible. Pour créer un courtier Kafka à l'aide de YAML, vous devez créer un fichier YAML qui définit un objet Broker
, 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 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 avez installé l'OpenShift CLI (
oc
).
Procédure
Créer un courtier basé sur Kafka sous la forme d'un fichier YAML :
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka 1 name: example-kafka-broker spec: config: apiVersion: v1 kind: ConfigMap name: kafka-broker-config 2 namespace: knative-eventing
- 1
- La classe du courtier. Si elle n'est pas spécifiée, les courtiers utilisent la classe par défaut, telle qu'elle est configurée par les administrateurs du cluster. Pour utiliser le courtier Kafka, cette valeur doit être
Kafka
. - 2
- La carte de configuration par défaut des courtiers Knative pour Apache Kafka. Cette carte de configuration est créée lorsque la fonctionnalité de courtier Kafka est activée sur le cluster par un administrateur de cluster.
Appliquer le fichier YAML du courtier basé sur Kafka :
$ oc apply -f <filename>
5.4.6.1.2. Création d'un courtier Apache Kafka qui utilise un sujet Kafka géré en externe
Si vous souhaitez utiliser un courtier Kafka sans lui permettre de créer son propre sujet interne, vous pouvez utiliser un sujet Kafka géré de manière externe. Pour ce faire, vous devez créer un objet Kafka Broker
qui utilise l'annotation kafka.eventing.knative.dev/external.topic
.
Conditions préalables
-
OpenShift Serverless Operator, Knative Eventing et la ressource personnalisée
KnativeKafka
sont installés sur votre cluster OpenShift Container Platform. - Vous avez accès à une instance Kafka telle que Red Hat AMQ Streams, et avez créé un sujet Kafka.
- 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
Créer un courtier basé sur Kafka sous la forme d'un fichier YAML :
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka 1 kafka.eventing.knative.dev/external.topic: <topic_name> 2 ...
Appliquer le fichier YAML du courtier basé sur Kafka :
$ oc apply -f <filename>
5.4.6.1.3. Mise en œuvre d'un courtier Knative pour Apache Kafka avec un plan de données isolé
L'implémentation de Knative Broker pour Apache Kafka avec un plan de données isolé est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
L'implémentation de Knative Broker pour Apache Kafka comporte 2 plans :
- Control plane
- Il s'agit de contrôleurs qui communiquent avec l'API Kubernetes, surveillent les objets personnalisés et gèrent le plan de données.
- Plan de données
-
L'ensemble des composants qui écoutent les événements entrants, communiquent avec Apache Kafka et envoient des événements aux puits d'événements. L'implémentation Knative Broker pour le plan de données Apache Kafka est l'endroit où les événements circulent. L'implémentation consiste en des déploiements
kafka-broker-receiver
etkafka-broker-dispatcher
.
Lorsque vous configurez une classe Broker de Kafka
, l'implémentation Knative Broker pour Apache Kafka utilise un plan de données partagé. Cela signifie que les déploiements kafka-broker-receiver
et kafka-broker-dispatcher
dans l'espace de noms knative-eventing
sont utilisés pour tous les Brokers Apache Kafka dans le cluster.
Cependant, lorsque vous configurez une classe Broker de KafkaNamespaced
, le contrôleur de courtier Apache Kafka crée un nouveau plan de données pour chaque espace de noms dans lequel un courtier existe. Ce plan de données est utilisé par tous les courtiers KafkaNamespaced
dans cet espace de noms. Cela permet d'isoler les plans de données, de sorte que les déploiements kafka-broker-receiver
et kafka-broker-dispatcher
dans l'espace de noms de l'utilisateur ne sont utilisés que pour le courtier de cet espace de noms.
En raison de la séparation des plans de données, cette fonction de sécurité crée plus de déploiements et utilise plus de ressources. À moins que vous n'ayez de telles exigences en matière d'isolation, utilisez un regular Broker avec une classe de Kafka
.
5.4.6.1.4. Créer un courtier Knative pour Apache Kafka qui utilise un plan de données isolé
L'implémentation de Knative Broker pour Apache Kafka avec un plan de données isolé est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
Pour créer un courtier KafkaNamespaced
, vous devez définir l'annotation eventing.knative.dev/broker.class
en KafkaNamespaced
.
Conditions préalables
-
OpenShift Serverless Operator, Knative Eventing et la ressource personnalisée
KnativeKafka
sont installés sur votre cluster OpenShift Container Platform. - Vous avez accès à une instance Apache Kafka, telle que Red Hat AMQ Streams, et avez créé un sujet Kafka.
- Vous avez créé un projet, ou avez accès à un projet, avec les rôles et permissions appropriés pour créer des applications et autres charges de travail dans OpenShift Container Platform.
-
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Créer un courtier basé sur Apache Kafka en utilisant un fichier YAML :
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: KafkaNamespaced 1 name: default namespace: my-namespace 2 spec: config: apiVersion: v1 kind: ConfigMap name: my-config 3 ...
Appliquer le fichier YAML du courtier basé sur Apache Kafka :
$ oc apply -f <filename>
L'objet ConfigMap
dans spec.config
doit être dans le même espace de noms que l'objet Broker
:
apiVersion: v1 kind: ConfigMap metadata: name: my-config namespace: my-namespace data: ...
Après la création du premier objet Broker
avec la classe KafkaNamespaced
, les déploiements kafka-broker-receiver
et kafka-broker-dispatcher
sont créés dans l'espace de noms. Par la suite, tous les courtiers de la classe KafkaNamespaced
dans le même espace de noms utiliseront le même plan de données. Si aucun courtier de la classe KafkaNamespaced
n'existe dans l'espace de noms, le plan de données de l'espace de noms est supprimé.
5.4.6.2. Configuration des paramètres du courtier Apache Kafka
Vous pouvez configurer le facteur de réplication, les serveurs d'amorçage et le nombre de partitions de sujets pour un courtier Kafka, en créant une carte de configuration et en y faisant référence dans l'objet Kafka Broker
.
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
custom resource (CR) sont installés sur votre cluster OpenShift Container Platform. - Vous avez créé un projet ou avez accès à un projet qui a les rôles et les 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
Modifiez la carte de configuration
kafka-broker-config
ou créez votre propre carte de configuration qui contient la configuration suivante :apiVersion: v1 kind: ConfigMap metadata: name: <config_map_name> 1 namespace: <namespace> 2 data: default.topic.partitions: <integer> 3 default.topic.replication.factor: <integer> 4 bootstrap.servers: <list_of_servers> 5
- 1
- Le nom de la carte de configuration.
- 2
- L'espace de noms dans lequel la carte de configuration existe.
- 3
- Le nombre de partitions de sujets pour le courtier Kafka. Cela permet de contrôler la vitesse à laquelle les événements peuvent être envoyés au courtier. Un nombre plus élevé de partitions nécessite davantage de ressources informatiques.
- 4
- Le facteur de réplication des messages thématiques. Cela permet d'éviter les pertes de données. Un facteur de réplication plus élevé nécessite davantage de ressources informatiques et de stockage.
- 5
- Une liste de serveurs d'amorçage séparés par des virgules. Cela peut être à l'intérieur ou à l'extérieur du cluster OpenShift Container Platform, et c'est une liste de clusters Kafka que le courtier reçoit des événements de et envoie des événements à.
ImportantLa valeur
default.topic.replication.factor
doit être inférieure ou égale au nombre d'instances de courtiers Kafka dans votre cluster. Par exemple, si vous n'avez qu'un seul courtier Kafka, la valeurdefault.topic.replication.factor
ne doit pas être supérieure à"1"
.Exemple de carte de configuration du courtier Kafka
apiVersion: v1 kind: ConfigMap metadata: name: kafka-broker-config namespace: knative-eventing data: default.topic.partitions: "10" default.topic.replication.factor: "3" bootstrap.servers: "my-cluster-kafka-bootstrap.kafka:9092"
Appliquer la carte de configuration :
oc apply -f <config_map_filename> $ oc apply -f <config_map_filename>
Spécifiez la carte de configuration pour l'objet Kafka
Broker
:Exemple d'objet Broker
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: <broker_name> 1 namespace: <namespace> 2 annotations: eventing.knative.dev/broker.class: Kafka 3 spec: config: apiVersion: v1 kind: ConfigMap name: <config_map_name> 4 namespace: <namespace> 5 ...
- 1
- Le nom du courtier.
- 2
- L'espace de noms dans lequel le courtier existe.
- 3
- L'annotation de la classe du courtier. Dans cet exemple, le courtier est un courtier Kafka qui utilise la valeur de classe
Kafka
. - 4
- Le nom de la carte de configuration.
- 5
- L'espace de noms dans lequel la carte de configuration existe.
Appliquer le courtier :
oc apply -f <broker_filename>
5.4.6.3. Configuration de la sécurité pour l'implémentation du courtier Knative pour Apache Kafka
Les clusters Kafka sont généralement sécurisés en utilisant les méthodes d'authentification TLS ou SASL. Vous pouvez configurer un courtier ou un canal Kafka pour travailler avec un cluster Red Hat AMQ Streams protégé en utilisant TLS ou SASL.
Red Hat recommande d'activer à la fois SASL et TLS.
5.4.6.3.1. Configuration de l'authentification TLS pour les brokers Apache Kafka
Transport Layer Security (TLS) est utilisé par les clients et les serveurs Apache Kafka pour chiffrer le trafic entre Knative et Kafka, ainsi que pour l'authentification. TLS est la seule méthode de cryptage du trafic prise en charge par l'implémentation du courtier Knative pour Apache Kafka.
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 certificat d'autorité de certification pour le cluster Kafka stocké dans un fichier
.pem
. -
Vous disposez d'un certificat client pour le cluster Kafka et d'une clé stockée sous forme de fichiers
.pem
. -
Installez le CLI OpenShift (
oc
).
Procédure
Créez les fichiers de certificat en tant que secret dans l'espace de noms
knative-eventing
:$ oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem
ImportantUtilisez les noms de clés
ca.crt
,user.crt
, etuser.key
. Ne les modifiez pas.Modifiez le CR
KnativeKafka
et ajoutez une référence à votre secret dans la spécificationbroker
:apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: broker: enabled: true defaultConfig: authSecretName: <secret_name> ...
5.4.6.3.2. Configuration de l'authentification SASL pour les brokers 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. -
Installez le CLI OpenShift (
oc
).
Procédure
Créez les fichiers de certificat en tant que secret dans l'espace de noms
knative-eventing
:$ oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SASL_SSL \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=user="my-sasl-user"
-
Utilisez les noms de clés
ca.crt
,password
, etsasl.mechanism
. Ne les modifiez pas. Si vous souhaitez utiliser SASL avec des certificats d'autorité de certification publique, vous devez utiliser l'indicateur
tls.enabled=true
, plutôt que l'argumentca.crt
, lors de la création du secret. Par exemple :$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
-
Utilisez les noms de clés
Modifiez le CR
KnativeKafka
et ajoutez une référence à votre secret dans la spécificationbroker
:apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: broker: enabled: true defaultConfig: authSecretName: <secret_name> ...
5.4.6.4. Ressources supplémentaires
5.4.7. Gestion des courtiers
Le CLI de Knative (kn
) fournit des commandes qui peuvent être utilisées pour décrire et répertorier les courtiers existants.
5.4.7.1. Lister les courtiers existants en utilisant le CLI Knative
L'utilisation de la CLI Knative (kn
) pour lister les courtiers offre une interface utilisateur simplifiée et intuitive. Vous pouvez utiliser la commande kn broker list
pour lister les courtiers existants dans votre cluster en utilisant la CLI Knative.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
Vous avez installé le CLI Knative (
kn
).
Procédure
Dressez la liste de tous les courtiers existants :
$ kn broker list
Exemple de sortie
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
5.4.7.2. Décrire un courtier existant en utilisant le CLI Knative
L'utilisation de la CLI Knative (kn
) pour décrire les courtiers offre une interface utilisateur simplifiée et intuitive. Vous pouvez utiliser la commande kn broker describe
pour imprimer des informations sur les courtiers existants dans votre cluster en utilisant la CLI Knative.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
Vous avez installé le CLI Knative (
kn
).
Procédure
Décrire un courtier existant :
$ kn broker describe <nom_du_courtier>
Exemple de commande utilisant le courtier par défaut
$ kn broker describe default
Exemple de sortie
Name: default Namespace: default Annotations: eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ... Age: 22s Address: URL: http://broker-ingress.knative-eventing.svc.cluster.local/default/default Conditions: OK TYPE AGE REASON ++ Ready 22s ++ Addressable 22s ++ FilterReady 22s ++ IngressReady 22s ++ TriggerChannelReady 22s
5.4.8. Livraison de l'événement
Vous pouvez configurer les paramètres de distribution des événements qui sont appliqués dans les cas où un événement ne parvient pas à être distribué à un récepteur d'événements. La configuration des paramètres d'acheminement des événements, y compris d'un puits de lettres mortes, garantit que les événements qui ne sont pas acheminés vers un puits d'événements sont réessayés. Dans le cas contraire, les événements non livrés sont abandonnés.
5.4.8.1. Modèles de comportement de livraison d'événements pour les canaux et les courtiers
Les différents types de canaux et de courtiers ont leurs propres modèles de comportement qui sont suivis pour la livraison des événements.
5.4.8.1.1. Canaux et courtiers Knative pour Apache Kafka
Si un événement est transmis avec succès à un canal Kafka ou à un récepteur de courtier, le récepteur répond par un code d'état 202
, ce qui signifie que l'événement a été stocké en toute sécurité dans un sujet Kafka et qu'il n'est pas perdu.
Si le récepteur répond par un autre code d'état, l'événement n'est pas stocké en toute sécurité et l'utilisateur doit prendre des mesures pour résoudre le problème.
5.4.8.2. Paramètres de livraison d'événements configurables
Les paramètres suivants peuvent être configurés pour l'envoi d'événements :
- Lettre morte pour l'évier
-
Vous pouvez configurer le paramètre de livraison
deadLetterSink
de sorte que si un événement n'est pas livré, il soit stocké dans le puits d'événements spécifié. Les événements non livrés qui ne sont pas stockés dans un puits de lettres mortes sont abandonnés. Le puits d'événements peut être n'importe quel objet adressable conforme au contrat de puits d'événements Knative, tel qu'un service Knative, un service Kubernetes ou un URI. - Tentatives
-
Vous pouvez définir un nombre minimum de tentatives de livraison avant que l'événement ne soit envoyé au puits de lettres mortes, en configurant le paramètre de livraison
retry
avec une valeur entière. - Délai de recul
-
Vous pouvez définir le paramètre de livraison
backoffDelay
pour spécifier le délai avant qu'une nouvelle tentative de livraison d'un événement ne soit effectuée après un échec. La durée du paramètrebackoffDelay
est spécifiée au format ISO 8601. Par exemple,PT1S
indique un délai de 1 seconde. - Reculer dans la politique
-
The
backoffPolicy
delivery parameter can be used to specify the retry back off policy. The policy can be specified as eitherlinear
orexponential
. When using thelinear
back off policy, the back off delay is equal tobackoffDelay * <numberOfRetries>
. When using theexponential
backoff policy, the back off delay is equal tobackoffDelay*2^<numberOfRetries>
.
5.4.8.3. Exemples de configuration des paramètres de distribution des événements
Vous pouvez configurer les paramètres de livraison d'événements pour les objets Broker
, Trigger
, Channel
et Subscription
. Si vous configurez des paramètres de distribution d'événements pour un courtier ou un canal, ces paramètres sont propagés aux déclencheurs ou aux abonnements créés pour ces objets. Vous pouvez également définir des paramètres de livraison d'événements pour les déclencheurs ou les abonnements afin de remplacer les paramètres du courtier ou du canal.
Exemple d'objet Broker
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: ... spec: delivery: deadLetterSink: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
Exemple d'objet Trigger
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: broker: <broker_name> delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
Exemple d'objet Channel
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: ... spec: delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
Exemple d'objet Subscription
apiVersion: messaging.knative.dev/v1 kind: Subscription metadata: ... spec: channel: apiVersion: messaging.knative.dev/v1 kind: Channel name: <channel_name> delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...
5.4.8.4. Configuration de l'ordre de livraison des événements pour les déclencheurs
Si vous utilisez un courtier Kafka, vous pouvez configurer l'ordre de livraison des événements des déclencheurs aux puits d'événements.
Conditions préalables
- OpenShift Serverless Operator, Knative Eventing et Knative broker implementation for Apache Kafka sont installés sur votre cluster OpenShift Container Platform.
- L'utilisation du courtier Kafka est activée sur votre cluster et vous avez créé un courtier Kafka.
- 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é le CLI OpenShift (
oc
).
Procédure
Créer ou modifier un objet
Trigger
et définir l'annotationkafka.eventing.knative.dev/delivery.order
:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> annotations: kafka.eventing.knative.dev/delivery.order: ordered ...
Les garanties de livraison aux consommateurs prises en charge sont les suivantes :
unordered
- Un consommateur non ordonné est un consommateur non bloquant qui délivre des messages non ordonnés, tout en préservant une bonne gestion des décalages.
ordered
Un consommateur ordonné est un consommateur bloquant par partition qui attend une réponse positive de l'abonné CloudEvent avant de délivrer le message suivant de la partition.
La garantie de commande par défaut est
unordered
.
Appliquer l'objet
Trigger
:$ oc apply -f <filename>
5.5. Déclencheurs
5.5.1. Vue d'ensemble des déclencheurs
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. Les événements sont envoyés d'une source d'événements à un broker sous la forme d'une requête HTTP POST
. Une fois que les événements sont entrés dans le courtier, ils peuvent être filtrés par les attributs CloudEvent à l'aide de déclencheurs, puis envoyés sous la forme d'une requête HTTP POST
à un puits d'événements.

Si vous utilisez un courtier Knative pour Apache Kafka, vous pouvez configurer l'ordre de livraison des événements des déclencheurs aux puits d'événements. Voir Configuration de l'ordre de livraison des événements pour les déclencheurs.
5.5.1.1. Configuration de l'ordre de livraison des événements pour les déclencheurs
Si vous utilisez un courtier Kafka, vous pouvez configurer l'ordre de livraison des événements des déclencheurs aux puits d'événements.
Conditions préalables
- OpenShift Serverless Operator, Knative Eventing et Knative broker implementation for Apache Kafka sont installés sur votre cluster OpenShift Container Platform.
- L'utilisation du courtier Kafka est activée sur votre cluster et vous avez créé un courtier Kafka.
- 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é le CLI OpenShift (
oc
).
Procédure
Créer ou modifier un objet
Trigger
et définir l'annotationkafka.eventing.knative.dev/delivery.order
:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> annotations: kafka.eventing.knative.dev/delivery.order: ordered ...
Les garanties de livraison aux consommateurs prises en charge sont les suivantes :
unordered
- Un consommateur non ordonné est un consommateur non bloquant qui délivre des messages non ordonnés, tout en préservant une bonne gestion des décalages.
ordered
Un consommateur ordonné est un consommateur bloquant par partition qui attend une réponse positive de l'abonné CloudEvent avant de délivrer le message suivant de la partition.
La garantie de commande par défaut est
unordered
.
Appliquer l'objet
Trigger
:$ oc apply -f <filename>
5.5.1.2. Prochaines étapes
- Configurez les paramètres de livraison d'événements qui sont appliqués dans les cas où un événement n'est pas livré à un récepteur d'événements. Voir Exemples de configuration des paramètres de livraison d'événements.
5.5.2. Création de déclencheurs
Les courtiers peuvent être utilisés en combinaison avec des déclencheurs pour transmettre des événements d'une source d'événements à un puits d'événements. Les événements sont envoyés d'une source d'événements à un broker sous la forme d'une requête HTTP POST
. Une fois que les événements sont entrés dans le courtier, ils peuvent être filtrés par les attributs CloudEvent à l'aide de déclencheurs, puis envoyés sous la forme d'une requête HTTP POST
à un puits d'événements.

5.5.2.1. Création d'un déclencheur à l'aide de la perspective de l'administrateur
L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer un déclencheur. Une fois que Knative Eventing est installé sur votre cluster et que vous avez créé un broker, vous pouvez créer un trigger en utilisant la console web.
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.
- Vous avez créé un courtier Knative.
- Vous avez créé un service Knative à utiliser en tant qu'abonné.
Procédure
- Dans la perspective Administrator de la console web OpenShift Container Platform, naviguez vers Serverless → Eventing.
-
Dans l'onglet Broker, sélectionnez le menu Options
pour le courtier auquel vous voulez ajouter un déclencheur.
- Cliquez sur Add Trigger dans la liste.
- Dans la boîte de dialogue Add Trigger, sélectionnez un Subscriber pour le déclencheur. L'abonné est le service Knative qui recevra les événements du courtier.
- Cliquez sur Add.
5.5.2.2. Création d'un déclencheur à l'aide de la perspective du développeur
L'utilisation de la console web d'OpenShift Container Platform offre une interface utilisateur rationalisée et intuitive pour créer un déclencheur. Une fois que Knative Eventing est installé sur votre cluster et que vous avez créé un broker, vous pouvez créer un trigger en utilisant la console web.
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.
- 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 courtier et un service Knative ou un autre puits d'événements pour vous connecter au déclencheur.
Procédure
- Dans la perspective Developer, naviguez jusqu'à la page Topology.
- Survolez le courtier pour lequel vous souhaitez créer un déclencheur et faites glisser la flèche. L'option Add Trigger s'affiche.
- Cliquez sur Add Trigger.
- Sélectionnez votre évier dans la liste Subscriber.
- Cliquez sur Add.
Vérification
- Une fois l'abonnement créé, vous pouvez le visualiser sur la page Topology, où il est représenté par une ligne qui relie le courtier au puits d'événements.
Suppression d'un déclencheur
- Dans la perspective Developer, naviguez jusqu'à la page Topology.
- Cliquez sur le déclencheur que vous souhaitez supprimer.
- Dans le menu contextuel de Actions, sélectionnez Delete Trigger.
5.5.2.3. Création d'un déclencheur à l'aide de la CLI Knative
Vous pouvez utiliser la commande kn trigger create
pour créer un déclencheur.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
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.
Procédure
Créer un déclencheur :
$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>
Vous pouvez également créer un déclencheur et créer simultanément le courtier
default
à l'aide de l'injection de courtier :kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>
Par défaut, les déclencheurs transmettent tous les événements envoyés à un courtier aux puits qui sont abonnés à ce courtier. L'utilisation de l'attribut
--filter
pour les déclencheurs vous permet de filtrer les événements d'un courtier, de sorte que les abonnés ne reçoivent qu'un sous-ensemble d'événements en fonction des critères que vous avez définis.
5.5.3. Liste des déclencheurs à partir de la ligne de commande
L'utilisation du CLI Knative (kn
) pour lister les déclencheurs offre une interface utilisateur rationalisée et intuitive.
5.5.3.1. Lister les déclencheurs en utilisant le CLI Knative
Vous pouvez utiliser la commande kn trigger list
pour dresser la liste des déclencheurs existants dans votre cluster.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
Vous avez installé le CLI Knative (
kn
).
Procédure
Imprimer une liste des déclencheurs disponibles :
$ kn trigger list
Exemple de sortie
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 True
Facultatif : Imprimer une liste de déclencheurs au format JSON :
$ kn trigger list -o json
5.5.4. Décrire les déclencheurs à partir de la ligne de commande
L'utilisation du CLI Knative (kn
) pour décrire les déclencheurs offre une interface utilisateur rationalisée et intuitive.
5.5.4.1. Décrire un déclencheur à l'aide de la CLI Knative
Vous pouvez utiliser la commande kn trigger describe
pour imprimer des informations sur les déclencheurs existants dans votre cluster en utilisant le CLI Knative.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
Vous avez installé le CLI Knative (
kn
). - Vous avez créé un déclencheur.
Procédure
Entrez la commande :
$ kn trigger describe <trigger_name>
Exemple de sortie
Name: ping Namespace: default Labels: eventing.knative.dev/broker=default Annotations: eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin Age: 2m Broker: default Filter: type: dev.knative.event Sink: Name: edisplay Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 2m ++ BrokerReady 2m ++ DependencyReady 2m ++ Subscribed 2m ++ SubscriberResolved 2m
5.5.5. Connexion d'un déclencheur à un puits
Vous pouvez connecter un déclencheur à un puits, de sorte que les événements provenant d'un courtier soient filtrés avant d'être envoyés au puits. Un puits connecté à un déclencheur est configuré en tant que subscriber
dans la spécification des ressources de l'objet Trigger
.
Exemple d'un objet Trigger
connecté à un puits Apache Kafka
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> 1 spec: ... subscriber: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <kafka_sink_name> 2
5.5.6. Filtrer les déclencheurs à partir de la ligne de commande
L'utilisation de la CLI Knative (kn
) pour filtrer les événements à l'aide de déclencheurs offre une interface utilisateur simplifiée et intuitive. Vous pouvez utiliser la commande kn trigger create
, ainsi que les drapeaux appropriés, pour filtrer les événements à l'aide de déclencheurs.
5.5.6.1. Filtrer les événements avec des déclencheurs en utilisant le CLI Knative
Dans l'exemple de déclenchement suivant, seuls les événements ayant l'attribut type: dev.knative.samples.helloworld
sont envoyés au récepteur d'événements :
$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
Vous pouvez également filtrer les événements en utilisant plusieurs attributs. L'exemple suivant montre comment filtrer les événements à l'aide des attributs type, source et extension :
$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \ --filter type=dev.knative.samples.helloworld \ --filter source=dev.knative.samples/helloworldsource \ --filter myextension=my-extension-value
5.5.7. Mise à jour des déclencheurs à partir de la ligne de commande
L'utilisation du CLI Knative (kn
) pour mettre à jour les déclencheurs offre une interface utilisateur rationalisée et intuitive.
5.5.7.1. Mise à jour d'un déclencheur à l'aide de la CLI Knative
Vous pouvez utiliser la commande kn trigger update
avec certains drapeaux pour mettre à jour les attributs d'un déclencheur.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
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.
Procédure
Mettre à jour un déclencheur :
kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags] (en anglais)
Vous pouvez mettre à jour un déclencheur pour filtrer les attributs d'événement exacts qui correspondent aux événements entrants. Par exemple, en utilisant l'attribut
type
:$ kn trigger update <trigger_name> --filter type=knative.dev.event
Vous pouvez supprimer un attribut de filtre d'un déclencheur. Par exemple, vous pouvez supprimer l'attribut de filtre avec la clé
type
:kn trigger update <trigger_name> --filter type-
Vous pouvez utiliser le paramètre
--sink
pour modifier le puits d'événement d'un déclencheur :$ kn trigger update <trigger_name> --sink ksvc:my-event-sink
5.5.8. Suppression de déclencheurs à partir de la ligne de commande
L'utilisation de la CLI Knative (kn
) pour supprimer un déclencheur offre une interface utilisateur rationalisée et intuitive.
5.5.8.1. Suppression d'un déclencheur à l'aide de la CLI Knative
Vous pouvez utiliser la commande kn trigger delete
pour supprimer un déclencheur.
Conditions préalables
- OpenShift Serverless Operator et Knative Eventing sont installés sur votre cluster OpenShift Container Platform.
-
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.
Procédure
Supprimer un déclencheur :
kn trigger delete <trigger_name>
Vérification
Dresser la liste des déclencheurs existants :
$ kn trigger list
Vérifiez que le déclencheur n'existe plus :
Exemple de sortie
No triggers found.
5.6. Canaux
5.6.1. Chaînes et abonnements
Les canaux sont des ressources personnalisées qui définissent une couche unique de transmission et de persistance des événements. Une fois que des événements ont été envoyés à un canal à partir d'une source ou d'un producteur d'événements, ces événements peuvent être envoyés à plusieurs services Knative ou à d'autres puits à l'aide d'un abonnement.

Vous pouvez créer des canaux en instanciant un objet Channel
pris en charge et configurer les tentatives de re-livraison en modifiant la spécification delivery
dans un objet Subscription
.
Après avoir créé un objet Channel
, un webhook d'admission à la mutation ajoute un ensemble de propriétés spec.channelTemplate
pour l'objet Channel
en fonction de l'implémentation du canal par défaut. Par exemple, pour une implémentation par défaut de InMemoryChannel
, l'objet Channel
se présente comme suit :
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: default spec: channelTemplate: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel
Le contrôleur de canal crée ensuite l'instance de canal d'appui sur la base de la configuration spec.channelTemplate
.
Les propriétés de spec.channelTemplate
ne peuvent pas être modifiées après la création, car elles sont définies par le mécanisme de canal par défaut et non par l'utilisateur.
Lorsque ce mécanisme est utilisé dans l'exemple précédent, deux objets sont créés : un canal générique de soutien et un canal InMemoryChannel
. Si vous utilisez une implémentation de canal par défaut différente, le canal InMemoryChannel
est remplacé par un canal spécifique à votre implémentation. Par exemple, avec le courtier Knative pour Apache Kafka, le canal KafkaChannel
est créé.
Le canal d'appui agit comme un proxy qui copie ses abonnements sur l'objet canal créé par l'utilisateur et définit le statut de l'objet canal créé par l'utilisateur pour refléter le statut du canal d'appui.
5.6.1.1. Types de mise en œuvre des canaux
InMemoryChannel
et KafkaChannel
peuvent être utilisés avec OpenShift Serverless pour le développement.
Les limitations des canaux de type InMemoryChannel
sont les suivantes :
- Aucune persistance des événements n'est disponible. Si un pod tombe en panne, les événements relatifs à ce pod sont perdus.
-
InMemoryChannel
les canaux n'implémentent pas l'ordre des événements, de sorte que deux événements reçus simultanément dans le canal peuvent être transmis à un abonné dans n'importe quel ordre. -
Si un abonné rejette un événement, il n'y a pas de tentative de re-livraison par défaut. Vous pouvez configurer les tentatives de re-livraison en modifiant la spécification
delivery
dans l'objetSubscription
.
5.6.2. Création de canaux
Les canaux sont des ressources personnalisées qui définissent une couche unique de transmission et de persistance des événements. Une fois que des événements ont été envoyés à un canal à partir d'une source ou d'un producteur d'événements, ces événements peuvent être envoyés à plusieurs services Knative ou à d'autres puits à l'aide d'un abonnement.

Vous pouvez créer des canaux en instanciant un objet Channel
pris en charge et configurer les tentatives de re-livraison en modifiant la spécification delivery
dans un objet Subscription
.