TP - Ajouter une persistance et une configMap à notre application
Persister les données de Redis
Actuellement le Redis de notre application ne persiste aucune donnée. On peut par exemple constater que le compteur de visite de la page est réinitialisé à chaque réinstallation.
Nous allons maintenant utiliser un volume pour résoudre simplement ce problème.
- Clonez le cas échéant la correction du TP précédent avec
git clone -b tp_monsterstack_final https://github.com/Uptime-Formation/corrections_tp.git tp_monsterstack_correction1
.
En vous inspirant du code du tutoriel officiel suivant (https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/) :
- Créez un nouveau fichier
redis-data-pvc.yaml
contenant unPersistantVolumeClaim
de nomredis-data
de 2Go. - Ajoutez au déploiement/pod-template de redis une section
volumes
avec un volume correspondant au pvc - Ajoutez un mount au conteneur redis au niveau du chemin
/data
Installons notre application avec kubectl
et testons en visitant la page
Observer la persistence
Supprimez uniquement les trois déploiements.
Redéployez a nouveau avec
kubectl apply -f .
, les deux déploiements sont recréés.En rechargeant le site on constate que les données ont été conservées (nombre de visite conservé).
Allez observer la section stockage dans
Lens
. Commentons ensemble.Supprimer tout avec
kubectl delete -f .
. Que s'est-il passé ? (côté storage)
En l'état les PersistentVolumes
générés par la combinaison du PersistentVolumeClaim
et de la StorageClass
de minikube sont également supprimés en même tant que les PVCs. Les données sont donc perdues et au chargement du site le nombre de visites retombe à 0.
Pour éviter cela il faut avec une Reclaim Policy
à retain
(conserver) et non delete
comme suit https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/. Les volumes sont alors conservés et les données peuvent être récupérées manuellement. Mais les volumes ne peuvent pas être reconnectés à des PVCs automatiquement.
Pour récupérer les données on peut:
- récupérer les données à la main sur le disque/volume réseau indépendamment de kubernetes
- utiliser la nouvelle fonctionnalité de clone de volume
Lah correction de cette partie se trouve dans la brance tp_monsterstack_correction_pvc
:
git clone -b tp_monsterstack_correction_pvc https://github.com/Uptime-Formation/corrections_tp.git tp_monsterstack_correction_pvc
Générer nos variables d'environnement frontend avec une configmap
En vous inspirant de la documentation officielle : https://kubernetes.io/docs/concepts/configuration/configmap/:
Ajoutez un nouveau fichier configMap
frontend-config
avec 3 clés:CONTEXT
,REDIS_DOMAIN
etIMAGEBACKEND_DOMAIN
avec les valeurs actuellement utilisées dans la sectionenv
de notre déloiement frontend.Modifiez cette section
env
pour récupérer les valeurs de la configMap avec le paramètrevalueFrom
comme dans l'exemple.