Formation DevOps | Formation kubernetes​ : 9 - Wordpress pour la création de vos sites et de vos blog !!

www.itgalaxy.io

Deployer wordpress asur kubernetes

Wordpress est connu pour les sites E-commerce , facile à mettre place pour gérer votre entreprise en ligne .

Ce tutoriel vous montre comment déployer un site WordPress et une base de données MySQL à l’aide de Minikube. Les deux applications utilisent PersistentVolumes et PersistentVolumeClaims pour stocker des données.

Un PersistentVolume (PV) est un élément de stockage dans le cluster qui a été provisionné manuellement par un administrateur ou provisionné dynamiquement par Kubernetes à l’aide d’un StorageClass . Une PersistentVolumeClaim (PVC) est une demande de stockage par un utilisateur qui peut être satisfaite par un PV. PersistentVolumes et PersistentVolumeClaims sont indépendants des cycles de vie des pods et préservent les données en redémarrant, en replanifiant et même en supprimant les pods.

L’exemple présenté sur cette page fonctionne avec la kubectl version 1.27 et supérieure.

git clone git@gitlab.com:Itgalaxy1/k8s-formations/wordpress.git

cd wordpres-correction

ls -l










Créer des PersistentVolumeClaims et des PersistentVolumes

MySQL et Wordpress nécessitent chacun un PersistentVolume pour stocker les données. Leurs PersistentVolumeClaims seront créées lors de l’étape de déploiement.

De nombreux environnements de cluster ont une StorageClass par défaut installée. Lorsqu’un StorageClass n’est pas spécifié dans PersistentVolumeClaim, le StorageClass par défaut du cluster est utilisé à la place.

Lorsqu’un PersistentVolumeClaim est créé, un PersistentVolume est provisionné dynamiquement en fonction de la configuration StorageClass.

example le pv,pvc de mysql :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wordpress-db-claim
  labels:
    app: wordpress
spec:
  storageClassName: standard
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/mnt/data/mysql"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-db-claim
  labels:
    app: wordpress
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

Ajouter des configurations de ressources pour MySQL et WordPress

Le manifeste suivant décrit un déploiement MySQL à instance unique. Le conteneur MySQL monte le PersistentVolume dans /var/lib/mysql.
La MYSQL_ROOT_PASSWORD variable d’environnement définit le mot de passe de la base de données à partir du secret.

il y a un script ./getsecrets.sh permet de mettre à jour les values en base64 un secrets.yaml

#!/bin/bash
clear
echo -n "Nom de la base de donnees : "
read BDD
echo -n "Nom de l'utilisateur : "
read USER
echo -n "Mot de passe MYSQL : "
read PASSWD

sed -i "s/_PASS_/$(echo -n $PASSWD | base64)/" secrets.yml
sed -i "s/_BASE_/$(echo -n $BDD | base64)/" secrets.yml
sed -i "s/_USER_/$(echo -n $USER | base64)/" secrets.yml

cat secrets.yaml

apiVersion: v1
kind: Secret
metadata:
  name: secrets-conf
type: Opaque
data:
  MYSQLDB_PASS: dGVzdA==
  MYSQLDB_USER: dGVzdA==
  MYSQLDB_BASE: ZGI=

Une remarque le service de mysql est de type headless , ça permet de pointer directement au pod (avoir l’adresse ip du pod) . pour l’utilisation il suffit d’utiliser l’endpoint wordpress-mysql le nom du service comme une variable de WORDPRESS_DB_HOST.

cat mysql-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None

cat wordpress-deploy.yml

apiVersion: apps/v1 
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: secrets-conf
              key: MYSQLDB_PASS
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

Finalement pour exposer notre wordpress avec un service de type: NodePort

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: wordpress
    tier: frontend
  type: NodePort





1. Nous contactez


2. Infra as a Service

  • Description: Infrastructure cloud évolutive et sécurisée
  • Links:

3. Projets Développeurs


4. Développeurs


5. Formations Complètes


6. Marketplace

7. Blogs


This website is powered by ItGalaxy.io