Dans cet exercice vous allez créer un Pod contenant 2 containers permettant de lancer une application wordpress.

1. Création de la spécification

Créez un fichier yaml wordpress_pod.yaml définissant un Pod ayant les propriétés suivantes:

  • nom du Pod: wp
  • un premier container:
    • nommé wordpress
    • basé sur l’image wordpress:4.9-apache
    • définissant la variable d’environnement WORDPRESS_DB_PASSWORD avec pour valeur mysqlpwd (cf Note ci-dessous)
    • définissant la variable d’environnement WORDPRESS_DB_HOST avec pour valeur 127.0.0.1 (cf Note ci-dessous)
  • un second container:
    • nommé mysql
    • basé sur l’image mysql:5.7
    • définissant la variable d’environnement MYSQL_ROOT_PASSWORD avec pour valeur mysqlpwd (cf Note ci-dessous)

Note: chaque container peut définir une clé env, celle-ci contenant une liste de variables d’environnement sous la forme de paires name / value. L’exemple suivant définit la variable LOG_LEVEL dont la valeur est WARNING:

...
env:
- name: LOG_LEVEL
  value: WARNING

2. Lancement du Pod

Lancez le Pod à l’aide de kubectl

3. Vérification du status du Pod

Vérifiez l’état du Pod.

Au bout de quelques secondes, il devrait être dans l’état Running (le temps que les images des containers soient téléchargées depuis le DockerHub).

4. Accès à l’application

Forwardez le port 8080 de la machine hôte sur le port 80 du container wordpress.

Accédez à l’interface de setup de wordpress depuis un navigateur lancé sur http://localhost:8080

Note: si vous utilisez une machine virtuelle intermédiaire pour accéder à votre cluster, vous pourrez utiliser l’option –address 0.0.0.0 pour la commande port-forward afin de permettre l’accès depuis toutes les interfaces réseau de votre machine.

5. Suppression du Pod

Supprimez le Pod wp.


Solution

1. Création de la spécification

La spécification, définie dans le fichier wordpress_pod.yaml, est la suivante:

wordpress_pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: wp
spec:
  containers:
  - image: wordpress:4.9-apache
    name: wordpress
    env:
    - name: WORDPRESS_DB_PASSWORD
      value: mysqlpwd
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1
  - image: mysql:5.7
    name: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: mysqlpwd
ℹ️

Note: le Pod défini par la spécification ci-dessus ne permet pas de découpler les données gérées par le container mysql avec le cycle de vie de ce même container. Comme nous le verrons un peu plus loin dans ce cours, nous pourrions définir un volume dans la spécification du Pod et le monter dans le container mysql comme cela est illustré dans la spécification ci-dessous.

wordpress_pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: wp
spec:
  containers:
  - image: wordpress:4.9-apache
    name: wordpress
    env:
    - name: WORDPRESS_DB_PASSWORD
      value: mysqlpwd
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1
  - image: mysql:5.7
    name: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: mysqlpwd
    volumeMounts:
    - name: data
      mountPath: /var/lib/mysql
  volumes:
  - name: data
    emptyDir: {}

2. Lancement du Pod

Le Pod peut être lancé avec la commande suivante:

kubectl apply -f wordpress_pod.yaml

3. Vérification du status du Pod

La commande suivante permet de voir l’état du Pod wp

kubectl get po/wp

Vous dévriez obtenir un Pod dans l’état ContainerCreating pendant quelques secondes, le temps que les images des containers soient téléchargées du DockerHub.

$ kubectl get po/wp
NAME      READY     STATUS              RESTARTS   AGE
wp        0/2       ContainerCreating   0          49s

Rapidement, le Pod devrait apparaitre avec le status Running

$ kubectl get pod/wp
NAME      READY     STATUS    RESTARTS   AGE
wp        2/2       Running   0          2m

4. Accès à l’application

La commande suivante permet de forwarder le port 8080 de la machine hôte sur le port 80 du container wordpress. Sur la machine depuis laquelle la commande port-forward a été lancée, vous pourrez accéder à l’interface de wordpress sur l’URL http://localhost:8080

kubectl port-forward wp 8080:80

Note: si vous utilisez une machine virtuelle intermédiaire pour accéder à votre cluster, vous pourrez utiliser la commande suivante afin de permettre l’accès depuis toutes les interfaces réseau de votre machine. Vous pourrez accéder à l’interface de wordpress sur l’URL http://IP:8080

kubectl port-forward --address 0.0.0.0 wp 8080:80

5. Suppression du Pod

Le Pod peut être supprimé avec la commande suivante:

kubectl delete po/wp