Automatiser l'analyse Canary sur Google Kubernetes Engine avec Spinnaker

Ce tutoriel vous guide dans la configuration de la fonctionnalité d'analyse Canary automatisée de Spinnaker sur Google Kubernetes Engine (GKE).

Présentation

Système de livraison continue Open Source contrôlé par Netflix et Google, Spinnaker permet de gérer le déploiement d'applications sur différentes plates-formes informatiques (par exemple, App Engine, GKE, Compute Engine, AWS et Azure). Vous pouvez l'utiliser pour la mise en œuvre de méthodes de déploiement avancées, y compris pour les déploiements Canary.

Dans le cadre d'un déploiement Canary, vous exposez une nouvelle version de votre application à une petite partie de votre trafic de production et vous analysez son comportement avant de procéder au déploiement complet. Cela vous permet de limiter les risques avant de déployer une nouvelle version pour tous vos utilisateurs. Les déploiements Canary impliquent de comparer attentivement le comportement des versions (ancienne et nouvelle) de votre application. Les différences peuvent être subtiles et mettre un certain temps à apparaître. En outre, vous pouvez avoir beaucoup de métriques différentes à examiner.

Pour résoudre ces problèmes, Spinnaker comporte une fonctionnalité d'analyse Canary automatisée qui lui permet de lire les métriques des deux versions à partir de votre système de surveillance et d'exécuter une analyse statistique pour automatiser la comparaison. Ce tutoriel vous montre comment effectuer une analyse Canary automatisée pour une application déployée sur GKE et surveillée par Stackdriver.

Spinnaker est une plate-forme avancée de déploiement et de gestion d'applications destinée aux entreprises utilisant des scénarios de déploiement complexes, souvent avec une fonction d'ingénierie des versions dédiée. Vous pouvez exécuter ce tutoriel même si vous n'avez aucune expérience préalable de Spinnaker. Cependant, la mise en œuvre d'une analyse Canary automatisée en production est généralement effectuée par des équipes qui connaissent déjà Spinnaker, disposent d'un système de surveillance performant et savent comment déterminer si une version est sûre.

À propos de ce tutoriel

Ce tutoriel est basé sur une application "Hello World" simple dont le taux d'erreur est configuré au moyen d'une variable d'environnement. Une image Docker prédéfinie est fournie pour cette application. Comme le montre l'image suivante, l'application expose les métriques au format Prometheus, un système de surveillance Open Source très utilisé dans la communauté Kubernetes et compatible avec Stackdriver.

Architecture de l'application

Objectifs

  • Créer un cluster GKE
  • Installer Spinnaker
  • Déployer une application sur GKE sans déploiement Canary
  • Configurer et exécuter un déploiement Canary de l'application
  • Configurer une analyse Canary automatisée
  • Tester l'analyse Canary automatisée

Coûts

Avant de commencer

  1. Sélectionnez ou créez un projet GCP.

    ACCÉDER À LA PAGE GÉRER LES RESSOURCES

  2. Activez la facturation pour votre projet.

    ACTIVER LA FACTURATION

  3. Créez un compte Stackdriver.

    ALLER À LA DOCUMENTATION STACKDRIVER

Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez Effectuer un nettoyage.

Configurer votre environnement

Dans cette section, vous allez configurer l'infrastructure requise pour mener à bien le tutoriel. Exécutez toutes les commandes de terminal indiquées dans ce tutoriel à partir de Cloud Shell.

  1. Ouvrez Cloud Shell.

    ACCÉDER À CLOUD SHELL

  2. Exportez votre ID de projet sous forme de variable.

    export GOOGLE_CLOUD_PROJECT=[PROJECT_ID]
    

    où :

    • [PROJECT_ID] représente l'ID du projet que vous utilisez.
  3. Créez un cluster GKE.

    gcloud config set project $GOOGLE_CLOUD_PROJECT
    gcloud config set compute/zone us-central1-f
    gcloud services enable container.googleapis.com
    gcloud beta container clusters create kayenta-tutorial \
        --machine-type=n1-standard-2 --enable-stackdriver-kubernetes \
        --scopes=gke-default,compute-ro
    
  4. Installez le plug-in d'intégration Stackdriver/Prometheus.

    kubectl apply --as=admin --as-group=system:masters -f \
        https://storage.googleapis.com/stackdriver-prometheus-documentation/rbac-setup.yml
    curl -sS "https://storage.googleapis.com/stackdriver-prometheus-documentation/prometheus-service.yml" | \
        sed "s/_stackdriver_project_id:.*/_stackdriver_project_id: $GOOGLE_CLOUD_PROJECT/" | \
        sed "s/_kubernetes_cluster_name:.*/_kubernetes_cluster_name: kayenta-tutorial/" | \
        sed "s/_kubernetes_location:.*/_kubernetes_location: us-central1-f/" | \
        kubectl apply -f -
    
  5. Déployez Spinnaker dans le nouveau cluster GKE.

    curl -sSL "https://spinnaker.io/downloads/kubernetes/quick-install.yml" | \
        sed 's/version:.*/version: 1.10.5/g' | kubectl apply -f -
    
  6. Le déploiement prend quelques minutes. Pour vérifier la progression, exécutez la commande watch kubectl -n spinnaker get pods. Pour arrêter la commande watch, appuyez sur Ctrl+C. Une fois le déploiement terminé, cette commande indique Ready 1/1 pour tous les pods.

    NAME                                READY  STATUS    RESTARTS   AGE
    minio-deployment-7c665c4b57-jx7px   1/1    Running   0          5m
    spin-clouddriver-789c6fff77-rjtc6   1/1    Running   0          4m
    spin-deck-68b5968f7f-trmkn          1/1    Running   0          4m
    spin-echo-57dbff9fb8-rq5qc          1/1    Running   0          4m
    spin-front50-67965475b8-l24db       1/1    Running   0          4m
    spin-gate-6d8bbf8c45-m9pzn          1/1    Running   0          4m
    spin-halyard-59fd54bd69-xns49       1/1    Running   0          5m
    spin-kayenta-99b97b85f-4gvsv        1/1    Running   0          4m
    spin-orca-5748974888-cph9g          1/1    Running   0          4m
    spin-redis-6d49c9c5b9-q2hzm         1/1    Running   0          4m
    spin-rosco-6b4ddbcb94-mjrht         1/1    Running   0          4m
    
  7. Pour accéder à Spinnaker, transmettez un port local au composant "deck" de Spinnaker.

    DECK_POD=$(kubectl -n spinnaker get pods -l \
        cluster=spin-deck,app=spin \
        -o=jsonpath='{.items[0].metadata.name}')
    kubectl -n spinnaker port-forward $DECK_POD 8080:9000 >/dev/null &
    
  8. Dans Cloud Shell, cliquez sur l'icône Web Preview (Aperçu sur le Web) et sélectionnez Preview on port 8080 (Prévisualiser sur le port 8080).

    Icône "Web Preview" (Aperçu sur le Web) pour le port 8080

Déployer une application avec Spinnaker

Dans cette section, vous allez configurer Spinnaker en vue du déploiement d'une application dans le cluster GKE.

Créer une application Spinnaker

Avant de pouvoir procéder au déploiement, vous devez créer l'application Spinnaker.

  1. Dans Spinnaker, cliquez sur Actions > Create Application (Créer une application).

    Menu déroulant avec l'option "Create Application" (Créer une application)

  2. Dans la boîte de dialogue New Application (Nouvelle application), saisissez les valeurs suivantes :

    • Name (Nom) : sampleapp
    • Owner Email (Adresse e-mail du propriétaire) : [example@example.com]

  3. Cliquez sur Créer.

Vous êtes maintenant dans l'exemple d'application de Spinnaker. Étant donné qu'elle n'est pas encore configurée, la plupart des onglets sont vides.

Créer et exécuter un pipeline de déploiement

Dans cette section, vous devez tout d'abord déployer l'application au moyen d'un pipeline Spinnaker simple qui utilise un paramètre successRate pour créer un déploiement sur GKE avec quatre pods. Ces pods génèrent des erreurs de manière aléatoire selon un taux correspondant à la valeur du paramètre successRate. Dans ce tutoriel, ils génèrent des erreurs 500 à un taux de 100 - successRate.

  1. Dans Cloud Shell, créez le pipeline avec le fichier JSON fourni. La commande suivante publie la définition JSON du pipeline directement dans l'API Spinnaker.

    wget https://raw.githubusercontent.com/spinnaker/spinnaker/master/solutions/kayenta/pipelines/simple-deploy.json
    curl -d@simple-deploy.json -X POST \
        -H "Content-Type: application/json" -H "Accept: */*" \
        http://localhost:8080/gate/pipelines
    
  2. Dans la section "Pipelines" de Spinnaker, un pipeline appelé Simple deploy (Déploiement simple) apparaît. Si vous ne le voyez pas, actualisez la page. Cliquez sur Start Manual Execution (Démarrer l'exécution manuelle).

    Bouton "Start Manual Execution" (Démarrer l'exécution manuelle) du pipeline "Simple deploy" (Déploiement simple)

  3. Dans la fenêtre Confirm Execution (Confirmer l'exécution), sélectionnez un taux de réussite (Success Rate) de 70, puis cliquez sur Run (Exécuter). Après quelques secondes, le pipeline déploie la configuration de l'application et des quatre pods.

  4. Dans Cloud Shell, créez un pod qui aura pour fonction d'envoyer des requêtes à votre nouvelle application jusqu'à la fin du tutoriel.

    kubectl -n default run injector --image=alpine -- \
        /bin/sh -c "apk add --no-cache --yes curl; \
        while true; do curl -sS --max-time 3 \
        http://sampleapp:8080/; done"
    

Consulter les journaux de l'injecteur

  1. Consultez les journaux de l'injecteur pour voir quel est le comportement de l'application.

    kubectl -n default logs -f \
        $(kubectl -n default get pods -l run=injector \
        -o=jsonpath='{.items[0].metadata.name}')
    
  2. Un grand nombre de messages d'erreur internes au serveur apparaissent dans les journaux. Pour arrêter de suivre les journaux de l'injecteur, appuyez sur Ctrl+C.

Vérifier l'intégrité de l'application

Maintenant que votre application est déployée et génère du trafic, vérifiez si elle fonctionne correctement. Bien sûr, dans ce tutoriel, vous savez déjà que tel n'est pas le cas, étant donné que vous l'avez déployée avec un taux de réussite de seulement 70 %.

L'application expose un point de terminaison /metrics avec des métriques au format Prometheus qui sont ingérées par Stackdriver. Dans cette section, vous visualisez ces métriques dans Stackdriver.

  1. Dans Stackdriver, accédez à l'Explorateur de métriques (Metrics Explorer).

    EXPLORATEUR DE MÉTRIQUES

  2. Dans le champ Find resource type and metric (Rechercher le type de ressource et la métrique), saisissez les informations suivantes :

    external.googleapis.com/prometheus/requests
    
  3. Pour affiner le graphique, saisissez http_code dans le champ Group By (Grouper par). Dans le graphique suivant, les taux des requêtes HTTP auxquelles l'application a répondu sont regroupés par code d'état HTTP :

    Graphique des requêtes HTTP auxquelles l'application a répondu

Comme vous pouvez le constater sur le graphique, l'application présente actuellement un taux d'erreur inacceptable, qui est comme prévu d'environ 30 %. Le reste du tutoriel vous guide dans la configuration d'un pipeline de déploiement Canary et d'une analyse automatique visant à empêcher qu'une application présentant un taux d'erreur aussi élevé puisse à l'avenir être déployée.

Créer un déploiement Canary

Dans cette section, vous allez créer un pipeline de déploiement Canary, sans analyse automatisée, pour tester la nouvelle version de l'application avant de la déployer entièrement en production. Différentes étapes de ce pipeline sont illustrées dans l'image suivante :

Illustration des phases d'un pipeline de déploiement Canary

  • Étape 0 : Comme dans le pipeline Simple deploy (Déploiement simple), le pipeline utilise comme entrée un paramètre successRate. Ce nouveau pipeline utilise ce paramètre pour simuler différents taux de réussite. Il s'agit de la configuration du pipeline.
  • Étape 1 : La phase Find Baseline Version (Rechercher la version de référence) récupère la version actuelle de l'application exécutée en production depuis la dernière exécution du pipeline Simple deploy (Déploiement simple). Dans ce tutoriel, elle récupère le taux de réussite de l'application actuellement déployée.
  • Parallèlement à la phase Find Baseline Version (Rechercher la version de référence), la phase Deploy Canary Config (Déployer la configuration Canary) déploie la nouvelle configuration du taux de réussite pour la version Canary de l'application.
  • Étape 2 : Les phases Deploy Canary (Déployer la version Canary) et Deploy Baseline (Déployer la version de référence) déploient les deux versions à des fins de comparaison (nouvelle version Canary et version de référence). La version Canary utilise la configuration créée dans Deploy Canary Config (Déployer la configuration Canary), tandis que la version de référence utilise la configuration de la version de production.

  • Étape 3 : La phase Manual Judgment (Jugement manuel) arrête le pipeline jusqu'à ce que vous continuiez. Vous pouvez alors vérifier si la version Canary fonctionne correctement.

  • Étape 4 : Une fois que vous avez dépassé la phase Manual Judgment (Jugement manuel), les phases Delete Canary (Supprimer la version Canary) et Delete Baseline (Supprimer la version de référence) nettoient l'infrastructure.

  • Parallèlement au nettoyage, la phase Deploy to Production (Déployer en production) est lancée et déclenche le pipeline Simple deploy (Déploiement simple) avec un taux de réussite (paramètre successRate) identique à celui que vous avez défini initialement. La version de l'application que vous avez testée dans le cadre d'un déploiement Canary est déployée en production.

  • La phase Deploy to Production (Déployer en production) ne se déclenche que si vous avez choisi de continuer pendant la phase Manual Judgment (Jugement manuel).

  • Étape 5 : Enfin, la phase Successful Deployment (Déploiement réussi) confirme la réussite du traitement de l'intégralité du pipeline. Elle vérifie que vous avez donné votre feu vert lors de la phase Manual Judgment (Jugement manuel), et ne s'exécute que si les phases Deploy to Production (Déployer en production), Delete Canary (Supprimer la version Canary) et Delete Baseline (Supprimer la version de référence) se sont exécutées correctement.

Vous pouvez maintenant créer et exécuter le pipeline Canary deploy (Déploiement Canary).

  1. Pour créer le pipeline Canary deploy (Déploiement Canary), exécutez la commande suivante pour récupérer l'ID du pipeline Simple deploy (Déploiement simple) et l'injecter dans le pipeline Canary deploy (Déploiement Canary) :

    wget https://raw.githubusercontent.com/spinnaker/spinnaker/master/solutions/kayenta/pipelines/canary-deploy.json
    export PIPELINE_ID=$(curl \
        localhost:8080/gate/applications/sampleapp/pipelineConfigs/Simple%20deploy \
        | jq -r '.id')
    jq '(.stages[] | select(.refId == "9") | .pipeline) |= env.PIPELINE_ID | (.stages[] | select(.refId == "8") | .pipeline) |= env.PIPELINE_ID' canary-deploy.json | \
        curl -d@- -X POST \
        -H "Content-Type: application/json" -H "Accept: */*" \
        http://localhost:8080/gate/pipelines
    
  2. Si vous ne voyez pas le pipeline Canary deploy (Déploiement Canary) dans Spinnaker, actualisez la page sampleapp (exemple d'application), puis cliquez sur Pipelines.

  3. Pour lancer le pipeline Canary deploy (Déploiement Canary), procédez comme suit :

    1. Cliquez sur Start Manual Execution (Démarrer l'exécution manuelle).
    2. Sélectionnez un taux de réussite (Success Rate) de 80.
    3. Cliquez sur Exécuter (Run).
  4. Lorsque le pipeline atteint la phase Manual Judgment (Jugement manuel), ne cliquez pas tout de suite sur Continue (Continuer), car vous devez comparer la version Canary à la version de référence.

    Phase "Manual Judgement" (Jugement manuel) du pipeline Canary

  5. Dans Cloud Shell, exécutez la commande kubectl -n default get pods pour afficher les nouveaux pods nommés "canary" et "baseline" (référence) :

    NAME                                READY STATUS  RESTARTS  AGE
    injector-66bd655ffd-9ntwx           1/1   Running 0         30m
    sampleapp-5cdf8f55dd-995rz          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-dqq8n          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-ntq57          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-rlpzp          1/1   Running 0         28m
    sampleapp-baseline-567b8d6849-gsgqr 1/1   Running 0          4m
    sampleapp-canary-54b9759dd6-gmjhc   1/1   Running 0          4m
    
  6. Dans Stackdriver, accédez à l'Explorateur de métriques (Metrics Explorer).

    EXPLORATEUR DE MÉTRIQUES

  7. Si des métriques sont déjà configurées dans l'Explorateur de métriques, supprimez l'intégralité de la configuration existante du formulaire.

  8. Sélectionnez les données Canary comme première métrique en spécifiant les paramètres suivants :

    1. Metric (Métrique) : external.googleapis.com/prometheus/requests
    2. Filters (Filtres) :

      • http_code égal à 500
      • pod_name égal à sampleapp-canary-*
  9. Pour sélectionner les données de référence comme deuxième métrique, cliquez sur + Add Metric (+ Ajouter une métrique), puis renseignez les champs suivants :

    1. Metric (Métrique) : external.googleapis.com/prometheus/requests
    2. Filters (Filtres) :

      • http_code égal à 500
      • pod_name égal à sampleapp-baseline-*
  10. Comparez la version Canary à la version de référence (respectivement en violet et en bleu dans le graphique suivant). Les couleurs de votre graphique peuvent être différentes. Dans ce tutoriel, la version Canary a un taux d'erreur inférieur à celui de la version de référence. Par conséquent, il est possible de déployer l'intégralité de la version Canary en production. Si le taux d'erreur de cette version n'était pas inférieur à celui de la version de référence, vous pourriez souhaiter arrêter le déploiement au niveau de cette phase pour corriger votre application.

    Graphique comparant les taux d'erreur de la version Canary et de la version de référence

  11. Dans Spinnaker, dans la boîte de dialogue Manual Judgement (Jugement manuel), cliquez sur Continue (Continuer).

    Phase "Manual Judgement" (Jugement manuel) du pipeline Canary

  12. Une fois le déploiement terminé, retournez dans l'Explorateur de métriques (Metrics Explorer) de Stackdriver.

    EXPLORATEUR DE MÉTRIQUES

  13. Si des métriques sont déjà configurées dans l'Explorateur de métriques, supprimez l'intégralité de la configuration existante du formulaire.

  14. Dans le champ Find resource type and metric (Rechercher le type de ressource et la métrique), saisissez les informations suivantes :

    external.googleapis.com/prometheus/requests
    
  15. Saisissez http_code dans le champ Group By (Grouper par). Dans le graphique suivant, les taux des requêtes HTTP auxquelles l'application a répondu sont regroupés par code d'état HTTP :

    Graphique comparant les taux des requêtes HTTP

    Ce graphique indique les taux des codes HTTP 200 et 500 pour tous les pods : production, référence et Canary. Vous avez déployé la version Canary en production puisqu'elle avait un taux d'erreur inférieur à celui de la version de référence. Après une courte période de la phase de déploiement pendant laquelle le nombre total de requêtes est légèrement inférieur, vous pouvez constater que le taux d'erreur global est moins élevé : la version Canary a été correctement déployée en production.

Automatiser l'analyse Canary

La méthode consistant à effectuer un déploiement Canary est utile, mais implique dans sa mise en œuvre actuelle d'avoir recours à un processus manuel. Vous devez vérifier manuellement que la version Canary fonctionne comme vous le souhaitez avant de procéder à un déploiement complet. De plus, la différence entre la version Canary et la version de référence n'est pas toujours claire.

Il est donc souhaitable d'automatiser l'analyse Canary, car ainsi vous n'avez pas besoin de vous charger de ce processus manuel. En outre, une analyse statistique automatisée est mieux à même de détecter les problèmes dans un ensemble de métriques qu'un œil humain. Dans cette section, la phase Manual Judgement (Jugement manuel) est remplacée par une analyse Canary automatisée.

Activer la fonctionnalité Canary

Tout d'abord, vous devez configurer dans Spinnaker la fonctionnalité d'analyse Canary automatisée, appelée Kayenta. Pour ce faire, servez-vous de Halyard, l'outil qui permet de configurer et de déployer Spinnaker.

  1. Obtenez votre ID de projet dans Cloud Shell.

    echo $GOOGLE_CLOUD_PROJECT
    
  2. Obtenez une interface système dans le pod Halyard.

    export HALYARD_POD=$(kubectl -n spinnaker get pods -l \
        stack=halyard,app=spin \
        -o=jsonpath='{.items[0].metadata.name}')
    kubectl -n spinnaker exec -it $HALYARD_POD -- bash
    
  3. Configurez Kayenta en vue de l'utilisation de Stackdriver en tant que backend.

    hal config canary google enable
    hal config canary google account add kayenta-tutorial --project [PROJECT_ID]
    hal config canary google edit --stackdriver-enabled=true
    

    où :

    • [PROJECT_ID] représente l'ID de projet que vous avez récupéré.
  4. Appliquez la nouvelle configuration et quittez le pod Halyard.

    hal deploy apply
    exit
    
  5. Le déploiement prend quelques minutes. Pour vérifier la progression, exécutez la commande watch kubectl -n spinnaker get pods. Une fois le déploiement terminé, cette commande indique Ready 1/1 pour tous les pods. Pour arrêter la commande watch, appuyez sur Ctrl+C.

    NAME                               READY  STATUS   RESTARTS AGE
    minio-deployment-7c665c4b57-prl6d  1/1    Running  0        1h
    spin-clouddriver-6c4f954667-8769c  1/1    Running  0        1h
    spin-deck-7d44499f9b-hkqz4         1/1    Running  0        1h
    spin-echo-6cf4bbbbfc-vxzlr         1/1    Running  0        1h
    spin-front50-7666c894c6-fm7sz      1/1    Running  0        1h
    spin-gate-76f789696d-vsn98         1/1    Running  0        1h
    spin-halyard-59fd54bd69-vb99h      1/1    Running  0        1h
    spin-kayenta-84f6b9b697-5krhh      1/1    Running  0        1m
    spin-orca-78f5c74c6f-srl4f         1/1    Running  0        1h
    spin-redis-6d49c9c5b9-gddgv        1/1    Running  0        1h
    spin-rosco-699cb484f7-grthh        1/1    Running  0        1h
    

Configurer la fonctionnalité d'analyse Canary automatisée

Maintenant que Kayenta est activé, configurez-le pour sampleapp.

  1. Dans Spinnaker, cliquez sur Config.

  2. Dans la section Features (Fonctionnalités), sélectionnez Canary, puis cliquez sur Save Changes (Enregistrer les modifications).

    Capture d'écran de la section "Features" (Fonctionnalités) pour le pipeline

Créer une configuration Canary

Dans Spinnaker, une analyse Canary automatisée exécute un test statistique pour différentes métriques et génère un score. Ce score peut aller de 0 à 100. Il est lié au nombre de métriques pour lesquelles la comparaison entre la version de référence et la version Canary s'est soldée par une réussite ou un échec. Vous pouvez influer sur le score en plaçant les métriques dans différents groupes assortis de différentes pondérations. Le résultat de l'analyse vous aide à savoir si vous pouvez poursuivre le déploiement. Si vous utilisez une seule métrique (comme dans ce tutoriel), le score ne peut être que 0 (échec) ou 100 (réussite).

Une application peut disposer de plusieurs configurations Canary pouvant être partagées entre plusieurs applications. Une configuration Canary comporte deux éléments principaux :

  • Un ensemble de métriques à analyser (éventuellement dans différents groupes)
  • Un seuil marginal et un seuil de réussite pour le score

Dans un pipeline de déploiement, une configuration Canary est utilisée lors de la phase Canary Analysis (Analyse Canary). Cette phase peut comprendre plusieurs cycles Canary. Si le score d'un cycle est inférieur au seuil marginal, la phase est arrêtée et les autres cycles ne sont pas exécutés. Le score du dernier cycle doit être supérieur au seuil de réussite pour que toute la phase soit considérée comme réussie.

Pour créer une configuration Canary, procédez comme suit :

  1. Maintenant que la fonctionnalité Canary est activée, actualisez Spinnaker. La section Pipelines est remplacée par Delivery (Diffusion). Dans la section Delivery (Diffusion), accédez à Canary Configs (Configurations Canary).

  2. Cliquez sur Add Configuration (Ajouter une configuration).

  3. Pour Configuration Name (Nom de la configuration), saisissez kayenta-test.

  4. Dans la section Filter Templates (Modèles de filtre), cliquez sur Add Template (Ajouter un modèle).

  5. Dans la boîte de dialogue Add Template (Ajouter un modèle), ajoutez les valeurs suivantes, puis cliquez sur OK :

    • Name (Nom) : http_code
    • Template (Modèle) : metric.labels.http_code = "500" AND resource.label.pod_name = starts_with("${scope}")

    La variable scope est renseignée lors de l'exécution avec le nom du déploiement sur GKE pour lequel Kayenta doit vérifier des métriques. Il s'agit de sampleapp-baseline pour la version de référence et de sampleapp-canary pour la version Canary.

  6. Dans la section Metrics (Métriques), cliquez sur Add Metric (Ajouter une métrique).

  7. Dans la boîte de dialogue Add Metric (Ajouter une métrique), saisissez les valeurs suivantes, puis cliquez sur OK :

    • Name (Nom) : error_rate
    • Fail on (Échec pour) : increase
    • Filter Template (Modèle de filtre) : http_code
    • Resource Type (Type de ressource) : k8s_container
    • Metric type (Type de métrique) : external.googleapis.com/prometheus/requests
    • Aligner (Aligneur) : ALIGN_RATE
  8. Dans la section Scoring (Score), sélectionnez les valeurs suivantes :

    • Marginal : 75
    • Pass (Réussite) : 95
    • Group 1 (Groupe 1) : 100
  9. Cliquez sur Save Changes (Enregistrer les modifications).

Ajouter une phase d'analyse Canary au pipeline

Maintenant que vous disposez d'une configuration Canary, modifiez votre pipeline de déploiement existant afin de remplacer la phase Manual Judgment (Jugement manuel) par une phase Canary Analysis (Analyse Canary) utilisant cette configuration.

  1. Sélectionnez Delivery (Diffusion) > Pipelines, puis, pour le pipeline Canary Deploy (Déploiement Canary), cliquez sur Configure (Configurer).

    Capture d'écran du bouton "Configure" (Configurer) du pipeline "Canary deploy" (Déploiement Canary)

  2. Cliquez sur Add Stage (Ajouter une phase).

  3. Dans le champ Type, sélectionnez Canary Analysis (Analyse Canary).

  4. Dans la section Depends On (Dépend de), modifiez votre nouvelle phase pour qu'elle dépende des sélections suivantes :

    • Deploy Canary (Déployer la version Canary)
    • Deploy Baseline (Déployer la version de référence)
  5. Renseignez la section Canary Analysis Configuration (Configuration de l'analyse Canary) avec les valeurs suivantes :

    Nom du paramètre Valeur Définition
    Analysis Type (Type d'analyse) Temps réel (manuel) Le mode automatique, dans lequel les versions Canary et de référence sont créées pour vous, n'est pas encore disponible pour Kubernetes.
    Config Name (Nom de la configuration) kayenta-test Nom de la configuration Canary que vous avez créée précédemment.
    Lifetime (Durée de vie) 0 heure 5 minutes Durée de l'analyse Canary.
    Delay (Délai) 0 Temps de préparation de l'application préalable à l'exécution de l'analyse.
    Interval (Intervalle) 5 Fenêtre temporelle que Kayenta doit utiliser pour l'exécution d'une analyse statistique.
    Baseline (Version de référence) sampleapp-baseline Déploiement sur GKE que Kayenta doit utiliser comme version de référence.
    Baseline Location (Emplacement de la version de référence) par défaut Espace de noms GKE dans lequel se trouve la version de référence.
    Canary sampleapp-canary Déploiement sur GKE que Kayenta doit utiliser comme version Canary.
    Canary Location (Emplacement de la version Canary) par défaut Espace de noms GKE dans lequel se trouve la version Canary.
  6. Dans la section Execution Options (Options d'exécution), sélectionnez Ignore the failure (Ignorer l'échec). Nous vous recommandons de sélectionner cette option pour pouvoir supprimer la version de référence et la version Canary même si l'analyse Canary a échoué. Plus tard dans le tutoriel, vous modifierez les phases pour prendre en compte un éventuel échec de l'analyse Canary.

  7. Dans le schéma du pipeline, cliquez sur Deploy to Production (Déployer en production).

    Capture d'écran du bouton "Deploy to Production" (Déployer en production) du pipeline

  8. Modifiez la section Depends On (Dépend de) comme suit :

    1. Ajoutez Canary Analysis (Analyse Canary).
    2. Supprimez Manual Judgment (Jugement manuel).
  9. Pour veiller à ce que le déploiement en production ne puisse intervenir que si l'analyse Canary se solde par une réussite, modifiez le paramètre Conditional on Expression (Subordonné à l'expression).

    ${ #stage('Canary Analysis')['status'].toString() == 'SUCCEEDED'}
    
  10. Dans le schéma du pipeline, cliquez sur Delete Canary (Supprimer la version Canary), puis modifiez la section Depends On (Dépend de) comme suit :

    1. Ajoutez Canary Analysis (Analyse Canary).
    2. Supprimez Manual Judgment (Jugement manuel).
  11. Dans le schéma du pipeline, cliquez sur Delete Baseline (Supprimer la version de référence), puis modifiez la section Depends On (Dépend de) comme suit :

    1. Ajoutez Canary Analysis (Analyse Canary).
    2. Supprimez Manual Judgment (Jugement manuel).
  12. Pour veiller à ce que l'intégralité du traitement du pipeline échoue en cas d'échec de l'analyse Canary, cliquez sur Successful deployment (Déploiement réussi) dans le schéma du pipeline, puis sur l'icône Edit (Modifier) correspondant à la condition préalable existante.

    Modifier la condition préalable existante du déploiement réussi

    1. Modifiez l'expression comme suit :

      ${ #stage('Canary Analysis')['status'].toString() == 'SUCCEEDED'}
      
    2. Cliquez sur Update (Mettre à jour).

  13. Enfin, remplacez la phase Manual Judgement (Jugement manuel) par la phase Canary Analysis (Analyse Canary) que vous venez de créer.

    1. Dans le schéma du pipeline, cliquez sur Manual Judgment (Jugement manuel).
    2. Cliquez sur Remove stage (Supprimer la phase).
  14. Cliquez sur Enregistrer les modifications. Votre pipeline ressemble maintenant à l'image suivante :Visualisation de la phase "Canary Analysis" (Analyse Canary) du pipeline

Tester le nouveau pipeline

Maintenant que l'analyse Canary automatisée est configurée, testez le pipeline pour vous assurer qu'il fonctionne comme prévu.

  1. Sélectionnez Delivery (Diffusion) > Pipelines, puis cliquez sur Start Manual Execution (Démarrer l'exécution manuelle) pour le pipeline Canary Deploy (Déploiement Canary), ou pour le pipeline Automated Canary Deploy (Déploiement Canary automatisé) si vous avez utilisé l'interface de ligne de commande.

  2. Sélectionnez un taux de réussite (Success Rate) de 60, puis cliquez sur Run (Exécuter).

  3. Pour vérifier la progression actuelle de l'analyse Canary, cliquez sur Canary Analysis (Analyse Canary), puis sur Task Status (État de la tâche). Après quelques minutes, la phase Canary Analysis (Analyse Canary) échoue, car le taux de réussite en production est actuellement de 80. Lorsque cela se produit, accédez au rapport de cette analyse Canary.

    1. Cliquez sur Canary Analysis (Analyse Canary).
    2. Cliquez sur Canary Summary (Résumé Canary).
    3. Cliquez sur l'icône Report (Rapport). Sur la page du rapport, le taux d'erreur est plus élevé pour la version Canary que pour la version de référence.

      Icône "Report" (Rapport) du résumé de la phase "Canary Analysis" (Analyse Canary)

  4. Répétez les étapes de cette section, mais sélectionnez un taux de réussite (Success Rate) de 90 pour que l'analyse Canary réussisse.

Nettoyer

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud Platform :

  1. Dans la console GCP, accédez à la page "Projets".

    Accéder à la page Projets

  2. Dans la liste des projets, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources

Si vous souhaitez conserver le projet GCP que vous avez utilisé dans ce tutoriel, supprimez les différentes ressources :

  1. Désinstallez Spinnaker.

    kubectl delete -f https://spinnaker.io/downloads/kubernetes/quick-install.yml
    
  2. Supprimez le cluster GKE.

    gcloud container clusters delete kayenta-tutorial
    
  3. Lorsque vous êtes invité à confirmer l'opération, appuyez sur Y.

Étape suivante

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…