Sélectionner un environnement d'exécution pour les services

Toutes les instances Cloud Run sont mises en bac à sable. La technologie de bac à sable et les fonctionnalités disponibles diffèrent selon l'environnement d'exécution sélectionné.

L'environnement d'exécution de première génération est basé sur gVisor et offre des temps de démarrage à froid rapides, ainsi que l'émulation de la plupart des appels du système d'exploitation.

L'environnement d'exécution de deuxième génération est une microVM et offre une compatibilité Linux complète plutôt qu'une émulation d'appel système. Cet environnement d'exécution fournit les éléments suivants :

  • Performances du processeur plus rapides
  • Performances réseau plus rapides, en particulier en cas de perte de paquets
  • Compatibilité complète avec Linux, y compris les appels système, les espaces de noms et les groupes de contrôle
  • Système de fichiers réseau compatible

Même si l'environnement d'exécution de deuxième génération fonctionne généralement plus rapidement en cas de charge soutenue, il présente, pour certains services, des temps de démarrage à froid supérieurs à ceux de l'environnement de première génération.

Les deux environnements d'exécution ont le même prix. Pour en savoir plus, consultez la page des tarifs de Cloud Run.

Sélectionner un environnement d'exécution pour un service Cloud Run

Par défaut, aucun environnement d'exécution n'est spécifié pour les services Cloud Run, ce qui signifie que Cloud Run sélectionne l'environnement d'exécution en fonction des fonctionnalités utilisées. Si vous ne spécifiez pas d'environnement d'exécution pour votre service, Cloud Run peut sélectionner l'environnement de première ou de deuxième génération.

Les jobs Cloud Run et les pools de nœuds de calcul n'utilisent que l'environnement d'exécution de deuxième génération, et celui-ci ne peut pas être modifié.

Choisir un environnement d'exécution

Vous devez utiliser la première génération si l'une des conditions suivantes s'applique :

  • Votre service Cloud Run présente un trafic intensif et doit évoluer rapidement vers de nombreuses instances, ou votre service est sensible aux temps de démarrage à froid.
  • Votre service Cloud Run génère peu de trafic, ce qui entraîne un scaling horizontal fréquent à partir de zéro.
  • Vous souhaitez utiliser moins de 512 Mio de mémoire. L'environnement d'exécution de deuxième génération nécessite au moins 512 Mio de mémoire.

Vous devez utiliser la deuxième génération si l'une des conditions suivantes s'applique à votre service Cloud Run :

  • Votre service doit utiliser NFS, qui n'est compatible qu'avec la deuxième génération.
  • Votre service dispose d'un trafic relativement stable et tolère les démarrages à froid légèrement plus lents.
  • Votre service dispose de charges de travail intensives.
  • Votre service peut bénéficier de performances réseau plus rapides.
  • Votre service utilise la sortie VPC directe pour envoyer du trafic vers un réseau VPC et nécessite les meilleures performances réseau possibles.
  • Votre service doit utiliser des logiciels présentant des problèmes avec la première génération en raison d'appels système non mis en œuvre.
  • Votre service nécessite une fonctionnalité cgroup Linux.
  • Votre service utilise une infrastructure tierce pour sécuriser les conteneurs.

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer et déployer des services Cloud Run, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Si vous déployez un service ou une fonction à partir du code source, vous devez également disposer de rôles supplémentaires dans votre projet et votre compte de service Cloud Build.

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec des APIGoogle Cloud , telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.

Définir et mettre à jour l'environnement d'exécution

Tout changement de configuration entraîne la création d'une révision. Les révisions ultérieures obtiennent aussi automatiquement le même paramètre de configuration, à moins que vous ne le mettiez explicitement à jour.

Par défaut, l'environnement d'exécution des services Cloud Run est non spécifié, ce qui signifie que c'est Cloud Run qui va sélectionner un environnement d'exécution approprié. Vous pouvez également spécifier un environnement d'exécution. Pour utiliser l'environnement de deuxième génération, vous devez spécifier au moins 512 Mio de mémoire.

Vous pouvez définir l'environnement d'exécution à l'aide de la console Google Cloud , de la ligne de commande gcloud ou d'un fichier YAML lorsque vous créez un service ou que vous déployez une nouvelle révision :

Console

  1. Dans la console Google Cloud , accédez à Cloud Run :

    Accédez à Cloud Run

  2. Sélectionnez Services dans le menu de navigation Cloud Run, puis cliquez sur Déployer un conteneur pour configurer un nouveau service. Si vous configurez un service existant, cliquez sur celui-ci puis sur Modifier et déployer la nouvelle révision.

  3. Si vous configurez un nouveau service, remplissez la page initiale des paramètres du service, puis cliquez sur Conteneur(s), Volumes, Mise en réseau, Sécurité pour développer la page de configuration du service.

  4. Cliquez sur l'onglet Conteneur.

    image

    • Sélectionnez l'environnement d'exécution souhaité à l'aide des boutons d'option. Conservez "Par défaut" pour laisser Cloud Run sélectionner un environnement d'exécution approprié.
  5. Cliquez sur Créer ou Déployer.

gcloud

Vous pouvez mettre à jour l'environnement d'exécution d'un service donné à l'aide de la commande suivante :

gcloud run services update SERVICE --execution-environment ENVIRONMENT

Remplacez SERVICE par le nom de votre service et ENVIRONMENT par l'environnement d'exécution souhaité. Spécifiez la valeur gen1 pour la première génération ou gen2 pour la deuxième génération.

Vous pouvez également définir l'environnement d'exécution lors du déploiement à l'aide de la commande suivante :

gcloud run deploy --image IMAGE_URL --execution-environment ENVIRONMENT

Remplacez les éléments suivants :

  • IMAGE_URL : référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL est au format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • ENVIRONMENT : environnement d'exécution souhaité. Spécifiez la valeur gen1 pour la première génération ou gen2 pour la deuxième génération.

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Défininir l'annotation run.googleapis.com/execution-environment :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: ENVIRONMENT

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service Cloud Run.
    • ENVIRONMENT : environnement d'exécution sélectionné. Spécifiez la valeur gen1 pour un environnement de première génération ou gen2 pour un environnement de deuxième génération.

    Supprimez l'annotation run.googleapis.com/execution-environment pour le comportement par défaut.

  3. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

Terraform

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.

Ajoutez les éléments suivants à une ressource google_cloud_run_v2_service dans votre configuration Terraform :
resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-execution-environment"
  location = "REGION"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    execution_environment = "ENVIRONMENT"
  }
}

Remplacez les éléments suivants :

  • REGION : région Google Cloud . Exemple : europe-west1.
  • ENVIRONMENT : EXECUTION_ENVIRONMENT_GEN1 pour la première génération ou EXECUTION_ENVIRONMENT_GEN2 pour la deuxième génération.

Afficher les paramètres de l'environnement d'exécution

Pour afficher les paramètres actuels de l'environnement d'exécution de votre service Cloud Run, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Services de Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur le service qui vous intéresse pour ouvrir la page Informations sur le service.

  3. Cliquez sur l'onglet Révisions.

  4. Dans le panneau de détails situé à droite, le paramètre "Environnement d'exécution" est répertorié sous l'onglet Conteneur.

gcloud

  1. Exécutez la commande suivante :

    gcloud run services describe SERVICE
  2. Recherchez le paramètre d'environnement d'exécution dans la configuration renvoyée.

Arrêts progressifs

Lorsqu'une instance Cloud Run est en cours d'arrêt, elle reçoit un signal SIGTERM pour permettre un arrêt progressif de 10 secondes.

Gérer le signal SIGTERM

Nous vous recommandons d'installer un gestionnaire SIGTERM, en particulier si vous utilisez la facturation basée sur les requêtes.

La gestion des SIGGIS permet à votre conteneur d'effectuer les tâches de nettoyage nécessaires, telles que le vidage des journaux avant de quitter. Si votre conteneur n'intercepte pas SIGTERM, il aura toujours 10 secondes pour effectuer ces tâches. Ces 10 secondes sont facturables.

Vérifier si votre conteneur gère le signal SIGTERM

Pour déterminer si votre conteneur dispose d'un gestionnaire SIGTERM, procédez comme suit :

  1. Démarrez Cloud Shell. Vous pouvez trouver Bouton d'activation de Cloud Run Activer Cloud Shell dans l'en-tête de la page de documentation sur laquelle vous vous trouvez. Vous devrez peut-être l'autoriser et attendre qu'il soit provisionné. Vous pouvez également démarrer une session autonome.

  2. Exécuter le conteneur localement dans Cloud Shell :

    docker run IMAGE_URL

    Remplacez IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL est au format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

  3. Ouvrez un autre onglet dans Cloud Shell et obtenez la liste des conteneurs s'exécutant dans la session Cloud Shell actuelle :

    docker container ls

    Vous devez localiser l'ID de conteneur renvoyé par la commande.

  4. Utiliser l'ID du conteneur pour envoyer un signal SIGTERM

    docker kill -s SIGTERM CONTAINER_ID
  5. Revenez à l'onglet où vous avez appelé docker run pour voir si le conteneur s'est fermé (arrêté). Si le signal SIGTERM a entraîné la fermeture de votre conteneur, celui-ci gère le signal SIGTERM.

Gérer le signal SIGTERM

Si votre conteneur ne gère pas le signal SIGTERM, le moyen le plus simple d'ajouter un gestionnaire SIGTERM consiste à encapsuler le service avec tini. Ainsi, votre service s'exécute en tant que sous-processus de tini, qui prend le rôle de processus d'initialisation de conteneur. Reportez-vous aux instructions Docker pour obtenir des instructions.

Vous pouvez également modifier votre application pour qu'elle gère directement SIGTERM.

Étapes suivantes