Déployer des images de conteneurs

Cette page explique comment déployer de nouveaux services et de nouvelles révisions sur Knative serving.

Avant de commencer

Pour utiliser Google Cloud CLI, vous devez d'abord installer et configurer les outils de ligne de commande.

Se connecter à des clusters GKE

Avant de pouvoir déployer des services sur Knative serving, vous devez vous connecter pour vous connecter à votre cluster GKE.

Pour en savoir plus sur la connexion à vos clusters GKE, y compris sur les options supplémentaires, consultez les pages suivantes:

Autorisations requises pour déployer

Vous devez disposer des autorisations nécessaires pour créer, mettre à jour et supprimer le groupe d'API serving.knative.dev et le genre Service. En outre, vous devez posséder UN des rôles IAM suivants :

Images que vous pouvez déployer

La taille applicable à l'image de conteneur que vous pouvez déployer est illimitée.

Vous pouvez utiliser des conteneurs de n'importe quel registre de conteneurs, tel que Docker Hub. Pour en savoir plus sur le déploiement d'images privées à partir de registres différents de Container Registry ou Artifact Registry, consultez la page Déployer des images de conteneurs privées à partir d'autres registres de conteneurs.

Déployer un nouveau service

Vous pouvez spécifier une image de conteneur avec un tag (par exemple, gcr.io/my-project/my-image:latest) ou avec un condensé exact (par exemple, gcr.io/my-project/my-image@sha256:41f34ab970ee...).

Le déploiement d'un service pour la première fois crée sa première révision. Notez que les révisions sont immuables. Si vous déployez à partir d'un tag d'image de conteneur, il sera transformé en condensé et la révision desservira toujours ce condensé.

Vous pouvez déployer un conteneur à l'aide de la console Google Cloud, de Google Cloud CLI ou d'un fichier de configuration YAML.

Cliquez sur l'onglet pour obtenir des instructions concernant l'utilisation de l'outil de votre choix.

Configuration de l'emplacement par défaut de gcloud

Si vous avez déjà configuré un emplacement dans la configuration default de Google Cloud CLI, vos commandes gcloud utilisent ces valeurs par défaut, y compris :

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

Exécutez la commande gcloud config suivante pour afficher vos paramètres pour la configuration default :

gcloud config configurations describe default

Console

Pour déployer une image de conteneur, procédez comme suit :

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

    Accéder à Knative serving

  2. Cliquez sur Create service (Créer un service) pour afficher la page Créer un service.

    Dans le formulaire :

    1. Dans le menu déroulant, sélectionnez l'un des clusters GKE disponibles pour votre service.

    2. Saisissez le nom de service souhaité. Les noms de service doivent être uniques par région et par projet ou par cluster. Vous ne pourrez pas les modifier par la suite.

    3. Sous Connectivité :

      • Sélectionnez Interne si vous souhaitez limiter l'accès aux autres services Knative serving ou aux services de votre cluster qui utilisent Istio.
      • Sélectionnez Externe pour autoriser l'accès externe à votre service.

      Sachez que vous pouvez modifier l'option de connectivité à tout moment, comme décrit sur la page Modifier les paramètres de connectivité du service.

    4. Cliquez sur Suivant pour accéder à la deuxième page du formulaire de création de service.

      Dans le formulaire :

      1. Dans la zone de texte URL de l'image du conteneur, indiquez l'URL d'une image d'un registre compatible, par exemple : us-docker.pkg.dev/cloudrun/container/hello:latest

      2. Vous pouvez également cliquer sur Show Advanced Settings (Afficher les paramètres avancés) et sur les onglets suivants pour définir les éléments suivants :

      3. Cliquez sur Créer pour déployer l'image sur Knative serving, puis attendez la fin du déploiement.

    Vous venez de déployer un service sur un cluster dans lequel Knative serving est activé.

Ligne de commande

Pour déployer une image de conteneur, procédez comme suit :

  1. Exécutez la commande gcloud run deploy :

    gcloud run deploy SERVICE --image IMAGE_URL

    • Remplacez SERVICE par le nom du service sur lequel effectuer le déploiement. Si le service spécifié n'existe pas, un nouveau service est créé.

    • Remplacez IMAGE_URL par une référence à l'image de conteneur, par exemple gcr.io/cloudrun/hello.

    • Options de déploiement supplémentaires :

      • Pour effectuer un déploiement dans un espace de noms autre que celui par défaut, vous devez spécifier cet espace de noms à l'aide du paramètre --namespace.

      • Pour effectuer un déploiement sur un emplacement autre que la configuration par défaut, vous devez spécifier les éléments name et location du cluster avec les paramètres --cluster et --cluster-location :

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Vous pouvez définir les options de connectivité à l'aide de l'option --connectivity, comme décrit dans la section Modifier les paramètres de connectivité du service afin de spécifier un accès interne ou externe.

      • Pour Knative serving sur VMware, vous devez inclure le paramètre --kubeconfig et spécifier votre fichier de configuration:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Patientez jusqu'à la fin du déploiement. Une fois l'opération achevée, un message de réussite indiquant l'URL du service déployé s'affiche.

YAML

Vous pouvez stocker votre spécification de service dans un fichier YAML, puis la déployer à l'aide de Google Cloud CLI.

  1. Créez un fichier service.yaml avec le contenu suivant :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Remplacer

    • SERVICE par le nom de votre service Knative serving ;
    • IMAGE par l'URL de votre image de conteneur

    Vous pouvez également spécifier d'autres éléments de configuration, tels que des variables d'environnement ou des limites de mémoire.

  2. Déployez le nouveau service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

Déployer une nouvelle révision d'un service existant

Vous pouvez déployer une nouvelle révision à l'aide de Google Cloud Console, de la ligne de commande gcloud ou d'un fichier de configuration YAML.

Notez que la modification des paramètres de configuration entraîne la création d'une révision, même si l'image du conteneur ne change pas. Chaque révision créée est immuable.

Cliquez sur l'onglet pour obtenir des instructions concernant l'utilisation de l'outil de votre choix.

Console

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

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

    Accéder à Knative serving

  2. Recherchez le service que vous souhaitez mettre à jour dans la liste des services, puis cliquez dessus pour en afficher les détails.

  3. Cliquez sur MODIFIER ET DÉPLOYER LA NOUVELLE RÉVISION. Le formulaire de déploiement de la révision s'affiche :

  4. Si nécessaire, fournissez l'URL de la nouvelle image de conteneur que vous souhaitez déployer.

  5. Vous pouvez également définir les éléments suivants :

  6. Pour envoyer l'ensemble du trafic vers la nouvelle révision, cochez la case intitulée Diffuser immédiatement la révision. Pour déployer progressivement une nouvelle révision, décochez cette case : le trafic ne sera pas envoyé à la nouvelle révision. Suivez les instructions pour les déploiements progressifs à l'issue du déploiement.

  7. Cliquez sur DÉPLOYER et attendez la fin du déploiement.

Ligne de commande

Pour déployer une image de conteneur, procédez comme suit :

  1. Exécutez la commande gcloud run services update :

    gcloud run services update SERVICE --image IMAGE_URL
    • Un suffixe de révision est automatiquement attribué à chaque révision. Si vous souhaitez spécifier votre propre suffixe de révision, ajoutez le paramètre --revision-suffix.

    • Remplacez SERVICE par le nom du service sur lequel effectuer le déploiement. Si le service spécifié n'existe pas, un nouveau service est créé.

    • Remplacez IMAGE_URL par une référence à l'image de conteneur, par exemple gcr.io/cloudrun/hello.

    • Options de déploiement supplémentaires :

      • Pour effectuer un déploiement dans un espace de noms autre que celui par défaut, vous devez spécifier cet espace de noms à l'aide du paramètre --namespace.

      • Pour effectuer un déploiement sur un emplacement autre que la configuration par défaut, vous devez spécifier les éléments name et location du cluster avec les paramètres --cluster et --cluster-location :

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Vous pouvez définir les options de connectivité à l'aide de l'option --connectivity, comme décrit dans la section Modifier les paramètres de connectivité du service afin de spécifier un accès interne ou externe.

      • Pour Knative serving sur VMware, vous devez inclure le paramètre --kubeconfig et spécifier votre fichier de configuration:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Patientez jusqu'à la fin du déploiement. Une fois l'opération achevée, un message de réussite indiquant l'URL du service déployé s'affiche.

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.

    1. Dans votre fichier local, mettez à jour les paramètres de révision dans n'importe quel attribut enfant de spec.template.

    2. Déployez la nouvelle révision :

      gcloud run services replace service.yaml

Déployer des images à partir d'autres projets Google Cloud

Vous pouvez déployer des images de conteneurs à partir d'autres projets Google Cloud si vous définissez les autorisations IAM appropriées :

  1. Dans la console Google Cloud, ouvrez le projet de votre service Knative serving.

  2. Accéder à la page IAM

  3. Obtenez les informations de votre compte de service :

  4. Ouvrez le projet qui contient le registre de conteneurs que vous souhaitez utiliser.

  5. Accéder à la page IAM

  6. Cliquez sur Ajouter pour ajouter une entité principale.

  7. Dans la zone de texte Nouvelles entités principales, collez l'adresse e-mail du compte de service que vous avez copié précédemment.

  8. Dans la liste déroulante Sélectionner un rôle, sélectionnez le rôle à lire dans le registre:

  9. Déployez l'image de conteneur dans le projet contenant votre service Knative serving.

Pour renforcer la sécurité, vous pouvez limiter l'accès par autorisation:

  • Artifact Registry: accordez le rôle sur le dépôt qui stocke vos images de conteneurs.
  • Container Registry: accordez le rôle au bucket Cloud Storage qui stocke vos images de conteneurs.

Déployer des images de conteneurs privées à partir d'autres registres de conteneurs

Cette section décrit la configuration des autorisations appropriées pour déployer des images de conteneurs depuis un registre privé arbitraire vers Knative serving. Un registre de conteneurs privé nécessite des identifiants pour accéder à l'image de conteneur. Notez que vous n'avez pas besoin de suivre ces étapes pour déployer des images de conteneurs privées à partir de Container Registry (obsolète) ou d'Artifact Registry dans le même projet que votre cluster.

Pour déployer une image de conteneur privée, vous devez créer un secret Kubernetes de type imagePullSecret et l'associer à un compte de service :

  1. Créez un secret imagePullSecret appelé container-registry :

    kubectl create secret docker-registry container-registry \
      --docker-server=DOCKER_REGISTRY_SERVER \
      --docker-email=REGISTRY_EMAIL \
      --docker-username=REGISTRY_USER \
      --docker-password=REGISTRY_PASSWORD
    • Remplacez DOCKER_REGISTRY_SERVER par le nom de domaine complet de votre registre privé (par exemple, https://gcr.io/ pour Container Registry ou https://hub.docker.com pour DockerHub).
    • Remplacez REGISTRY_EMAIL par votre adresse e-mail.
    • Remplacez REGISTRY_USER par votre nom d'utilisateur du registre de conteneurs.

      Si vous utilisez Container Registry ou Artifact Registry et que vous souhaitez stocker et extraire des identifiants de longue durée au lieu de transmettre des jetons d'accès de courte durée, consultez la section Méthodes d'authentification : fichier de clé JSON.

    • Remplacez REGISTRY_PASSWORD par votre mot de passe du registre de conteneurs.

  2. Ouvrez votre compte de service par défaut :

    kubectl edit serviceaccount default --namespace default

    Chaque espace de noms de votre cluster Kubernetes possède un compte de service par défaut appelé default. Ce compte de service par défaut est utilisé pour extraire votre image de conteneur, sauf indication contraire lors du deploy de votre service Knative serving.

  3. Ajoutez le secret nouvellement créé imagePullSecret à votre compte de service par défaut :

    imagePullSecrets:
    - name: container-registry
    

    Votre compte de service doit maintenant se présenter comme suit :

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

Désormais, tout pod créé dans l'espace de noms default actuel sera associé au secret imagePullSecret.

Déployer avec l'injection side-car automatique activée

Pour déployer votre service avec l'injection side-car Istio activée, consultez la section Injection side-car automatique activée dans la documentation de Cloud Service Mesh.

Déployer des services sur un réseau interne

Pour déployer des services sur un réseau interne, vous devez configurer un réseau interne privé.

Étapes suivantes

Après avoir déployé un nouveau service, vous pouvez effectuer les opérations suivantes :

Vous pouvez automatiser la création et le déploiement de vos services Knative serving à l'aide des déclencheurs Cloud Build: