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.
Avant de commencer
- Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.
- Activer les API Cloud Build and Google Kubernetes Engine.
- Installez et initialisez le SDK Cloud.
-
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 Container 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 Container 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 bootVersion=2.4.2.RELEASE \ -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 Container Registry.
C#
Installez le SDK .NET Core 2.2. Le SDK .NET Core 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
.Mettez à jour la définition
CreateWebHostBuilder
dansProgram.cs
en spécifiant l'URL du port pour.UseUrls()
afin de définir le port en service. L'exemple indique le port8080
, mais vous pouvez définir d'autres ports. Votre serveur doit écouter le port que vous spécifiez ici :
Votre application est terminée et prête à être empaquetée dans un conteneur Docker, puis importée dans Container 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 Container Registry.
Ruby
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.rb
et collez le code suivant dans ce fichier :Ce code crée un serveur Web qui écoute le port défini par la variable d'environnement
PORT
.Créez un fichier nommé
Gemfile
et copiez ce qui suit dans ce fichier :
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 :Ruby
Obtenez votre ID de projet Google Cloud :
gcloud config get-value project
Créez votre image de conteneur à l'aide de Cloud Build. Ce processus est semblable à l'exécution de
docker build
etdocker push
, mais la compilation s'effectue sur Google Cloud. Remplacezproject-id
par votre ID Google Cloud :gcloud builds submit --tag gcr.io/project-id/helloworld-gke .
L'image est stockée dans Container Registry.
Créer un cluster Kubernetes Engine
Un cluster GKE est un ensemble géré de machines virtuelles Compute Engine fonctionnant comme un cluster GKE unique. Ce tutoriel utilise un nœud unique.
Créez le cluster. Remplacez
your-gcp-zone
par la zone Google Cloud dans laquelle vous souhaitez héberger votre cluster. Pour obtenir la liste complète, consultez la section Zones géographiques et régions.gcloud container clusters create helloworld-gke \ --num-nodes 1 \ --enable-basic-auth \ --issue-client-certificate \ --zone your-gcp-zone
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 déploiement 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, en remplaçant$GCLOUD_PROJECT
par votre ID de projet Google Cloud :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 hello-deployment 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
Obtenez 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.
# Example cURL call to your running application on GKE (external IP address of service)
curl 35.111.111.11
Hello World!
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans ce guide de démarrage rapide 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 Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
- Dans Cloud Console, 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 l'outil de ligne de commande gcloud
, exécutez la commande suivante :
gcloud container clusters delete helloworld-gke
Pour supprimer une image de l'un de vos dépôts Container Registry, exécutez la commande suivante :
gcloud container images delete gcr.io/project-id/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.
- Déployez une application Guestbook avec Redis et PHP.
- Déployez une application avec état WordPress offrant un stockage et une base de données MySQL persistants.
- Configurez Cloud Run sur GKE.
Pour plus d'informations sur le déploiement sur GKE directement à partir de votre IDE à l'aide de Cloud Code, consultez les ressources suivantes :