Déployer des applications sur Azure Red Hat OpenShift à l’aide d’OpenShift serverless
Dans cet article, vous déployez une application sur un cluster Azure Red Hat OpenShift avec OpenShift serverless. OpenShift serverless aide les développeurs à déployer et à exécuter des applications qui connaissent ensuite un scale-up ou sont mises à l’échelle à zéro à la demande. Cela élimine la consommation de ressources lorsqu’elles ne sont pas utilisées.
Le code d'application peut être empaqueté dans un conteneur avec les runtimes appropriés. Les fonctionnalités serverless démarrent les conteneurs d’applications lorsqu’ils sont déclenchés par un événement. Vous pouvez déclencher des applications via différents événements : à partir de vos propres applications, de plusieurs fournisseurs de services cloud, de systèmes SaaS (Software as a Service) et d’autres services.
Vous pouvez utiliser des fonctionnalités d’interface OpenShift intégrées pour gérer tous les aspects du déploiement de conteneurs serverless. Les développeurs peuvent identifier visuellement les événements qui conduisent au lancement des applications conteneurisées. Il existe également plusieurs façons de modifier les paramètres d’événement. Les applications OpenShift serverless peuvent être intégrées à d’autres services OpenShift, tels que les pipelines OpenShift, le maillage de service et la surveillance. Cela fournit une expérience complète de développement et de déploiement d’applications serverless.
Avant de commencer
Créer un cluster
Suivez le tutoriel pour Créer un cluster Azure Red Hat OpenShift. Si vous choisissez d’installer et d’utiliser l’interface de ligne de commande (CLI) localement, ce tutoriel nécessite d’utiliser Azure CLI version 2.6.0 ou ultérieure. Exécutez az --version
pour rechercher votre version actuelle. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Se connecter au cluster
Pour gérer un cluster Azure Red Hat OpenShift, vous devez utiliser oc, le client de ligne de commande OpenShift.
Remarque
Nous vous recommandons d’installer la ligne de commande OpenShift sur Azure Cloud Shell et de l’utiliser pour toutes les opérations de ligne de commande de cet article. Ouvrez votre interpréteur de commandes à partir de shell.azure.com ou en cliquant sur le lien suivant :
Suivez le tutoriel pour installer votre interface CLI, pour récupérer vos informations d’identification du cluster et vous connecter au cluster à l’aide de la console web et de l’interface CLI OpenShift.
Une fois que vous êtes connecté, vous devriez voir un message indiquant que vous utilisez le projet default
.
Login successful.
You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
Installer l’interface de ligne de commande Knative (kn)
Téléchargez la dernière version de l’interface de ligne de commande (CLI) appropriée pour votre machine, à partir de https://github.com/knative/client/releases/
Si vous exécutez des commandes sur Azure Cloud Shell, téléchargez la dernière version de l’interface CLI Knative pour Linux.
cd ~
wget https://github.com/knative/client/releases/download/v0.22.0/kn-linux-amd64
mkdir knative
chmod +x kn-linux-amd64
mv kn-linux-amd64 knative/kn
echo 'export PATH=$PATH:~/knative' >> ~/.bashrc && source ~/.bashrc
Ouvrez la console web OpenShift
Recherchez l’URL de votre console web de cluster en exécutant le script suivant :
az aro show \
--name <cluster name> \
--resource-group <resource group> \
--query "consoleProfile.url" -o tsv
L’URL doit ressembler à ce qui suit.
https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/
Ouvrez un navigateur web et ouvrez l’URL de console. Connectez-vous à l’aide des informations d’identification kubeadmin
.
Installer l’opérateur OpenShift serverless
Lorsque vous êtes connecté à la console web OpenShift, vérifiez que vous êtes en mode Administrateur. Ouvrez le hub d’opérateur et sélectionnez l’opérateur OpenShift serverless.
Ensuite, ouvrez la page d’installation de l’opérateur en sélectionnant Installer.
Choisissez le canal de mise à jour approprié à votre version de cluster Azure Red Hat OpenShift et installez l’opérateur dans l'espace de noms openshift-serverless
. Faites défiler vers le bas, puis sélectionnez Installer.
Après quelques minutes, la page d’état indique que l’opérateur est installé et prêt à l’emploi. Sélectionnez le bouton Afficher l’opérateur pour continuer.
Installer Knative Serving
Si vous utilisez Knative en amont, il est possible d’exécuter n’importe quel conteneur en mode serverless sur OpenShift serverless. Knative étend Kubernetes pour fournir un ensemble de composants qui déploient, exécutent et gèrent des applications modernes via sa méthodologie serverless.
Créer une instance de Knative Serving
Dans le coin supérieur gauche de la fenêtre, dans la liste Projet, sélectionnez knative-server
. Ensuite, dans le volet API fournies, sélectionnez Créer une instance dans la carte Knative Serving .
Dans la page Créer un service Knative , conservez toutes les valeurs par défaut. Faites défiler la page et sélectionnez le bouton Créer.
OpenShift Serverless est installé lorsque la colonne État affiche Prêt. Vous êtes maintenant prêt à créer un projet OpenShift Serverless.
Créer un projet serverless
Pour créer un projet appelé demoserverless
, exécutez la commande suivante :
oc new-project demoserverless
La sortie doit ressembler à ce qui suit :
Now using project "demoserverless" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, build a new example application in Python with the following:
oc new-app django-psql-example
Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Nous allons passer de l’affichage Administrateur à l’affichage Développeur. Accédez à votre liste de projets dans le menu de gauche, puis sélectionnez demoserverless
. Vous êtes maintenant sur la page Topologie du projet.
Déployer à l’aide de la console web
Dans la page Topologie , sélectionnez À partir de Git. Dans la page Importer à partir de Git , utilisez https://github.com/sclorg/django-ex.git
comme l’URL du dépôt Git. Un exemple d’application web est implémenté à l’aide du langage de programmation Python.
Remarque
OpenShift détecte qu’il s’agit d’un projet Python et sélectionne l’image de générateur appropriée.
Faites défiler jusqu’à Ressources et confirmez que Service Knative est sélectionné comme type de ressource à générer. Cette action crée un service Knative, un type de déploiement qui permet la mise à l’échelle OpenShift serverless à zéro lorsqu’il est inactif.
Au bas de la page, sélectionnez Créer. Cela vous permet de créer des ressources pour gérer la création et le déploiement de l’application. Vous êtes ensuite redirigé vers la vue d’ensemble de la topologie pour le projet.
La vue d’ensemble de la topologie fournit une représentation visuelle de l’application que vous avez déployée. Vous pouvez voir la structure globale de l’application.
Attendez la fin de la génération. Cette opération peut prendre quelques minutes. Une fois la génération terminée, une coche verte s’affiche dans l’angle inférieur gauche du service.
Voir la mise à l’échelle de votre application
Dans la liste Options d’affichage en haut de la vue Topologie, cliquez sur Nombre de pods. Attendez que le nombre de pods soit mis à l’échelle sur zéro pod. Cette mise à l’échelle peut prendre quelques minutes.
Sélectionnez l’icône Ouvrir l’URL dans l’angle supérieur droit du panneau Service Knative. L’application s’ouvre dans un nouvel onglet. Fermez le nouvel onglet de navigateur et revenez à la vue Topologie. Vous pouvez voir que votre application est mise à l’échelle jusqu’à un pod pour répondre à votre demande. Après quelques minutes, votre application est redimensionnée à zéro pod.
Forcer une nouvelle révision et définir la distribution du trafic
Les services Knative autorisent le mappage du trafic, ce qui signifie que les révisions d’un service peuvent être mappées à une partie allouée du trafic. A chaque mise à jour de la configuration du service, une nouvelle révision est créée. L’itinéraire du service pointe par défaut l’ensemble du trafic vers la dernière révision prête. Vous pouvez modifier ce comportement en définissant la révision qui obtient une partie du trafic. Le mappage du trafic fournit également l’option permettant de créer des URL uniques pour des révisions individuelles.
Dans la topologie créée, sélectionnez la révision affichée à l’intérieur de votre service pour en afficher les détails. Les badges sous l’anneau du pod et en haut du panneau de détails doivent être (REV)
. Dans le volet latéral, sous l’onglet Ressources, faites défiler l’écran et sélectionnez la configuration associée à votre service.
Pour forcer une mise à jour de la configuration, basculez vers l’onglet YAML et faites défiler pour remplacer la valeur de timeoutSeconds
. Remplacez la valeur par 301
. Sélectionnez Enregistrer. Dans un scénario réel, de telles mises à jour de configuration peuvent également être déclenchées par la mise à jour de la balise d’image conteneur.
Revenez à la vue Topologie. Vous verrez qu’une nouvelle révision a été déployée. Sélectionnez le service se terminant par le badge (KSVC)
, puis sélectionnez le bouton Définir la distribution du trafic . Vous devez maintenant être en mesure de diviser le trafic entre les révisions du service.
La vue Topologie vous affiche maintenant la distribution du trafic entre les révisions.
Utiliser l’interface de ligne de commande Knative (kn)
Dans les étapes précédentes, vous avez utilisé la console web OpenShift pour créer et déployer une application sur OpenShift serverless. OpenShift serverless exécutant Knative de façon sous-jacente, vous pouvez également utiliser l’interface de ligne de commande Knative (kn) pour créer des services Knative.
Remarque
Si vous n’avez pas encore installé l’interface CLI kn
, suivez les étapes de la section des conditions préalables de cet article. Assurez-vous également que vous êtes connecté à l’aide de l’interface en ligne de commande OpenShift oc
.
Nous allons utiliser une image de conteneur déjà générée à l’adresse quay.io/rhdevelopers/knative-tutorial-greeter
.
Déployer un service
Pour déployer le service, exécutez la commande suivante :
kn service create greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus \
--namespace demoserverless \
--revision-name greeter-v1
Le résultat ressemble à ce qui suit.
Creating service 'greeter' in namespace 'demoserverless':
0.044s The Route is still working to reflect the latest desired specification.
0.083s ...
0.114s Configuration "greeter" is waiting for a Revision to become ready.
10.420s ...
10.489s Ingress has not yet been reconciled.
10.582s Waiting for load balancer to be ready
10.763s Ready to serve.
Service 'greeter' created to latest revision 'greeter-v1' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Vous pouvez récupérer la liste des itinéraires dans le projet en exécutant :
kn route list
Vous obtenez la liste des itinéraires dans l’espace de noms. Ouvrez l’URL dans un navigateur web pour afficher le service déployé.
NAME URL READY
greeter http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io True
Déployer une nouvelle version du service
Déployez une nouvelle version de l’application en exécutant la commande ci-dessous, en transmettant la balise d’image :latest
et une variable d’environnement MESSAGE_PREFIX
:
kn service update greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:latest \
--namespace demoserverless \
--env MESSAGE_PREFIX=GreeterV2 \
--revision-name greeter-v2
Vous recevez une confirmation qu’une nouvelle révision greeter-v2
a été déployée.
Updating Service 'greeter' in namespace 'demoserverless':
5.029s Traffic is not yet migrated to the latest revision.
5.086s Ingress has not yet been reconciled.
5.190s Waiting for load balancer to be ready
5.332s Ready to serve.
Service 'greeter' updated to latest revision 'greeter-v2' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Pour afficher la liste de toutes les révisions et de leurs distributions du trafic, exécutez la commande suivante :
kn revision list
La liste ressemblera à la sortie suivante. Notez que dans cette instance, la nouvelle révision reçoit 100 % du trafic.
NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON
greeter-v2 greeter 100% 2 90s 3 OK / 4 True
greeter-v1 greeter 1 5m32s 3 OK / 4 True
Déploiements bleus/verts et Canary
Lorsqu’une nouvelle révision est déployée, elle reçoit par défaut 100 % du trafic. Supposons que vous souhaitiez implémenter une stratégie de déploiement bleu/vert dans laquelle vous pouvez rapidement revenir à l’ancienne version de l’application. Knative facilite cette tâche.
Vous pouvez mettre à jour le service pour créer trois balises de trafic tout en leur assignant 100 % du trafic.
- actuel : pointe vers la version actuellement déployée
- préc : pointe vers la version précédente
- dernier: pointe toujours vers la dernière version
kn service update greeter \
--tag greeter-v2=current \
--tag greeter-v1=prev \
--tag @latest=latest
Vous recevez une confirmation similaire à la suivante.
Updating Service 'greeter' in namespace 'demoserverless':
0.037s Ingress has not yet been reconciled.
0.121s Waiting for load balancer to be ready
0.287s Ready to serve.
Service 'greeter' with latest revision 'greeter-v2' (unchanged) is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Répertoriez les itinéraires à l’aide de la commande ci-dessous :
kn route describe greeter
Vous recevez une sortie qui indique les URL de chacune des balises, ainsi que la distribution du trafic.
Name: greeter
Namespace: demoserverless
Age: 10m
URL: http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service: greeter
Traffic Targets:
100% @latest (greeter-v2) #latest
URL: http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
0% greeter-v1 #prev
URL: http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
0% greeter-v2 #current
URL: http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
[..]
Supposons que vous souhaitiez revenir rapidement à la version précédente, vous pouvez mettre à jour la distribution du trafic pour envoyer 100 % du trafic à la balise précédente :
kn service update greeter --traffic current=0 --traffic prev=100
Répertoriez les itinéraires et vérifiez à nouveau, à l’aide de la commande suivante :
kn route describe greeter
Vous obtenez une sortie montrant que 100 % de la distribution du trafic sont envoyés vers la version précédente.
Name: greeter
Namespace: demoserverless
Age: 19m
URL: http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service: greeter
Traffic Targets:
0% @latest (greeter-v2) #latest
URL: http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
100% greeter-v1 #prev
URL: http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
0% greeter-v2 #current
URL: http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
[..]
Jouez avec la distribution du trafic tout en actualisant l’itinéraire principal (http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
dans le cas présent) dans votre navigateur.
Nettoyer les ressources
Lorsque vous avez terminé avec l’application, vous pouvez exécuter la commande suivante pour supprimer le projet :
oc delete project demoserverless
Vous pouvez également supprimer le cluster en suivant les instructions figurant dans Tutoriel : Supprimer un cluster Azure Red Hat OpenShift 4.
Étapes suivantes
Dans ce guide, vous avez appris à :
- Installer l’opérateur OpenShift serverless et Knative Serving
- Déployer un projet serverless à l’aide de la console web
- Déployer un projet serverless à l’aide de l’interface CLI Knative (kn)
- Configurer des déploiements bleus/verts et des déploiements Canary à l’aide de l’interface CLI Knative (kn)
En savoir plus sur les procédures de création et de déploiement d’applications serverless basées sur les événements sur Azure Red Hat OpenShift à l’aide d’OpenShift serverless, suivez la documentation Prise en main d’OpenShift Serverless et la documentation sur la création et la gestion d’applications serverless.