Lorsque vous déployez une nouvelle version d'un service Knative, acheminer l'intégralité du trafic vers cette version expose les utilisateurs à des bugs potentiels. Knative vous permet de répartir le trafic entre plusieurs révisions selon un pourcentage défini. Vous pouvez ainsi valider une nouvelle révision avec une petite portion du trafic de production avant de la déployer complètement, ou revenir immédiatement en arrière si des problèmes sont détectés.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Déployé Knative dans votre cluster. Pour plus d'informations, consultez la rubrique Déployer et gérer Knative.
Fonctionnement
Un déploiement canari avec Knative Serving se déroule en trois étapes :
| Étape | Action | Description |
|---|---|---|
| Déploiement | Créer une nouvelle révision | Déployez une nouvelle version de votre service Knative sous forme de révision avec 0 % du trafic. Elle est active mais ne traite pas encore de requêtes. |
| Validation | Transférer progressivement le trafic | Acheminez un pourcentage du trafic (par exemple, 50 %) vers la nouvelle révision et vérifiez son bon fonctionnement. |
| Finalisation ou retour arrière | Définir le trafic à 100 % ou revenir en arrière | Déployez complètement la nouvelle révision en lui attribuant tout le trafic, ou revenez à la révision précédente en lui renvoyant l'intégralité du trafic. |
Étape 1 : Créer un service Knative
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, recherchez le cluster souhaité et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Applications > Knative.
-
Dans l'onglet Services de la page Knative, définissez Namespace sur default. Cliquez sur Create Service pour déployer un service nommé
helloworld-go. Après avoir configuré le service, cliquez sur Create. Le tableau suivant décrit les paramètres clés. Pour plus de détails, consultez la rubrique Déployer un service Knative. Lorsque la colonne Status affiche Created, le service est déployé.Paramètre Description Service Name Saisissez un nom pour le service. Cet exemple utilise helloworld-go.Image Name Cliquez sur Select Image pour choisir une image et une balise, puis cliquez sur OK. Vous pouvez également saisir l'adresse d'un registre privé au format domainname/namespace/imagename:tag. Cet exemple utiliseregistry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56.Access Protocol Prend en charge HTTP et gRPC. gRPC repose sur la norme HTTP/2 et la sérialisation Protocol Buffers (protobuf), et prend en charge plusieurs langages de programmation. Container Port Port du conteneur à exposer. Valeurs valides : 1 à 65535. Dans l'onglet Services, cliquez sur le service
helloworld-goet notez son nom de domaine et l'adresse IP de la passerelle à partir des champs Default Domain et Gateway.-
Exécutez la commande suivante pour vérifier que le service est accessible :
curl -H "Host: <default_domain_name>" http://<gateway_IP_address>Remplacez
<default_domain_name>et<gateway_IP_address>par les valeurs réelles. Résultat attendu :Hello World!
Étape 2 : Créer une révision et déployer une version canari
Créer une révision
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, recherchez le cluster souhaité et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Applications > Knative.
Dans l'onglet Services, sélectionnez le service
helloworld-goet cliquez sur Details dans la colonne Actions.-
Cliquez sur Create Revision. Sur la page Basic Information, cliquez sur Advanced, définissez la variable d'environnement sur
TARGET=Knativeet cliquez sur Next.
-
Sur la page Traffic Splitting Settings, définissez le Percent % du trafic pour la dernière révision sur
0et cliquez sur Create.RemarqueLa somme des pourcentages de trafic pour toutes les révisions doit être égale à 100.
-
Une fois la révision créée, exécutez la commande suivante pour confirmer que tout le trafic est toujours dirigé vers l'ancienne révision :
curl -H "Host: <default_domain_name>" http://<gateway_IP_address>Résultat attendu :
Hello World!Le résultat affiche
Hello World!car la nouvelle révision a un pourcentage de trafic de 0 %, donc toutes les requêtes sont toujours routées vers l'ancienne révision.
Transférer le trafic vers la nouvelle révision
Dans l'onglet Services, sélectionnez le service
helloworld-goet cliquez sur Details dans la colonne Actions.Cliquez sur Split Traffic. Dans la boîte de dialogue Split Traffic, définissez le Percent % du trafic sur
50pour l'ancienne et la nouvelle révision, puis cliquez sur OK.-
Exécutez la commande en boucle suivante pour observer la distribution du trafic en direct :
RemarqueLa commande s'exécute indéfiniment. Appuyez sur
Ctrl + Cpour l'arrêter.while true; do curl -H "Host: <default_domain_name>" http://<gateway_IP_address>; sleep 1; doneRésultat attendu avec une répartition 50/50 :
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...Les requêtes adressées à
helloworld-gosont réparties uniformément entre l'ancienne et la nouvelle révision. Continuez à ajuster le pourcentage de trafic en fonction des résultats de votre validation. Pour modifier la répartition, cliquez sur Split Traffic dans l'onglet Services et mettez à jour les valeurs de pourcentage. Définissez Percent % sur
100pour la nouvelle révision afin de la déployer complètement.
Revenir à la révision précédente
Si vous détectez des problèmes dans la nouvelle révision, revenez en arrière en dirigeant tout le trafic vers l'ancienne révision.
Dans l'onglet Services, sélectionnez le service
helloworld-goet cliquez sur Details dans la colonne Actions.Cliquez sur Split Traffic. Dans la boîte de dialogue Split Traffic, définissez le Percent % sur
100pour l'ancienne révision et sur0pour la nouvelle révision, puis cliquez sur OK. Toutes les requêtes sont désormais routées vers l'ancienne révision. Vérifiez le retour arrière en exécutant la commande curl : le résultat ne doit afficher queHello World!.
Étapes suivantes
Configurez la mise à l'échelle automatique pour un service Knative en fonction du volume de requêtes. Pour plus d'informations, consultez la rubrique Activer la mise à l'échelle automatique pour faire face aux fluctuations du trafic.