Ce tutoriel explique comment configurer un déploiement WordPress à instance répliquée unique sur Google Kubernetes Engine (GKE) à l'aide d'une base de données MySQL. Plutôt que d'installer MySQL, utilisez Cloud SQL, qui fournit une version gérée de MySQL. WordPress stocke les données à l'aide des ressources PersistentVolumes
(PV) et PersistentVolumeClaims
(PVC).
Un PV est une représentation du volume de stockage dans le cluster qui a été provisionné par un administrateur, ou provisionné de manière dynamique par Kubernetes, pour traiter une requête effectuée dans une PVC. Une PVC est une requête de stockage d'une certaine classe de stockage effectuée par un utilisateur et qui peut être traitée par un PV. Les PV et les PVC sont indépendants des cycles de vie des pods et préservent les données en redémarrant, en reprogrammant, mais également en supprimant des pods. WordPress utilise Persistent Disk comme espace de stockage pour soutenir les PV.
Arrière-plan
WordPress est un outil de création de blogs qui utilise une base de données relationnelle pour stocker les articles de blog ainsi que les métadonnées et objets associés, et le système de fichiers local pour stocker des éléments tels que des images dans un article de blog. Ce tutoriel utilise l'image Docker WordPress officielle de Docker Hub.
En général, le système de fichiers racine d'un conteneur ne convient pas pour stocker des données persistantes. Les conteneurs que vous exécutez sur GKE sont généralement des entités qui peuvent être supprimées, et le gestionnaire du cluster peut supprimer, expulser ou reprogrammer tout conteneur devenu indisponible en raison de défaillances de nœuds ou pour d'autres raisons. En cas de défaillance des nœuds, toutes les données enregistrées dans le système de fichiers racine d'un conteneur sont perdues.
L'utilisation de PV reposant sur un disque persistant vous permet de stocker vos données de plate-forme WordPress en dehors des conteneurs. Ainsi, même si les conteneurs sont supprimés, leurs données sont conservées. Avec la classe de stockage par défaut, votre disque persistant (et donc vos données) ne se déplace pas avec votre pod si celui-ci est replanifié sur un autre nœud. Il existe différentes manières de déplacer les données, mais cela n'entre pas dans le cadre de ce tutoriel. Pour en savoir plus, consultez la page Volumes persistants avec disques persistants.
WordPress nécessite un PV pour le stockage des données. Dans le cadre de ce tutoriel, vous utilisez la classe de stockage par défaut pour créer dynamiquement un disque persistant et un PVC pour le déploiement.
Objectifs
- Créer un cluster GKE
- Créer un PV et une PVC reposant sur un disque persistant
- Créer une instance Cloud SQL pour MySQL
- Déployer WordPress
- Configurer votre blog WordPress
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Dans Cloud Shell, activez les API GKE et Cloud SQL Admin :
gcloud services enable container.googleapis.com sqladmin.googleapis.com
Configurer votre environnement
Dans Cloud Shell, définissez la région par défaut pour Google Cloud CLI :
gcloud config set compute/region region
Remplacez les éléments suivants :
region
: choisissez la région la plus proche de vous. Pour en savoir plus, consultez la page Régions et zones.
Définissez la variable d'environnement
PROJECT_ID
sur l'ID de votre projet Google Cloud (project-id).export PROJECT_ID=project-id
Téléchargez les fichiers manifestes d'application à partir du dépôt GitHub :
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Accédez au répertoire qui contient le fichier
wordpress-persistent-disks
:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
Définissez la variable d'environnement
WORKING_DIR
:WORKING_DIR=$(pwd)
Dans le cadre de ce tutoriel, vous créez des objets Kubernetes à l'aide de fichiers manifestes au format YAML.
Créer un cluster GKE
Créez un cluster GKE sur lequel héberger votre conteneur d'applications WordPress.
Dans Cloud Shell, créez un cluster GKE nommé
persistent-disk-tutorial
:CLUSTER_NAME=persistent-disk-tutorial gcloud container clusters create-auto $CLUSTER_NAME
Une fois créé, connectez-vous au cluster :
gcloud container clusters get-credentials $CLUSTER_NAME --region REGION
Créer un PV et une PVC reposant sur un disque persistant
Créez un PVC en tant qu'espace de stockage requis pour WordPress.
GKE dispose d'une ressource StorageClass
par défaut qui vous permet de provisionner de manière dynamique les PV reposant sur un disque persistant. Créez les PVC requises pour le déploiement à l'aide du fichier wordpress-volumeclaim.yaml
.
Ce fichier manifeste décrit une PVC qui demande 200 Go d'espace de stockage. Une ressource StorageClass
n'a pas été définie dans le fichier. Par conséquent, cette PVC utilise la ressource StorageClass
par défaut pour provisionner un PV reposant sur un disque persistant.
Dans Cloud Shell, déployez le fichier manifeste :
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
Il peut s'écouler jusqu'à dix secondes avant que le PV reposant sur un disque persistant ne soit provisionné et associé à votre PVC. Vous pouvez vérifier l'état à l'aide de la commande suivante :
kubectl get persistentvolumeclaim
Le résultat affiche un PersistentVolumeClaim dont l'état est
Pending
, semblable à celui-ci :NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
Ce PersistentVolumeClaim reste à l'état
Pending
jusqu'à ce que vous l'utilisiez plus loin dans ce tutoriel.
Créer une instance Cloud SQL pour MySQL
Dans Cloud Shell, créez une instance nommée
mysql-wordpress-instance
:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
Ajoutez le nom de la connexion de l'instance en tant que variable d'environnement :
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
Créez une base de données pour que WordPress stocke ses données :
gcloud sql databases create wordpress --instance $INSTANCE_NAME
Créez un utilisateur de base de données nommé
wordpress
et un mot de passe pour que WordPress puisse s'authentifier auprès de l'instance :CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORD
Si vous fermez votre session Cloud Shell, vous perdez le mot de passe. Notez le mot de passe, car vous en aurez besoin dans la suite du tutoriel.
Vous avez terminé la configuration de la base de données pour votre nouveau blog WordPress.
Déployer WordPress
Avant de pouvoir déployer WordPress, vous devez créer un compte de service. Créez un secret Kubernetes pour conserver les identifiants du compte de service et un autre pour conserver les identifiants de la base de données.
Configurer un compte de service et créer des secrets
Pour permettre à votre application WordPress d'accéder à l'instance MySQL via un proxy Cloud SQL, créez un compte de service:
SA_NAME=cloudsql-proxy gcloud iam service-accounts create $SA_NAME --display-name $SA_NAME
Ajoutez l'adresse e-mail du compte de service en tant que variable d'environnement :
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')
Ajoutez le rôle
cloudsql.client
à votre compte de service :gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Créez une clé pour le compte de service :
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAIL
Cette commande télécharge une copie du fichier
key.json
.Créez un secret Kubernetes pour les identifiants MySQL :
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORD
Créez un secret Kubernetes pour les identifiants du compte de service :
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
Déployer WordPress
L'étape suivante consiste à déployer votre conteneur WordPress dans le cluster GKE.
Le fichier manifeste wordpress_cloudsql.yaml
décrit un déploiement qui crée un seul pod exécutant un conteneur avec une instance WordPress. Ce conteneur lit la variable d'environnement WORDPRESS_DB_PASSWORD
contenant le secret cloudsql-db-credentials
que vous avez créé.
Ce fichier manifeste configure également le conteneur WordPress de sorte qu'il communique avec MySQL via le proxy Cloud SQL exécuté dans le conteneur side-car.
La valeur d'adresse de l'hôte est définie dans la variable d'environnement WORDPRESS_DB_HOST
.
Préparez le fichier en remplaçant la variable d'environnement
INSTANCE_CONNECTION_NAME
:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
Déployez le fichier manifeste
wordpress_cloudsql.yaml
:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
Le déploiement de ce fichier manifeste prend quelques minutes lorsqu'un disque persistant est associé au nœud de calcul.
Regardez le déploiement afin de voir l'état passer à
running
:kubectl get pod -l app=wordpress --watch
Lorsque le résultat affiche l'état
Running
, vous pouvez passer à l'étape suivante.NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 2m47s
Exposer le service WordPress
À l'étape précédente, vous avez déployé un conteneur WordPress. Toutefois, il n'est actuellement pas accessible en dehors de votre cluster, car il ne possède pas d'adresse IP externe. Vous pouvez exposer votre application WordPress au trafic provenant d'Internet en créant et en configurant un service Kubernetes avec un équilibreur de charge externe associé. Pour en savoir plus sur l'exposition d'applications à l'aide de services dans GKE, consultez le guide d'utilisation.
Créez un service de
type:LoadBalancer
:kubectl create -f $WORKING_DIR/wordpress-service.yaml
La création d'un équilibreur de charge peut prendre quelques minutes.
Regardez le déploiement et attendez qu'une adresse IP externe ait été attribuée au service :
kubectl get svc -l app=wordpress --watch
Lorsque le résultat affiche une adresse IP externe, vous pouvez passer à l'étape suivante : Notez que votre adresse IP externe est différente de l'exemple suivant.
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.51.243.233 203.0.113.3 80:32418/TCP 1m
Notez le champ d'adresse
EXTERNAL_IP
à utiliser ultérieurement.
Configurer votre blog WordPress
Dans cette section, vous allez configurer votre blog WordPress.
Dans votre navigateur, accédez à l'URL suivante, en remplaçant external-ip-address par l'adresse
EXTERNAL_IP
du service qui expose votre instance WordPress :http://external-ip-address
Sur la page WordPress installation (Installation de WordPress), sélectionnez une langue, puis cliquez sur Continue (Continuer).
Complétez la page Information needed (Informations requises), puis cliquez sur Install WordPress (Installer WordPress).
Cliquez sur Log In (Se connecter).
Saisissez le nom d'utilisateur et le mot de passe que vous avez créés précédemment.
Vous disposez désormais d'un blog. Pour accéder à votre blog, accédez à l'URL suivante dans votre navigateur :
http://external-ip-address
Nettoyer
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer les ressources individuelles
Si vous avez utilisé un projet existant et que vous ne souhaitez pas le supprimer, supprimez les ressources individuelles.
Supprimez le service :
kubectl delete service wordpress
Attendez que l'équilibreur de charge provisionné pour le service
wordpress
soit supprimé. L'équilibreur de charge est supprimé de manière asynchrone en arrière-plan.Regardez le processus de suppression :
watch gcloud compute forwarding-rules list
Lorsque le résultat suivant s'affiche, cela signifie que l'équilibreur de charge est supprimé :
Listed 0 items.
Supprimez le déploiement :
kubectl delete deployment wordpress
Supprimez la PVC pour WordPress :
kubectl delete pvc wordpress-volumeclaim
Cette commande supprime également automatiquement le PV et le disque persistant.
Supprimez le cluster GKE :
gcloud container clusters delete $CLUSTER_NAME
Supprimez l'instance Cloud SQL :
gcloud sql instances delete $INSTANCE_NAME
Supprimez le rôle du compte de service :
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Supprimez le compte de service :
gcloud iam service-accounts delete $SA_EMAIL
Étape suivante
- Configurez une adresse IP statique et un nom de domaine pour votre application.
Configurez un équilibreur de charge d'application externe avec Ingress.
Découvrez d'autres tutoriels Kubernetes Engine.
Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.