Déployer sur GKE

Cette page explique comment déployer une application sur Kubernetes à l'aide de Cloud Build.

Cloud Build fournit un compilateur gke-deploy qui vous permet de déployer une application en conteneur vers un cluster GKE.

gke-deploy est un wrapper autour de kubectl, l'interface de ligne de commande de Kubernetes. Il applique les pratiques recommandées par Google pour le déploiement d'applications sur Kubernetes :

  • en modifiant le fichier de ressources Kubernetes de l'application pour utiliser le condensé d'une image de conteneur au lieu d'un tag ;

  • en ajoutant des libellés recommandés au fichier de ressources Kubernetes ;

  • en récupérant des identifiants pour les clusters GKE dans lesquels vous déployez l'image ;

  • en attendant que le fichier de ressources Kubernetes envoyé soit prêt.

Si vous souhaitez déployer directement vos applications à l'aide de kubectl sans ajouter de fonctionnalités, Cloud Build fournit également un compilateur kubectl, qui vous permet de déployer une application sur un Cluster GKE.

Avant de commencer

  • Créez un cluster GKE, si vous n'en avez pas déjà un.

  • Gardez le code source de votre application en conteneur à disposition, ainsi qu'un fichier Dockerfile opérationnel.

  • Vous devez disposer d'au moins un fichier de ressources Kubernetes décrivant les ressources Kubernetes qui permettent d'exécuter votre application. Si vous ne disposez pas de fichiers de ressources Kubernetes, procédez comme suit pour en générer un pour votre application :

    1. Ouvrez la page Clusters Kubernetes Engine dans Google Cloud Console.
    2. Sur la page "Clusters Kubernetes Engine", cliquez sur Déployer.
    3. Sélectionnez votre conteneur, puis cliquez sur Continuer. La section "Configuration" s'affiche.
    4. Sous "Configuration YAML", cliquez sur Afficher YAML pour obtenir un exemple de fichier de ressources Kubernetes.

Autorisations IAM requises

Ajoutez le rôle "Développeur Google Kubernetes Engine" à votre compte :

  1. Accédez à la page "Paramètres" de Cloud Build.

    Accéder à la page Paramètres de Cloud Build

    La page "Autorisations de compte de service" s'affiche alors :

    Capture d'écran de la page des autorisations de compte de service

  2. Définissez le rôle Kubernetes Engine Developer (Développeur sur Kubernetes Engine) sur l'état Activé.

Déployer une image de conteneur préconfigurée

Pour déployer une version spécifique de votre application avec gke-deploy, procédez comme suit :

  1. Assurez-vous que votre fichier de ressources Kubernetes fait référence au tag de l'image de conteneur ou au condensé appropriés.

  2. Ajoutez l'étape gke-deploy à votre fichier de configuration de compilation :

    YAML

    steps:
    ...
    # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    Où :

    • kubernetes-resource-file est le chemin d'accès du fichier de ressources Kubernetes ou le chemin d'accès du répertoire contenant vos fichiers de ressources Kubernetes.
    • cluster est le nom du cluster GKE dans lequel l'application sera déployée.
    • location est la région/zone du cluster.

    Pour plus d'informations sur les indicateurs disponibles, consultez la section sur les options gke-deploy run disponibles.

  3. Démarrez votre compilation :

    gcloud builds submit --project=project-id --config build-config
    

    Où :

    • project-id est l'ID de votre projet.
    • build-config est le nom de votre fichier de configuration de compilation.

Créer et déployer une image de conteneur

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

  1. Mettez à jour le fichier de ressources Kubernetes avec la nouvelle image de conteneur à l'aide de l'attribut --image :

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "gcr.io/project-id/image:tag", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "gcr.io/project-id/image:tag"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --image=gcr.io/project-id/image:tag
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "gcr.io/project-id/image:tag",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "gcr.io/project-id/image:tag"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--image=gcr.io/project-id/image:tag",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    Où :

    • project-id est l'ID de votre projet.
    • image est le nom que vous souhaitez donner à l'image de conteneur, généralement le nom de l'application.
    • tag est le tag de l'image du conteneur.
      • Si vous créez une image de conteneur avec chaque commit, il est recommandé d'utiliser le SHA court du commit en tant que tag. Cloud Build propose cette option en tant que substitution par défaut, $SHORT_SHA.
    • kubernetes-resource-file est le chemin d'accès du fichier de ressources Kubernetes ou le chemin d'accès du répertoire contenant vos fichiers de ressources Kubernetes.
    • cluster est le nom du cluster GKE dans lequel l'application sera déployée.
    • location est la région/zone du cluster sur laquelle le déploiement sera effectué.
  2. Démarrez votre compilation :

    gcloud builds submit --project=project-id --config build-config
    

    Où :

    • project-id est l'ID de votre projet.
    • build-config est le nom de votre fichier de configuration de compilation.

Automatiser les déploiements

Vous pouvez automatiser le déploiement de votre application sur GKE en créant un déclencheur dans Cloud Build. Vous pouvez configurer des déclencheurs pour créer et déployer des images chaque fois que vous apportez des modifications à votre code.

Pour créer un déclencheur de compilation, procédez comme suit :

  1. Ouvrez la page Déclencheurs dans Google Cloud Console :

    Ouvrir la page Déclencheurs

  2. Sélectionnez votre projet dans le menu déroulant du sélecteur de projet, en haut de la page.

  3. Cliquez sur Ouvrir.

  4. Cliquez sur Créer un déclencheur.

    Sur la page Créer un déclencheur, saisissez les paramètres suivants :

    1. Nommez votre déclencheur.

    2. Sélectionnez l'événement de dépôt pour démarrer le déclencheur.

    3. Sélectionnez le dépôt contenant le code source et le fichier de configuration de compilation.

    4. Indiquez l'expression régulière correspondant au nom de la branche ou du tag qui démarrera votre déclencheur.

    5. Choisissez une configuration pour votre déclencheur.

      Si vous choisissez un fichier de configuration Cloud Build, vous pouvez spécifier des Variables de substitution en fournissant un nom de variable et la valeur que vous souhaitez lui associer. Dans l'exemple ci-dessous, la variable de substitution définie par l'utilisateur _CLOUDSDK_CONTAINER_CLUSTER spécifie le cluster vers lequel déployer et la variable de substitution définie par l'utilisateur _CLOUDSDK_COMPUTE_ZONE spécifie son emplacement. Si vous souhaitez effectuer un déploiement sur un autre cluster, vous pouvez utiliser la même configuration de compilation et ne modifier que les valeurs des variables de substitution :

      YAML

      steps:
      ...
      # deploy container image to GKE
      - name: "gcr.io/cloud-builders/gke-deploy"
        args:
        - run
        - --filename=kubernetes-resource-file
        - --image=gcr.io/project-id/image:tag
        - --location=${_CLOUDSDK_COMPUTE_ZONE}
        - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
      

      JSON

      {
        "steps": [
          {
            "name": "gcr.io/cloud-builders/gke-deploy",
            "args": [
              "run",
              "--filename=kubernetes-resource-file",
              "--image=gcr.io/project-id/image:tag",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      Où :

      • kubernetes-resource-file est le chemin d'accès du fichier de configuration Kubernetes ou le chemin d'accès du répertoire contenant vos fichiers de ressources Kubernetes.
      • project-id est l'ID de votre projet.
      • image est le nom que vous souhaitez donner à l'image de conteneur, généralement le nom de l'application.
      • tag est le tag de l'image du conteneur.

      Pour en savoir plus sur la façon de définir des substitutions pour les fichiers de configuration de compilation, consultez la section Utiliser des substitutions définies par l'utilisateur.

  5. Cliquez sur Créer pour enregistrer le déclencheur de compilation.

Lorsque vous transférez du code vers votre dépôt, Cloud Build déclenche automatiquement une compilation. Pour en savoir plus sur les déclencheurs de compilation, consultez la pageCréer et gérer des déclencheurs de compilation.

Étape suivante