Définir des variables d'environnement

Découvrez comment créer et utiliser des variables d'environnement dans Knative serving.

Lorsque vous définissez des variables d'environnement, elles sont injectées dans le conteneur et sont accessibles depuis votre code. Les variables d'environnement sont définies sous forme de paires clé/valeur. Par exemple, supposons que le service en cours d'exécution active une journalisation supplémentaire lorsqu'il lit LOGGING_VERBOSE: true dans l'environnement. Dans ce scénario, vous définissez la paire clé/valeur pour la variable d'environnement comme ceci : LOGGING_VERBOSE=true. Les commandes exactes et l'interface utilisateur sont présentées dans les sections suivantes.

Noms réservés

Les variables d'environnement définies dans le contrat d'exécution du conteneur sont réservées et ne peuvent pas être définies. En particulier, la variable d'environnement PORT est injectée dans votre conteneur par Knative serving. Vous ne devriez pas la définir vous-même.

Définir des variables d'environnement sur un service

Toute modification 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.

Vous pouvez définir des variables d'environnement à l'aide de la console Google Cloud, de Google Cloud CLI ou d'un fichier YAML lorsque vous déployez un nouveau service, ou mettez à jour un service existant et déployez une révision :

Console

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

    Accéder à Knative serving

  2. Cliquez sur Créer un service si vous configurez un nouveau service sur lequel effectuer un déploiement. Si vous configurez un service existant, cliquez sur celui-ci, puis sur Modifier et déployer la nouvelle révision.

  3. Sous Paramètres avancés, cliquez sur Variables et secrets.

  4. Procédez comme suit :

    • Si vous ajoutez une variable, cliquez sur Add Variable (Ajouter une variable) et spécifiez le nom souhaité et la valeur de cette variable dans les zones de texte Name (Nom) et Value (Valeur).
    • Si vous modifiez la valeur d'une variable, remplacez la valeur actuelle dans la zone de texte Value (Valeur) par la valeur souhaitée.
    • Si vous supprimez une ou plusieurs variables d'environnement, placez votre curseur à gauche de la zone de texte Value (Valeur) de la variable à supprimer pour afficher l'icône de la corbeille, puis cliquez dessus.

  5. Cliquez sur Suivant pour passer à la section suivante.

  6. Dans la section Configurer la manière dont ce service est déclenché, sélectionnez la connectivité que vous souhaitez utiliser pour appeler le service.

  7. Cliquez sur Créer pour déployer l'image sur Knative serving et attendez la fin du déploiement.

Ligne de commande

Vous pouvez utiliser Google Cloud CLI pour définir des variables d'environnement pour les nouveaux services ou pour mettre à jour des services existants :

  • Pour les services existants, mettez à jour les variables d'environnement en exécutant la commande gcloud run services update avec l'un des paramètres suivants :

    Exemple :

    gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2

    Remplacez :

    • SERVICE par le nom de votre service.
    • KEY1=VALUE1,KEY2=VALUE2 par une liste de paires nom/valeur séparées par des virgules pour chaque variable d'environnement. Spécifiez le nom de la variable d'environnement pour chaque clé (KEY) et la valeur de cette variable d'environnement pour VALUE. Découvrez comment spécifier plusieurs paramètres.
    • Options des paramètres de commande

      • Pour spécifier une variable d'environnement contenant une virgule (,), vous devez échapper chaque KEY=VALUE avec un délimiteur différent. Par exemple, si vous utilisez @ :
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • Pour spécifier plusieurs ensembles de paires clé/valeur, vous pouvez spécifier plusieurs paramètres pour plus de lisibilité. Exemple :
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
  • Pour les nouveaux services, définissez les variables d'environnement en exécutant la commande gcloud run deploy avec le paramètre --set-env-vars :

    gcloud run deploy SERVICE --image=IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2

    Remplacez :

    • IMAGE_URL par une référence à l'image de conteneur, par exemple gcr.io/cloudrun/hello ;
    • SERVICE par le nom de votre service.
    • KEY1=VALUE1,KEY2=VALUE2 par une liste de paires nom/valeur séparées par des virgules pour chaque variable d'environnement. Spécifiez le nom de la variable d'environnement pour chaque clé (KEY) et la valeur de cette variable d'environnement pour VALUE. Découvrez comment spécifier plusieurs paramètres.
    • Options des paramètres de commande

      • Pour spécifier une variable d'environnement contenant une virgule (,), vous devez échapper chaque KEY=VALUE avec un délimiteur différent. Par exemple, si vous utilisez @ :
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • Pour spécifier plusieurs ensembles de paires clé/valeur, vous pouvez spécifier plusieurs paramètres pour plus de lisibilité. Exemple :
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"

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 les attributs name et value sous l'attribut env sous containers: :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - env:
            - name: KEY-1
              value: VALUE-1
            - name: KEY-N
              value: VALUE-N

    Remplacer

    • SERVICE par le nom de votre service Knative serving
    • KEY-1, VALUE-1 par la variable d'environnement et la valeur. Si vous le souhaitez, vous pouvez ajouter d'autres variables accompagnées de leur valeur.
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml

Définir des variables d'environnement par défaut dans le conteneur

Vous pouvez utiliser l'instruction ENV dans un fichier Dockerfile pour définir les valeurs par défaut des variables d'environnement :

ENV KEY1=VALUE1,KEY2=VALUE2

Ordre de priorité entre les variables de conteneur et les variables de service

Si vous définissez une variable d'environnement par défaut dans le conteneur et définissez une variable d'environnement portant le même nom sur le service Knative serving, la valeur définie au niveau du service est prioritaire.

Pour utiliser les liens de services Kubernetes, vous devez activer manuellement la compatibilité. En raison des problèmes de performances constatés dans les espaces de noms avec des milliers de services et de révisions, les liens de services Kubernetes ont été désactivés par défaut en janvier 2021.

Pour activer les liens de service Kubernetes, exécutez la commande suivante pour définir data.enable-service-links sur true dans votre ConfigMap knative-serving/config-defaults :

kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}