Test Google Cloud Deploy et Cloud Run

Ce document est un tutoriel de test qui vous permet d'être opérationnel avec un pipeline de livraison dans Google Cloud Deploy qui déploie des conteneurs sur Cloud Run. À la fin de ce tutoriel, vous disposerez d'un pipeline CD ciblant Cloud Run avec deux environnements : dev et prod. Vous pouvez déployer et promouvoir de nouvelles images de conteneurs via les étapes du pipeline, et observer le processus sur Google Cloud Console.

Ce tutoriel repose sur plusieurs services Google Cloud, notamment Config Controller, ainsi que sur des services pré-DG qui sont toujours disponibles en version bêta et ne sont pas accessibles à tous (API Cloud Run Admin v2). Config Controller vous permet de provisionner des ressources GCP de manière déclarative à l'aide du modèle de ressource Kubernetes (KRM). Google Cloud Deploy crée et gère des services Cloud Run dans le cadre de son pipeline de livraison à l'aide de Config Controller.

Si vous avez des questions, des bugs ou des commentaires, contactez-nous à l'adresse clouddeploy-feedback-external@google.com.

Tutoriel sur Cloud Shell

Les instructions de ce document sont également incluses dans un tutoriel facile à suivre, basé sur Cloud Shell. Vous pouvez suivre ce tutoriel tout en utilisant ce document pour obtenir des conseils et du contexte.

Configurer votre environnement

  1. Créez un projet et définissez le projet par défaut pour Google Cloud CLI.

    Nous vous recommandons de commencer avec un nouveau projet.

    gcloud config set project PROJECT_ID
    

    Dans la commande ci-dessus, remplacez PROJECT_ID par l'ID de votre projet. Dans ce document, le code (commandes et fichiers) contient {PROJECT_ID} en tant qu'espace réservé. Si vous le remplacez ici, toutes les instances de ce document seront insérées, sauf si vous actualisez la page.

  2. Activez les API requises :

    gcloud services enable \
        krmapihosting.googleapis.com \
        clouddeploy.googleapis.com \
        compute.googleapis.com \
        run.googleapis.com
    

    Cette commande active les API suivantes, dont vous avez besoin pour effectuer ce test:

    • Compute Engine
    • Config Controller
    • Google Cloud Deploy
    • Cloud Build (activé via Google Cloud Deploy)
    • Cloud Storage (activé via Google Cloud Deploy)
    • Resource Manager
    • Cloud Run
    • Google Kubernetes Engine (activé via Config Controller)
  3. Assurez-vous d'avoir installé et configuré Google Cloud CLI.

    En outre, vous devez vous assurer que kubectl est installé:

    which kubectl || gcloud components install kubectl
    

    Si vous exécutez des commandes à partir de Cloud Shell, ces composants sont déjà installés pour vous.

  4. Configurer le compte de service Compute Engine par défaut

    Par défaut, Google Cloud Deploy utilise le compte de service Compute Engine par défaut. Le compte de service dispose peut-être déjà des autorisations nécessaires. Cette étape est incluse pour les organisations qui désactivent l'attribution automatique des rôles pour les comptes de service par défaut.

    Exécutez les commandes suivantes pour vous assurer que le compte de service dispose des autorisations appropriées:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
        --role="roles/clouddeploy.jobRunner"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
        --role="roles/container.developer"
    
  5. Consultez la présentation de Google Cloud Deploy.

    Cette présentation vous aidera à comprendre le service et les concepts Google Cloud Deploy.

Configurer Config Controller

Google Cloud Deploy déploie vos services et révisions Cloud Run à l'aide d'une instance Config Controller.

  1. Avant de créer le contrôleur de configuration, assurez-vous qu'il existe un réseau par défaut:

    gcloud compute networks list
    

    Les résultats de la console réussis se présentent comme suit:

    NAME: default
    SUBNET_MODE: AUTO
    BGP_ROUTING_MODE: REGIONAL
    IPV4_RANGE:
    GATEWAY_IPV4:
    

    Si vous n'avez pas de réseau par défaut, exécutez la commande suivante:

    gcloud compute networks create default --subnet-mode=auto
    

    Si le résultat est correct, vous n'avez pas besoin d'exécuter cette commande.

    Si vous rencontrez d'autres problèmes, consultez le guide de dépannage de Config Controller ou contactez l'administrateur de votre organisation.

  2. Créez votre instance Config Controller.

    gcloud anthos config controller create cc-deployrun --location=us-central1
    
  1. Accordez des autorisations Config Controller aux projets sur lesquels vous souhaitez effectuer le déploiement. La commande suivante donne les autorisations minimales nécessaires à Config Controller pour créer et gérer des services Cloud Run dans votre projet.

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    
    gcloud projects add-iam-policy-binding "PROJECT_ID" \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/run.admin" \
        --project "PROJECT_ID"
    
    gcloud projects add-iam-policy-binding "PROJECT_ID" \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/iam.serviceAccountUser" \
        --project "PROJECT_ID"
    

Créer vos fichiers de configuration

Google Cloud Deploy fournit des informations détaillées sur les éléments à déployer et sur la manière de le déployer correctement pour vos cibles distinctes à l'aide de Skaffold. Pour ce test, nous avons deux cibles: run-dev et run-prod.

Cibles de test Cloud Run de Google Cloud Deploy, run-dev et run-prod

Dans cette section, vous allez créer un fichier skaffold.yaml qui identifie les fichiers manifestes Cloud Run qui déploieront votre application via un pipeline de livraison Google Cloud Deploy. Vous allez également créer des fichiers manifestes pour vos services Cloud Run, un pour chaque environnement cible (respectivement run-dev-service.yaml et run-prod-service.yaml).

  1. Créez un répertoire pour vos fichiers manifestes et accédez-y:

    mkdir deploy-cloudrun
    cd deploy-cloudrun
    
  2. Créez le fichier skaffold.yaml dans ce répertoire.

    skaffold.yaml indique à Google Cloud Deploy quels fichiers manifestes doivent être déployés pour chaque cible du pipeline, pour une version donnée.

    apiVersion: skaffold/v2beta26
    kind: Config
    profiles:
     - name: prod
       deploy:
         kubectl:
           manifests:
             - run-prod-*.yaml
     - name: dev
       deploy:
         kubectl:
           manifests:
             - run-dev-*.yaml
    
  3. Créez le fichier run-dev-service.yaml dans le même répertoire.

    Ce fichier manifeste déclaratif représente la version de l'environnement dev de votre service Cloud Run.

    Notez les paramètres personnalisés pour cet environnement, tels que la limitation du scaling des conteneurs à deux instances. Des étiquettes et un nom permettent de distinguer cette version du service de votre projet. Notez que le nom de l'image est une variable run-container plutôt qu'une image de conteneur spécifique. Elle est remplacée par une image de conteneur spécifique lorsque vous créez une version dans Google Cloud Deploy.

    apiVersion: run.cnrm.cloud.google.com/v1beta1
    kind: RunService
    metadata:
      labels:
        cloud-deploy-target: run-dev
      name: deploytest-dev
      namespace: config-control
    spec:
      ingress: INGRESS_TRAFFIC_ALL
      location: us-central1
      projectRef:
        external: projects/PROJECT_ID
      template:
        containers:
          - env:
              - name: environment
                value: dev
            image: run-container
        scaling:
          maxInstanceCount: 2
      traffic:
        - percent: 100
          type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST
    
  4. Créez le fichier run-prod-service.yaml dans le même répertoire.

    Ce fichier manifeste représente la version prod de votre service Cloud Run. Notez le nouveau nom, les nouveaux libellés et les nouveaux paramètres de scaling, ainsi que la réutilisation de run-container.

    apiVersion: run.cnrm.cloud.google.com/v1beta1
    kind: RunService
    metadata:
      labels:
        cloud-deploy-target: run-prod
      name: deploytest-prod
      namespace: config-control
    spec:
      ingress: INGRESS_TRAFFIC_ALL
      location: us-central1
      projectRef:
        external: projects/PROJECT_ID
      template:
        containers:
          - env:
              - name: environment
                value: prod
            image: run-container
        scaling:
          maxInstanceCount: 10
      traffic:
        - percent: 100
          type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST
    

Créer votre pipeline de livraison et vos cibles

Vous pouvez définir votre pipeline de livraison Google Cloud Deploy et vos cibles dans un ou plusieurs fichiers. Dans ce tutoriel, par souci de simplicité, vous allez créer un seul fichier.

  1. Dans le répertoire contenant vos fichiers manifestes récemment créés (/deploy-cloudrun/), créez le fichier clouddeploy.yaml:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
     name: my-run-app-1
    description: main application pipeline
    serialPipeline:
     stages:
     - targetId: run-dev
       profiles:
       - dev
     - targetId: run-prod
       profiles:
       - prod
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
     name: run-dev
    description: Cloud Run development environment
    gke:
     cluster: projects/PROJECT_ID/locations/us-central1/clusters/krmapihost-cc-deployrun
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
     name: run-prod
    description: Cloud Run production environment
    gke:
     cluster: projects/PROJECT_ID/locations/us-central1/clusters/krmapihost-cc-deployrun
    

    cloudeploy.yaml définit une séquence de progression de deux étapes dans le pipeline de livraison: run-dev et run-prod. Le fichier définit également des cibles pour chacune de ces deux étapes.

    Notez que les deux cibles pointent vers le même contrôleur de configuration qu'un cluster GKE. Config Controller, qui est compatible avec un cluster GKE sous-jacent créé au moment de la création de Config Controller, crée les services Cloud Run pour chaque environnement à l'aide de leur fichier manifeste.

    Votre cluster GKE

  2. Enregistrez le pipeline de livraison et les cibles auprès de Google Cloud Deploy:

    gcloud deploy apply --file clouddeploy.yaml --region=us-central1
    

    Le résultat doit se présenter comme suit :

    Waiting for the operation on resource projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1...done.
    Created Cloud Deploy resource: projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1.
    Waiting for the operation on resource projects/sample-project/locations/us-central1/targets/run-dev...done.
    Created Cloud Deploy resource: projects/sample-project/locations/us-central1/targets/run-dev.
    Waiting for the operation on resource projects/sample-project/locations/us-central1/targets/run-prod...done.
    Created Cloud Deploy resource: projects/sample-project/locations/us-central1/targets/run-prod.
    

Créer une version et déployer le conteneur

Une fois les fichiers de configuration préparés et le pipeline de livraison et les cibles enregistrés, nous pouvons maintenant créer la ressource de version qui représente l'image de conteneur à déployer. Nous allons utiliser un exemple de conteneur pour déployer echoserver:

gcloud deploy releases create run-release-001 --project=PROJECT_ID --region=us-central1 --delivery-pipeline=my-run-app-1 --labels="use-case=my-cloud-run-experiment" --images=run-container="us-docker.pkg.dev/cloudrun/container/hello"

Le résultat doit se présenter comme suit :

Creating temporary tarball archive of 4 file(s) totalling 2.0 KiB before compression.
Uploading tarball of [.] to [gs://sample-project_clouddeploy_us-central1/source/1643560782.447815-aed1fdf4973b4d25b9b7d09ff9fbbaa9.tgz]
Waiting for operation [operation-1643560782826-5d6cf50a08a8d-e40f7a45-ac4aa0ae]...done.
Created Cloud Deploy release run-release-001.
Creating rollout projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1/releases/run-release-001/rollouts/run-release-001-to-run-dev-0001 in target run-dev...done.

Comme il s'agit de la première version (déploiement dans la première cible de la progression), Google Cloud Deploy crée automatiquement une ressource de déploiement et déploie l'application dans la première cible de la progression (run-dev). Vous devrez peut-être attendre quelques minutes jusqu'à la fin de l'opération (état de déploiement : SUCCEEDED). Vous pouvez suivre l'état du déploiement à l'aide de la commande suivante:

gcloud deploy rollouts list --delivery-pipeline=my-run-app-1 --region=us-central1 --release run-release-001

Le résultat doit se présenter comme suit :

approvalState: DOES_NOT_NEED_APPROVAL
createTime: '2022-02-10T21:25:11.228171Z'
deployEndTime: '2022-02-10T21:26:37.984888Z'
deployStartTime: '2022-02-10T21:26:09.778897390Z'
deployingBuild: projects/435050644073/locations/us-central1/builds/59f588d1-0cbc-4c46-9574-7e3f3b763ae6
enqueueTime: '2022-02-10T21:26:09.108240Z'
etag: 5f57d54f8b11d20e
name: projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1/releases/run-release-001/rollouts/run-release-001-to-run-dev-0001
state: SUCCEEDED
targetId: run-dev
uid: 9cab18e1dfea4054b7d182b707c21f75

Maintenant que l'application a été déployée sur la première cible, nous pouvons vérifier que le service Cloud Run (deploytest-dev) s'exécute comme prévu:

gcloud run services list --region=us-central1

Le résultat doit se présenter comme suit :


SERVICE: deploytest-dev
REGION: us-central1
URL: https://deploytest-dev-k5kzux4u6a-uc.a.run.app
LAST DEPLOYED BY: service-435050644073@gcp-sa-yakima.iam.gserviceaccount.com
LAST DEPLOYED AT: 2022-01-30T04:25:13.081829Z

Promouvoir la release

Maintenant que l'application est déployée dans la première cible, run-dev, promouvez-la à l'aide de la commande suivante:

gcloud deploy releases promote --release=run-release-001 --delivery-pipeline=my-run-app-1 --region=us-central1 --project=PROJECT_ID

Le résultat doit se présenter comme suit :

Promoting release run-release-001 to target run-prod.

Do you want to continue (Y/n)? Y

Creating rollout projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1/releases/run-release-001/rollouts/run-release-001-to-run-prod-0001 in target run-prod...done.

Promouvoir la release depuis Google Cloud Console

Une fois l'opération terminée, vérifiez à nouveau que le service de production Cloud Run est en cours d'exécution:

gcloud run services list --region=us-central1

Le résultat doit se présenter comme suit :


SERVICE: deploytest-dev
REGION: us-central1
URL: https://deploytest-dev-k5kzux4u6a-uc.a.run.app
LAST DEPLOYED BY: service-435050644073@gcp-sa-yakima.iam.gserviceaccount.com
LAST DEPLOYED AT: 2022-01-30T04:25:13.081829Z


SERVICE: deploytest-prod
REGION: us-central1
URL: https://deploytest-prod-k5kzux4u6a-uc.a.run.app
LAST DEPLOYED BY: service-435050644073@gcp-sa-yakima.iam.gserviceaccount.com
LAST DEPLOYED AT: 2022-01-30T16:04:43.468907Z

Services Cloud Run

Afficher les résultats dans la console Cloud Deploy

Pour afficher la progression de la publication via le pipeline de livraison, ouvrez la console Google Cloud Deploy et accédez au pipeline de livraison my-run-app-1.

Progression des versions dans la visualisation du pipeline

Examiner la release

Vous pouvez afficher les détails de la version créée en cliquant sur le nom associé run-release-001 dans la table des versions de la vue détaillée du pipeline de livraison.

Dans la vue des détails de la version, vous pouvez inspecter davantage des éléments, tels que le paramètre d'images (conteneur) spécifié (artefacts de compilation) et les fichiers manifestes de service rendus.

Détails de la release

Examiner le déploiement

Chaque déploiement est également répertorié sur la page "Version". Cliquez sur le nom d'un déploiement pour accéder à ses informations. Celles-ci contiennent des informations détaillées sur le déploiement ainsi que les journaux de rendu et de déploiement.

Informations sur le déploiement

Afficher le service dans la console Cloud Run

Vous pouvez vérifier que le service a démarré correctement à l'aide des journaux de service créés dans la console Cloud Run.

Journaux du service Cloud Run

Exercices du défi

À ce stade, vous avez créé un pipeline de livraison de services Cloud Run, promouvant un conteneur d'un environnement de développement dans un environnement de production. Vous trouverez ci-dessous la liste des exercices challenge que vous pouvez effectuer pour explorer plus en détail les pipelines de livraison Cloud Run dans Google Cloud Deploy.

  • Ajoutez une approbation au pipeline de livraison pour l'environnement de service de production.

  • Convertissez l'un de vos services Cloud Run existants pour utiliser un pipeline de livraison Google Cloud Deploy.

  • Configurez un fichier manifeste de service Cloud Run pour dev et prod à l'aide de Kustomize. (Consultez également le tutoriel de présentation des profils Skaffold de Google Cloud Deploy.)

Effectuer un nettoyage

Une fois ce test terminé, vous pouvez soit supprimer votre projet, soit supprimer les ressources du projet afin d'éviter que des frais liés à ces ressources ne soient facturés sur votre compte Google Cloud.

  1. Supprimez directement des clusters les services Cloud Run déployés via Config Controller.

    La suppression de l'espace de noms du cluster Config Controller garantit la suppression de tous les services Cloud Run créés.

    kubectl -n config-control delete runservice deploytest-dev
    
    kubectl -n config-control delete runservice deploytest-prod
    
  2. Supprimez Config Controller:

    gcloud anthos config controller delete cc-deployrun  --location=us-central1 --project=PROJECT_ID
    
  3. Supprimez le pipeline de livraison:

    gcloud deploy delivery-pipelines delete my-run-app-1 --force --region=us-central1 --project=PROJECT_ID
    

    Cette opération supprime le pipeline de livraison lui-même, ainsi que toutes les ressources de publication et de déploiement que Google Cloud Deploy a créées pour ce pipeline.

  4. Supprimez les buckets Cloud Storage créés par Google Cloud Deploy à l'aide de la console Cloud Storage.

    Les buckets de stockage peuvent être identifiés à l'aide de conventions d'attribution de noms telles que [PROJECT]_clouddeploy_[region] et [region].deploy-artifacts.[project-id].appspot.com, et à l'aide de la commande suivante:

    gsutil ls | egrep "_clouddeploy_|deploy-artifacts.PROJECT_ID.appspot.com" | xargs --max-lines=1 echo gsutil gsutil -m rm -r
    

    Les commandes à exécuter s'affichent une fois que vous avez vérifié que la liste des buckets est correcte:

    gsutil rb gs://PROJECT_ID_clouddeploy_us-central1/
    gsutil rb gs://us-central1.deploy-artifacts.PROJECT_ID.appspot.com/