Guide de démarrage rapide : déployer une application dans une image de conteneur sur un cluster GKE
Cette page vous explique comment :
- Créer une application Hello World
- Empaqueter l'application dans une image de conteneur à l'aide de Cloud Build
- Créer un cluster dans Google Kubernetes Engine (GKE)
- Déployer l'image de conteneur sur votre cluster.
L'exemple est proposé dans plusieurs langages, mais vous pouvez en utiliser d'autres en plus de ceux présentés.
Pour obtenir des instructions détaillées sur cette tâche directement dans l'éditeur Cloud Shell, cliquez sur Visite guidée :
Avant de commencer
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
kubectl
permet de gérer Kubernetes, le système d'orchestration de clusters utilisé par GKE. Vous pouvez installerkubectl
à l'aide degcloud
:gcloud components install kubectl
Écrire l'exemple d'application
Pour obtenir des instructions sur la création d'une application Hello World exécutée dans GKE, cliquez sur votre langage :
Go
Créez un répertoire nommé
helloworld-gke
et modifiez les sous-répertoires comme suit :mkdir helloworld-gke cd helloworld-gke
Créez un module nommé
example.com/helloworld
:go mod init example.com/helloworld
Créez un fichier nommé
helloworld.go
et collez-y le code suivant :Ce code crée un serveur Web qui écoute le port défini par la variable d'environnement
PORT
.
Votre application est terminée et prête à être empaquetée dans un conteneur Docker, puis importée dans Artifact Registry.
Node.js
Créez un répertoire nommé
helloworld-gke
et accédez à ce répertoire :mkdir helloworld-gke cd helloworld-gke
Créez un fichier
package.json
avec le contenu suivant :Dans le même répertoire, créez un fichier
index.js
, puis copiez les lignes suivantes dans ce fichier :Ce code crée un serveur Web qui écoute le port défini par la variable d'environnement
PORT
.
Votre application est terminée et prête à être empaquetée dans un conteneur Docker, puis importée dans Artifact Registry.
Python
Créez un répertoire nommé
helloworld-gke
et accédez à ce répertoire :mkdir helloworld-gke cd helloworld-gke
Créez un fichier nommé
app.py
et collez le code suivant dans ce fichier :
Java
Créez une application Spring Boot.
Installez Java SE 8 ou une version ultérieure du JDK, et cURL. Java SE et cURL ne sont requis que pour créer le projet Web à l'étape suivante. Le fichier Docker, décrit ultérieurement, charge toutes les dépendances dans le conteneur.
Depuis votre terminal, créez un projet Web vide :
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d javaVersion=1.8 \ -d type=maven-project \ -d bootVersion=2.6.6 \ -d name=helloworld \ -d artifactId=helloworld \ -d baseDir=helloworld-gke \ -o helloworld-gke.zip unzip helloworld-gke.zip cd helloworld-gke
Vous disposez maintenant d'un nouveau projet Spring Boot dans
helloworld-gke
.Dans le fichier
src/main/java/com/example/helloworld/HelloworldApplication.java
, mettez à jour la classeHelloworldApplication
en ajoutant un champ@RestController
pour gérer le mappage/
.Ce code crée un serveur Web qui écoute le port défini par la variable d'environnement
PORT
.
Votre application est terminée et prête à être empaquetée dans un conteneur Docker, puis importée dans Artifact Registry.
C#
Installez le SDK .NET. Le SDK .NET n'est requis que pour créer le projet Web à l'étape suivante. Le fichier
Dockerfile
, décrit ultérieurement, charge toutes les dépendances dans le conteneur.Depuis votre terminal, créez un projet Web vide :
dotnet new web -o helloworld-gke
Remplacez le répertoire par
helloworld-gke
.cd helloworld-gke
Mettez à jour
Program.cs
pour écouter sur le port8080
:
Votre application est terminée et prête à être empaquetée dans un conteneur Docker, puis importée dans Artifact Registry.
PHP
Créez un répertoire nommé
helloworld-gke
et accédez à ce répertoire :mkdir helloworld-gke cd helloworld-gke
Créez un fichier nommé
index.php
et collez le code suivant dans ce fichier :
Votre application est terminée et prête à être empaquetée dans un conteneur Docker, puis importée dans Artifact Registry.
Conteneuriser l'application à l'aide de Cloud Build
Pour conteneuriser l'exemple d'application, créez un fichier nommé
Dockerfile
dans le même répertoire que les fichiers sources, puis copiez le contenu suivant :Go
Node.js
Ajoutez un autre fichier
.dockerignore
pour vous assurer que les fichiers locaux n'affectent pas le processus de création du conteneur :Python
Ajoutez un fichier
.dockerignore
pour vous assurer que les fichiers locaux n'affectent pas le processus de création du conteneur :Java
C#
Ajoutez un fichier
.dockerignore
pour vous assurer que les fichiers locaux n'affectent pas le processus de création du conteneur :PHP
Ajoutez un fichier
.dockerignore
pour vous assurer que les fichiers locaux n'affectent pas le processus de création du conteneur :Obtenez votre ID de projet Google Cloud :
gcloud config get-value project
Dans ce guide de démarrage rapide, vous allez stocker votre conteneur dans Artifact Registry et le déployer sur votre cluster à partir du registre. Exécutez la commande suivante pour créer un dépôt nommé
hello-repo
dans le même emplacement que votre cluster :gcloud artifacts repositories create hello-repo \ --project=PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="Docker repository"
Remplacez les valeurs suivantes :
PROJECT_ID
correspond à votre ID de projet Google Cloud.
Créez votre image de conteneur à l'aide de Cloud Build. Ce processus est semblable à l'exécution de
docker build
etdocker push
, mais il est effectué sur Google Cloud.gcloud builds submit \ --tag us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke .
L'image est stockée dans Container Registry.
Créer un cluster GKE
Un cluster GKE est un ensemble géré de machines virtuelles Compute Engine fonctionnant comme un cluster GKE unique.
Créez le cluster.
gcloud container clusters create-auto helloworld-gke \ --location us-central1
Vérifiez que vous avez accès au cluster. La commande suivante répertorie les nœuds de votre cluster de conteneurs qui sont opérationnels et indique que vous avez accès au cluster.
kubectl get nodes
Si vous rencontrez des erreurs, consultez le guide de dépannage de Kubernetes.
Déployer sur GKE
Pour déployer votre application sur le cluster GKE que vous avez créé, vous avez besoin de deux objets Kubernetes.
- Un objet Deployment pour définir votre application
- Un service pour définir comment accéder à votre application
Déployer une application
L'application dispose d'une interface qui gère les requêtes Web. Vous définissez les ressources de cluster nécessaires à l'exécution de l'interface dans un nouveau fichier appelé deployment.yaml
. Ces ressources sont décrites comme un déploiement. Vous utilisez les déploiements pour créer et mettre à jour un ensemble d'instances dupliquées (ReplicaSet
) et ses pods associés.
Créez le fichier
deployment.yaml
dans le même répertoire que vos autres fichiers et copiez le contenu suivant : Remplacez les valeurs suivantes dans votre fichier :$GCLOUD_PROJECT
correspond à votre ID de projet Google Cloud.$LOCATION
correspond à l'emplacement du dépôt, par exempleus-central1
.
Déployez la ressource sur le cluster :
kubectl apply -f deployment.yaml
Suivez l'état du déploiement :
kubectl get deployments
Le déploiement est terminé lorsque tous les déploiements
AVAILABLE
affichent l'étatREADY
.NAME READY UP-TO-DATE AVAILABLE AGE helloworld-gke 1/1 1 1 20s
Si le déploiement rencontre une erreur, exécutez à nouveau
kubectl apply -f deployment.yaml
pour mettre à jour le déploiement en cas de modification.Une fois le déploiement terminé, les pods créés par le déploiement s'affichent :
kubectl get pods
Déployer un service
Les services fournissent un point d'accès unique à un ensemble de pods. Bien qu'il soit possible d'accéder à un pod unique, les pods sont éphémères et ne peuvent être accessibles de manière fiable qu'à l'aide d'une adresse de service. Dans l'application Hello World, le service "hello" définit un équilibreur de charge pour accéder aux pods hello-app
à partir d'une adresse IP unique. Ce service est défini dans le fichier service.yaml
.
Créez le fichier
service.yaml
dans le même répertoire que vos autres fichiers sources en incluant le contenu suivant :Les pods sont définis séparément du service qui utilise les pods. Kubernetes utilise des libellés pour sélectionner les pods auxquels accède un service. Les libellés vous permettent d'utiliser un service unique pour interagir avec les pods de différents ensembles d'instances dupliquées. Vous pouvez également faire pointer plusieurs services vers un pod unique.
Créez le service Hello World :
kubectl apply -f service.yaml
Recherchez l'adresse IP externe du service :
kubectl get services
L'allocation de l'adresse IP peut prendre jusqu'à 60 secondes. L'adresse IP externe est répertoriée sous la colonne
EXTERNAL-IP
du servicehello
.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello LoadBalancer 10.22.222.222 35.111.111.11 80:32341/TCP 1m kubernetes ClusterIP 10.22.222.1 <none> 443/TCP 20m
Afficher une application déployée
Vous avez déployé toutes les ressources nécessaires à l'exécution de l'application Hello World sur GKE.
Utilisez l'adresse IP externe de l'étape précédente pour charger l'application dans votre navigateur Web et afficher votre application en cours d'exécution :
http://EXTERNAL_IP
Vous pouvez également effectuer un appel curl
à l'adresse IP externe du service :
curl EXTERNAL_IP
Le résultat suivant s'affiche :
Hello World!
Effectuer un nettoyage
Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, procédez comme suit :
Les instances Compute Engine exécutées dans votre cluster vous sont facturées, ainsi que l'image de conteneur dans Container Registry.Supprimer le projet
La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer le cluster et le conteneur
Si vous souhaitez conserver le projet et ne supprimer que les ressources que vous avez utilisées dans ce tutoriel, supprimez le cluster et l'image.
Pour supprimer un cluster à l'aide de Google Cloud CLI, exécutez l'une des commandes suivantes, selon le mode que vous avez utilisé :
gcloud container clusters delete helloworld-gke \
--location us-central1
Pour supprimer une image dans votre dépôt Artifact Registry, exécutez la commande suivante :
gcloud artifacts docker images delete \
us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke
Étapes suivantes
Pour plus d'informations sur Kubernetes, consultez les ressources suivantes :
- Apprenez-en plus sur la création de clusters.
- Apprenez-en plus sur Kubernetes.
- Consultez la documentation de référence sur
kubectl
.
Pour plus d'informations sur le déploiement sur GKE, consultez les ressources suivantes :
- Apprenez à packager, héberger et déployer une application de serveur Web simple.
- Créez une application Web à plusieurs niveaux avec Redis et PHP.
- Déployez WordPress dans GKE avec des disques persistants et Cloud SQL.
- Configurez Cloud Run sur GKE.
Pour en savoir plus sur la création, le développement et l'exécution d'applications sur GKE directement à partir de votre IDE avec Cloud Code, consultez les ressources suivantes :