Rollbacks, déploiements progressifs et migration du trafic

Knative serving vous permet d'indiquer les révisions qui doivent recevoir du trafic et de spécifier les pourcentages de trafic reçus par une révision. Cette fonctionnalité vous permet d'effectuer un rollback vers une révision précédente, de déployer progressivement une révision (un processus également appelé "déploiement bleu-vert") et de répartir le trafic entre plusieurs révisions. Cette page explique comment gérer le trafic vers vos révisions Knative serving à l'aide de cette fonctionnalité.

Effectuer un rollback vers une révision précédente

Pour effectuer un rollback vers une version précédente :

Console

  1. Accédez à Knative serving dans la console Google Cloud :

    Accéder à Knative serving

  2. Localisez le service dans la liste des services, puis cliquez dessus.

  3. Cliquez sur l'onglet Revisions (Révisions) afin d'afficher la liste des révisions en cours pour ce service.

  4. Dans la liste des révisions, cliquez sur l'icône représentant trois points à droite de la révision pour laquelle vous effectuez le rollback :

  5. Cliquez sur Manage Traffic (Gérer le trafic) pour afficher le formulaire de gestion du trafic :

    1. Dans la liste déroulante, sélectionnez la révision précédente vers laquelle vous souhaitez effectuer le rollback.
    2. Définissez le pourcentage de trafic de la révision précédente sur 100.
    3. Définissez le pourcentage de la révision actuellement diffusée sur 0.
    4. Cliquez sur Enregistrer.

Ligne de commande

Exécutez la commande suivante :

gcloud run services update-traffic SERVICE --to-revisions REVISION=100

  • Remplacez SERVICE par le nom du service.
  • Remplacez REVISION par le nom de la révision vers laquelle vous effectuez le rollback.

YAML

Vous pouvez télécharger la configuration d'un service existant dans un fichier YAML avec la commande gcloud run services describe à l'aide de l'option --format=export. Vous pouvez ensuite modifier ce fichier YAML et déployer ces modifications à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les attributs spécifiés.

  1. Téléchargez la configuration de votre service dans un fichier nommé service.yaml sur l'espace de travail local :

    gcloud run services describe SERVICE --format export > service.yaml

    Remplacez SERVICE par le nom de votre service Knative serving.

  2. Dans votre fichier local, mettez à jour l'attribut traffic situé sous spec :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    Remplacer

    • REVISION par le nom de la révision vers laquelle vous effectuez le rollback.
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml

Déployer progressivement une révision

Pour déployer progressivement une nouvelle révision (déploiement bleu-vert) :

Console

  1. Accédez à Knative serving dans la console Google Cloud :

    Accéder à Knative serving

  2. Localisez le service dans la liste des services, puis cliquez dessus.

  3. Cliquez sur Déployer une nouvelle révision.

  4. Remplissez le formulaire de déploiement selon vos besoins, mais assurez-vous que la case Diffuser immédiatement la révision est DÉCOCHÉE.

  5. Cliquez sur Déployer.

  6. Cliquez sur Gérer le trafic.

  7. La nouvelle révision est répertoriée, mais avec un pourcentage défini sur 0 : elle ne diffuse actuellement aucun trafic. Dans le formulaire :

    1. Définissez le pourcentage souhaité pour cette révision, par exemple 5. Notez que le pourcentage de la version actuellement diffusée est automatiquement réduit de cette même valeur.
    2. Cliquez sur Enregistrer.
    3. Répétez les étapes permettant de gestion du trafic, mais avec les pourcentages modifiés, en augmentant la valeur selon les besoins de la nouvelle révision. Vous n'avez pas besoin d'effectuer un redéploiement pour modifier les pourcentages de trafic.

Ligne de commande

  1. Pour déployer la révision que vous souhaitez déployer progressivement, en la réglant initialement pour qu'elle ne reçoive aucun trafic, utilisez la commande update avec le paramètre --no-traffic :

    gcloud run deploy --image IMAGE --no-traffic

    Remplacez IMAGE par l'image que vous déployez.

  2. Spécifiez le pourcentage de trafic que la nouvelle révision doit gérer, par exemple 5 % :

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • Remplacez SERVICE par le nom du service.
    • Remplacez REVISION par le nom de la révision que vous déployez progressivement. Pour spécifier la dernière révision, vous pouvez utiliser LATEST, par exemple LATEST=5.
    • Remplacez PERCENTAGE par le pourcentage de trafic que vous souhaitez envoyer à la nouvelle révision, par exemple 5 pour lui envoyer 5 % du trafic.
  3. Une fois que les performances de la révision sont satisfaisantes, répétez l'étape update-traffic précédente, mais augmentez le pourcentage selon vos besoins.

YAML

Vous pouvez télécharger la configuration d'un service existant dans un fichier YAML avec la commande gcloud run services describe à l'aide de l'option --format=export. Vous pouvez ensuite modifier ce fichier YAML et déployer ces modifications à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les attributs spécifiés.

  1. Téléchargez la configuration de votre service dans un fichier nommé service.yaml sur l'espace de travail local :

    gcloud run services describe SERVICE --format export > service.yaml

    Remplacez SERVICE par le nom de votre service Knative serving.

  2. Apportez toutes les modifications souhaitées à la configuration du service, comme décrit dans les différentes pages de configuration, puis spécifiez le nom que vous voulez attribuer à la nouvelle révision :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • REVISION-NAME par le nom souhaité pour la révision.
  3. Sous l'attribut spec, localisez et mettez à jour l'attribut traffic afin que la nouvelle révision ne diffuse qu'une faible quantité de trafic :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-NEW
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    Notez que la somme des pourcentages doit être égale à 100. Remplacer

    • REVISION-NEW par le nom de la révision soumise au déploiement progressif ;
    • REVISION-FORMER par le nom de la révision assurant actuellement la diffusion ;
    • PERCENT-NEW par le pourcentage de trafic que vous souhaitez envoyer à la nouvelle révision (par exemple, utilisez 10 pour envoyer 10 % du trafic vers cette révision) ;
    • PERCENT-FORMER par le pourcentage de trafic que vous souhaitez envoyer à l'ancienne révision.

Répartir le trafic entre plusieurs révisions

Pour répartir le trafic entre deux révisions ou plus :

Console

  1. Accédez à Knative serving dans la console Google Cloud :

    Accéder à Knative serving

  2. Localisez le service dans la liste des services, puis cliquez dessus.

  3. Cliquez sur Gérer le trafic.

  4. La nouvelle révision actuellement diffusée s'affiche. Dans le formulaire :

    1. Définissez le pourcentage de la révision actuellement diffusée sur la répartition souhaitée.
    2. Sélectionnez l'une des révisions précédentes à l'aide de la liste déroulante, puis définissez-la sur le pourcentage de répartition souhaité.
    3. Pour répartir le trafic entre plusieurs révisions, cliquez sur Ajouter une révision, sélectionnez la révision souhaitée, puis définissez le pourcentage sur la répartition souhaitée.
    4. Cliquez sur Enregistrer.

Ligne de commande

Spécifiez les révisions et le pourcentage de trafic pour chaque révision sous forme de liste, en les séparant par une virgule :

gcloud run services update-traffic SERVICE --to-revisions LIST

Remplacez :

  • SERVICE par le nom du service ;
  • LIST par une liste de révisions séparées par une virgule pour lesquelles vous souhaitez recevoir du trafic et le pourcentage correspondant du trafic, pour un total de 100 % :
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEn
    par exemple, hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50.

YAML

Vous pouvez télécharger la configuration d'un service existant dans un fichier YAML avec la commande gcloud run services describe à l'aide de l'option --format=export. Vous pouvez ensuite modifier ce fichier YAML et déployer ces modifications à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les attributs spécifiés.

  1. Téléchargez la configuration de votre service dans un fichier nommé service.yaml sur l'espace de travail local :

    gcloud run services describe SERVICE --format export > service.yaml

    Remplacez SERVICE par le nom de votre service Knative serving.

  2. Dans votre fichier local, mettez à jour l'attribut traffic afin que la nouvelle révision ne diffuse qu'une petite quantité de trafic :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-A
        percent: PERCENT-A
      - revisionName: REVISION-B
        percent: PERCENT-B
      - revisionName: REVISION-C
        percent: PERCENT-C
    

    Notez que la somme des pourcentages doit être égale à 100. Remplacer

    • REVISION-A, REVISION-B, REVISION-C par les révisions auxquelles vous attribuez le trafic ;
    • PERCENT-A, PERCENT-B, PERCENT-C par le pourcentage respectivement attribué à chaque révision.
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml

Envoyer l'ensemble du trafic vers la dernière révision

Lorsque vous déployez une nouvelle révision, vous pouvez faire en sorte que celle-ci et toutes les révisions ultérieures diffusent 100 % du trafic dès que possible, ignorant ainsi toute répartition de trafic établie :

Console

  1. Accédez à Knative serving dans la console Google Cloud :

    Accéder à Knative serving

  2. Localisez le service dans la liste des services, puis cliquez dessus.

  3. Cliquez sur Déployer une nouvelle révision.

  4. Remplissez le formulaire de déploiement selon vos besoins, en veillant à cocher la case intitulée Diffuser immédiatement la révision. Cette opération permet d'ignorer toute répartition du trafic existante, la nouvelle révision diffusant 100 % du trafic.

  5. Cliquez sur Déployer.

Ligne de commande

Pour envoyer l'ensemble du trafic vers la dernière révision déployée :

gcloud run services update-traffic SERVICE --to-latest

Remplacez SERVICE par le nom du service.

YAML

Vous pouvez télécharger la configuration d'un service existant dans un fichier YAML avec la commande gcloud run services describe à l'aide de l'option --format=export. Vous pouvez ensuite modifier ce fichier YAML et déployer ces modifications à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les attributs spécifiés.

  1. Téléchargez la configuration de votre service dans un fichier nommé service.yaml sur l'espace de travail local :

    gcloud run services describe SERVICE --format export > service.yaml

    Remplacez SERVICE par le nom de votre service Knative serving.

  2. Dans votre fichier local, mettez à jour l'attribut traffic situé sous spec :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml

Utiliser des tags pour les tests, la migration du trafic et les rollbacks

Après avoir déployé un service, vous pouvez créer une révision et lui attribuer un tag permettant d'y accéder via une URL spécifique, sans diffuser le trafic. Vous pouvez ensuite utiliser ce tag pour migrer progressivement le trafic vers la révision taguée et effectuer le rollback de cette révision.

Cette fonctionnalité est souvent utilisée pour tester et vérifier une nouvelle révision de service avant qu'elle diffuse du trafic, selon l'ordre suivant :

  1. Exécution des tests d'intégration sur un conteneur pendant le développement
  2. Déploiement du conteneur dans un projet Google Cloud que vous n'utilisez qu'à des fins de préproduction, sans diffuser de trafic, et tests sur une révision taguée
  3. Déploiement en production, sans diffuser de trafic, et tests sur une révision taguée en production
  4. Migration du trafic vers la révision taguée

Déployer une nouvelle révision taguée

Pour déployer une nouvelle révision d'un service existant en production, procédez comme suit :

gcloud run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME

Remplacez :

  • IMAGE_URL par l'URL de votre image ;
  • TAG_NAME par le nom de votre tag en minuscules.

Le tag vous permet de tester directement la nouvelle révision sur une URL spécifique, sans diffuser le trafic. L'URL de test commence par le nom du tag que vous avez fourni : http://{TAG_NAME}---{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io

Par exemple, si vous avez utilisé le nom de tag green sur le service myservice, vous devez tester la révision taguée sur l'URL : https://green---myservice.default.kuberun.11.111.11.111.nip.io.

Migrer le trafic vers une révision taguée

Après avoir vérifié que la nouvelle révision fonctionne correctement, vous pouvez commencer à migrer le trafic vers celle-ci à l'aide de la console Google Cloud, de la ligne de commande gcloud ou d'un fichier YAML :

Console

  1. Accédez à Knative serving dans la console Google Cloud :

    Accéder à Knative serving

  2. Localisez le service dans la liste des services, puis cliquez dessus :

  3. Sélectionnez la révision taguée à laquelle vous souhaitez envoyer du trafic :

  4. Cliquez sur Gérer le trafic.

  5. Recherchez le nom de la révision taguée. Elle est répertoriée, mais avec un pourcentage défini sur 0 : elle ne diffuse actuellement pas de trafic. Dans le formulaire Gérer le trafic* :

    1. Définissez le pourcentage souhaité pour cette révision, par exemple 5. Notez que le pourcentage de la version actuellement diffusée est automatiquement réduit de cette même valeur.
    2. Cliquez sur Enregistrer.
    3. Pendant plusieurs heures, ou plusieurs jours si cela est nécessaire, répétez les étapes de gestion du trafic en augmentant graduellement le pourcentage attribué à la révision taguée. Vous n'avez pas besoin d'effectuer un redéploiement pour modifier les pourcentages de trafic.

Ligne de commande

Pour migrer le trafic vers un tag de révision spécifique, procédez comme suit :

gcloud run deploy update-traffic myservice --tag TAG_NAME=TRAFFIC_PERCENT

Remplacer

  • TAG_NAME par le nom du tag vers lequel vous migrez le trafic ;
  • TRAFFIC_PERCENT par le pourcentage de trafic que vous souhaitez diffuser via la révision taguée (par exemple, 1).

YAML

Vous pouvez télécharger la configuration d'un service existant dans un fichier YAML avec la commande gcloud run services describe à l'aide de l'option --format=export. Vous pouvez ensuite modifier ce fichier YAML et déployer ces modifications à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les attributs spécifiés.

  1. Téléchargez la configuration de votre service dans un fichier nommé service.yaml sur l'espace de travail local :

    gcloud run services describe SERVICE --format export > service.yaml

    Remplacez SERVICE par le nom de votre service Knative serving.

  2. Apportez toutes les modifications souhaitées à la configuration du service, comme décrit dans les différentes pages de configuration.

  3. Sous l'attribut spec, localisez et mettez à jour l'attribut traffic de la révision taguée afin qu'elle ne diffuse qu'une faible quantité de trafic :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        tag: TAG_NAME
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    Notez que la somme des pourcentages doit être égale à 100. Remplacer

    • REVISION par le nom de la révision taguée ;
    • TAG_NAME par le nom du tag que vous déployez progressivement ;
    • PERCENT-NEW par le pourcentage de trafic que vous souhaitez envoyer à la révision taguée (par exemple, utilisez 10 pour envoyer 10 % du trafic vers cette révision) ;
    • REVISION-FORMER par le nom de la révision assurant actuellement la diffusion ;
    • PERCENT-FORMER par le pourcentage de trafic que vous souhaitez envoyer à l'ancienne révision.
  4. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml