Comment configurer WordPress avec MySQL sur Kubernetes avec Helm

introduction

Alors que de plus en plus de développeurs travaillent dans des environnements distribués, des outils tels que Kubernetes sont devenus essentiels pour la normalisation des composants d’application dans les environnements de génération et de production dynamiques. Avec la complexité croissante des écosystèmes d’applications et la popularité croissante de Kuberbetes, les outils d’aide à la gestion des ressources au sein des clusters Kubernetes sont devenus essentiels.

Helm est un gestionnaire de packages open source pour Kubernetes qui simplifie le processus de déploiement et de mise à niveau des applications sur un cluster Kubernetes, tout en offrant un moyen de rechercher et de partager des applications prêtes à installer qui sont packagés comme Kubernetes Charts.

Dans ce didacticiel, nous utiliserons Helm pour configurer https://wordpress.com [WordPress] au-dessus d’un cluster Kubernetes, afin de créer un site Web hautement disponible. En plus de tirer parti de l’évolutivité intrinsèque et des aspects de haute disponibilité de Kubernetes, cette configuration contribuera à la sécurité de WordPress en fournissant des flux de travail simplifiés de mise à niveau et d’annulation via Helm.

Nous allons utiliser un serveur MySQL externe afin d’abréger le composant base de données, car il peut faire partie d’un cluster ou d’un service géré distinct pour une disponibilité étendue. Une fois les étapes décrites dans ce didacticiel terminées, vous disposerez d’une installation WordPress entièrement fonctionnelle au sein d’un environnement de cluster conteneurisé géré par Kubernetes.

Conditions préalables

Pour compléter ce guide, vous aurez besoin des éléments suivants:

  • Un cluster Kubernetes 1.10+ avec https://kubernetes.io/docs/reference/access-authn-authz/rbac/ (contrôle d’accès basé sur un rôle) activé (RBAC).

  • L’outil de ligne de commande + kubectl + installé sur votre ordinateur local ou votre serveur de développement, configuré pour se connecter à votre cluster. Veuillez consulter la official Kubernetes documentation pour des instructions sur la manière de le configurer.

  • Le gestionnaire de paquets Helm installé sur votre ordinateur local ou votre serveur de développement et Tiller installé sur votre cluster, comme expliqué dans ce tutoriel: https://www.digitalocean.com/community/tutorials/ comment installer le logiciel sur les clusters kubernetes avec le gestionnaire de packages helm [Comment installer des logiciels sur les clusters Kubernetes avec le gestionnaire de packages Helm].

  • Un serveur MySQL externe avec accès SSH et le mot de passe * root * MySQL. Pour le configurer, vous pouvez suivre l’un de nos tutoriels MySQL, tels que: Comment installer MySQL sur Ubuntu 18.04.

Avant de poursuivre, assurez-vous de pouvoir vous connecter à votre serveur MySQL et d’être connecté à votre cluster Kubernetes. Si vous avez plusieurs clusters configurés dans votre fichier de configuration + kubectl +, vous devez vous assurer que vous êtes connecté au bon cluster en exécutant la commande suivante à partir de votre ordinateur local ou de votre serveur de développement:

kubectl config get-contexts

Ceci est un exemple de sortie:

Output
CURRENT   NAME                        CLUSTER                     AUTHINFO                          NAMESPACE
*         do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster-admin
         minikube                    minikube                    minikube

Le signe astérisque (*) indique quel cluster est actuellement le contexte default. Si vous devez modifier le contexte actuel, exécutez:

kubectl config use-context

Vous devriez maintenant être prêt à suivre le reste du guide.

Étape 1 - Configuration de MySQL

Tout d’abord, nous allons créer un utilisateur MySQL dédié et une base de données pour WordPress, permettant des connexions à partir d’hôtes externes. Cela est nécessaire car votre installation WordPress réside sur un serveur distinct à l’intérieur du cluster Kubernetes. Si vous avez déjà un utilisateur MySQL dédié et une base de données configurée pour WordPress, vous pouvez passer à l’étape suivante.

Depuis le serveur MySQL, connectez-vous à MySQL avec la commande suivante:

mysql -u root -p

Vous serez invité à fournir le mot de passe que vous avez défini pour le compte MySQL * root * lors de la première installation du logiciel. Une fois connecté, MySQL vous donnera une invite de commande que vous pourrez utiliser pour créer la base de données et l’utilisateur nécessaires à WordPress.

Pour créer la base de données, vous pouvez utiliser l’instruction suivante:

CREATE DATABASE ;

Créons maintenant un utilisateur MySQL dédié à cette base de données:

CREATE USER  IDENTIFIED BY '';

L’utilisateur ++ a été créé, mais il n’a pas encore d’autorisation d’accès. La commande suivante donnera à cet utilisateur un accès administrateur (tous les privilèges) à la base de données * wordpress * depuis les réseaux locaux et externes:

GRANT ALL PRIVILEGES ON .* TO @'%';

Pour mettre à jour les tables MySQL internes qui gèrent les autorisations d’accès, utilisez l’instruction suivante:

FLUSH PRIVILEGES;

Vous pouvez maintenant quitter le client MySQL avec:

exit;

Pour vérifier que les modifications ont abouti, vous pouvez vous reconnecter au client de ligne de commande MySQL, cette fois en utilisant le nouveau compte ++ pour s’authentifier:

mysql -u  -p

Vous devez utiliser le même mot de passe que vous avez fourni lors de la création de cet utilisateur MySQL avec l’instruction + CREATE_USER +. Pour confirmer que votre nouvel utilisateur a accès à la base de données ++, vous pouvez utiliser l’instruction suivante:

show databases;

La sortie suivante est attendue:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
|           |
+--------------------+
2 rows in set (0.03 sec)

Après avoir vérifié que la base de données ++ est incluse dans les résultats, vous pouvez quitter le client de ligne de commande MySQL avec:

exit;

Vous avez maintenant une base de données MySQL dédiée pour WordPress et des informations d’accès valides à utiliser. Étant donné que notre installation WordPress sera installée sur un serveur distinct, nous devons toujours modifier notre configuration MySQL pour autoriser les connexions provenant d’hôtes externes.

Toujours sur votre serveur MySQL, ouvrez le fichier + / etc / mysql / mysql.conf.d / mysqld.cnf + en utilisant l’éditeur de ligne de commande de votre choix:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Localisez le paramètre + bind-address + dans ce fichier. Par défaut, MySQL n’écoute que sur + 127.0.0.1 + (localhost). Afin d’accepter les connexions d’hôtes externes, nous devons modifier cette valeur en «+ 0.0.0.0 ». Voici à quoi devrait ressembler votre configuration ` bind-address +`:

/etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            =

Lorsque vous avez terminé ces modifications, enregistrez et fermez le fichier. Vous devrez redémarrer MySQL avec la commande suivante:

sudo systemctl restart mysql

Pour vérifier si vous pouvez vous connecter à distance, exécutez la commande suivante à partir de votre ordinateur local ou de votre serveur de développement:

mysql -h  -u  -p

N’oubliez pas de changer ++ pour l’adresse IP ou le nom d’hôte de votre serveur MySQL. Si vous pouvez vous connecter sans erreur, vous êtes maintenant prêt à passer à l’étape suivante.

Étape 2 - Installation de WordPress

Maintenant que nous disposons des informations nécessaires pour nous connecter à la base de données MySQL, nous pouvons installer WordPress à l’aide de Helm.

Par défaut, le graphique WordPress installe MariaDB sur un module séparé à l’intérieur du cluster et l’utilise comme base de données WordPress. Nous voulons désactiver ce comportement et configurer WordPress pour utiliser une base de données MySQL externe. Cette option ainsi que d’autres options (telles que l’utilisateur et le mot de passe de l’administrateur WordPress par défaut) peuvent être définies au moment de l’installation, soit via des paramètres de ligne de commande, soit via un fichier de configuration YAML distinct.

Afin de garder les choses organisées et facilement extensibles, nous allons utiliser un fichier de configuration.

À partir de votre machine locale ou de votre serveur de développement, créez un nouveau répertoire pour les paramètres de votre projet et accédez à celui-ci:

mkdir myblog-settings
cd myblog-settings

Ensuite, créez un fichier nommé + values.yaml +, en utilisant votre éditeur de texte de choix:

nano values.yaml

Dans ce fichier, nous devons définir quelques variables qui définiront le mode de connexion de WordPress à la base de données, ainsi que des informations de base sur votre site et sur l’administrateur initial pour la connexion à WordPress une fois l’installation terminée.

Nous baserons notre configuration sur le fichier + values.yaml + par défaut du WordPress Helm chart. La section * Blog / Site Info * contient des options générales pour votre blog WordPress, telles que le nom du blog et les informations d’identification de l’utilisateur initial. La section * Database Settings * de ce fichier contient les paramètres permettant de se connecter au serveur MySQL distant. MariaDB est désactivé dans la dernière section.

Copiez le contenu suivant dans votre fichier + values.yaml +, en remplaçant les valeurs en surbrillance par vos valeurs personnalisées:

valeurs.yaml

## Blog/Site Info
wordpressUsername:
wordpressPassword:
wordpressEmail:
wordpressFirstName:
wordpressLastName:
wordpressBlogName:

## Database Settings
externalDatabase:
 host:
 user:
 password:
 database:

## Disabling MariaDB
mariadb:
 enabled: false

Nous venons de configurer les options suivantes:

  • * wordpressUsername *: Identifiant de l’utilisateur WordPress.

  • * wordpressPassword *: Mot de passe de l’utilisateur WordPress.

  • * wordpressEmail *: email de l’utilisateur WordPress.

  • * wordpressFirstName *: prénom de l’utilisateur Wordpress.

  • * wordpressLastName *: nom de famille de l’utilisateur Wordpress.

  • * wordpressBlogName *: Nom du site ou du blog.

  • * hôte *: adresse IP ou nom d’hôte du serveur MySQL.

  • * utilisateur *: utilisateur MySQL.

  • * mot de passe *: mot de passe MySQL.

  • * base de données *: nom de la base de données MySQL.

Lorsque vous avez terminé, enregistrez le fichier et quittez l’éditeur.

Maintenant que tous les paramètres sont en place, il est temps d’exécuter + helm + pour installer WordPress. La commande suivante demande à + ​​helm + d’installer la version la plus récente et la plus stable du graphique WordPress sous le nom ++, en utilisant + values.yaml + comme fichier de configuration:

helm install --name  -f values.yaml stable/wordpress

Vous devriez obtenir une sortie semblable à celle-ci:

Output
NAME:   myblog
LAST DEPLOYED: Fri Jan 25 20:24:10 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME              READY  UP-TO-DATE  AVAILABLE  AGE
myblog-wordpress  0/1    1           0          1s

==> v1/PersistentVolumeClaim
NAME              STATUS   VOLUME            CAPACITY  ACCESS MODES  STORAGECLASS  AGE
myblog-wordpress  Pending  do-block-storage  1s

==> v1/Pod(related)
NAME                               READY  STATUS   RESTARTS  AGE
myblog-wordpress-5965f49485-8zfl7  0/1    Pending  0         1s

==> v1/Secret
NAME               TYPE    DATA  AGE
myblog-externaldb  Opaque  1     1s
myblog-wordpress   Opaque  1     1s

==> v1/Service
NAME              TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                     AGE
myblog-wordpress  LoadBalancer  10.245.144.79  <pending>    80:31403/TCP,443:30879/TCP  1s

(...)

Une fois l’installation terminée, un service nommé * myblog-wordpress * est créé dans votre cluster Kubernetes, mais le conteneur peut prendre quelques minutes avant que le conteneur soit prêt et que les informations + External-IP + soient disponibles. Pour vérifier l’état de ce service et récupérer son adresse IP externe, exécutez:

kubectl get services

Vous devriez obtenir une sortie semblable à celle-ci:

Output
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kubernetes         ClusterIP      10.245.0.1      <none>          443/TCP                      20h
  LoadBalancer   10.245.144.79      80:31403/TCP,443:30879/TCP   3m40s

Cette commande vous donne des informations détaillées sur les services en cours d’exécution sur votre cluster, y compris le nom et le type du service, ainsi que sur les adresses IP utilisées par ces services. Comme vous pouvez le constater à la sortie, l’installation de WordPress est utilisée comme «+ myblog-wordpress » sur l’adresse IP externe ` 203.0.113.110 +`.

Votre installation WordPress est maintenant opérationnelle. Pour accéder à l’interface d’administration, utilisez l’adresse IP publique obtenue à partir de la sortie de + kubectl get services +, suivie de + / wp-admin + dans votre navigateur Web:

http:///wp-admin

image: http: //assets.digitalocean.com/articles/wordpress_kubernetes/admin_login.png [Écran de connexion]

Vous devez utiliser les informations d’identification définies dans votre fichier + values.yaml + pour vous connecter et commencer à configurer votre site WordPress.

Étape 3 - Mise à niveau de WordPress

En raison de sa popularité, WordPress est souvent la cible d’exploitation malveillante. Il est donc important de le tenir à jour. Nous pouvons mettre à jour les versions de Helm avec la commande + helm upgrade.

Pour répertorier toutes vos versions actuelles, exécutez la commande suivante à partir de votre ordinateur local ou de votre serveur de développement:

helm list

Vous devriez obtenir une sortie semblable à ceci:

OutputNAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      1           Fri Jan 25 20:24:10 2019    DEPLOYED    wordpress-        default

Comme vous pouvez le constater à la sortie, notre version actuelle de WordPress est + 5.0.3 + (version de l’application), tandis que la version du graphique est + 5.1.2 +. Si vous souhaitez mettre à niveau une version vers une version plus récente d’un graphique, commencez par mettre à jour vos référentiels Helm avec:

helm repo update

Vous pouvez vous attendre à la sortie suivante:

OutputHang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

Vous pouvez maintenant vérifier si une version plus récente du graphique WordPress est disponible avec:

helm inspect chart stable/wordpress

Vous devriez voir une sortie semblable à ceci:

OutputapiVersion: v1
appVersion:
description: Web publishing platform for building blogs and websites.
engine: gotpl
home: http://www.wordpress.com/
icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png
keywords:
- wordpress
- cms
- blog
- http
- web
- application
- php
maintainers:
- email: [email protected]
 name: Bitnami
name: wordpress
sources:
- https://github.com/bitnami/bitnami-docker-wordpress
version:

Comme vous pouvez le constater, un nouveau graphique est disponible (version 5.9.0) avec WordPress * 5.1.1 * (version de l’application). Chaque fois que vous souhaitez mettre à niveau votre version de WordPress vers le dernier graphique WordPress, vous devez exécuter:

helm upgrade -f values.yaml  stable/wordpress

Cette commande produira une sortie très similaire à celle produite par + helm install. Il est important de fournir le même fichier de configuration que nous avons utilisé lors de la première installation du graphique WordPress, car il contient les paramètres de base de données personnalisés que nous avons définis pour notre configuration.

Maintenant, si vous exécutez à nouveau + helm list +, vous devriez voir les informations mises à jour concernant votre version:

Output
NAME    REVISION    UPDATED                     STATUS      CHART           APP VERSION     NAMESPACE
myblog  2           Fri May  3 14:51:20 2019    DEPLOYED    wordpress-            default

Vous avez mis à niveau votre WordPress avec la dernière version du graphique WordPress.

Annulation d’une version

Chaque fois que vous mettez à niveau une version, Helm crée une nouvelle * revision * de cette version. Une révision définit un checkpoint fixe à l’endroit où vous pouvez revenir si les choses ne fonctionnent pas comme prévu. Cela ressemble à un commit dans Git, car cela crée un historique des changements qui peuvent être comparés et annulés. Si quelque chose ne va pas pendant le processus de mise à niveau, vous pouvez toujours revenir à une révision précédente d’une version de Helm donnée avec la commande + helm rollback +:

helm rollback

Par exemple, si nous voulons annuler la mise à jour et restaurer notre version WordPress à sa * première * version, nous utiliserions:

helm rollback myblog

Cela ramènerait l’installation de WordPress à sa première version. Vous devriez voir la sortie suivante, indiquant que la restauration a été réussie:

Output
Rollback was a success! Happy Helming!

Lancer à nouveau + helm list + devrait maintenant indiquer que WordPress a été rétrogradé à la version 5.0.3, version graphique 5.1.2:

Output
NAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      3       Mon Jan 28 22:02:42 2019    DEPLOYED    wordpress-            default

Notez que l’annulation d’une publication créera une nouvelle révision, basée sur la révision cible de l’annulation. Notre version de WordPress nommée + myblog + est à présent au numéro de révision * trois *, qui était basé sur le numéro de révision * un *.

Conclusion

Dans ce guide, nous avons installé WordPress avec un serveur MySQL externe sur un cluster Kubernetes à l’aide de l’outil de ligne de commande Helm. Nous avons également appris à mettre à niveau une version de WordPress vers une nouvelle version graphique et à restaurer une version en cas de problème au cours du processus de mise à niveau.

Comme étapes supplémentaires, vous pouvez envisager initialiser Nginx Entrée avec Cert-Manager afin d’activer l’hébergement virtuel basé sur le nom et de configurer un certificat SSL pour votre site WordPress. Vous devez également vérifier les recommandended production settings pour le graphique WordPress que nous avons utilisé dans ce guide.

Si vous souhaitez en savoir plus sur Kubernetes et Helm, veuillez consulter la section Kubernetes de notre page de communauté.

Related