Bah... c'est simple, le Belem est un des premiers portes conteneurs, bien avant Mesos, Swarm ou Kubernetes ! Et 42 car c'est la réponse à la question.
De gauche à droite :
- Benjamin Pinel
- Fabien Hippolyte
- Jean-Louis Etienne
- Julien Vinet
Toute l'équipe est issue du pôle Usine Logicielle LCL
A fond, à fond, à fond, comme à l'Usine Logicielle ! 😬
Avant d'attaquer la partie déploiement sur AWS, nous avons commencé par créer des micro-services REST/json avec spring-boot pour séparer le front-end du back-end. Comme base de données conteneur ready, nous avons choisi mongoDB car nous l'utilisons au quotidien sur l'usine logicielle LCL, sous Docker, nous maitrisons cette technologie et elle donne de bons résultats. Dans un premier temps nous avons décidé de conserver le front jsp et nous l'avons modifié pour qu'il invoque les micro-services. Ensuite, nous avons attaqué la partie déploiement sur Kubernetes
Pour la construction des images docker embarquant le front et les API (sources Dockerfile disponibles dans chacun des repo), nous avons essayé de minimiser la taille en se basant sur des versions alpine des images proposées dans le repo "library" de dockerhub (java, tomcat).
De plus, les microservices développés essayent de respecter au mieux le pattern 12 factors :
- Ne pas se reposer sur le FS
- Stateless
- Loging dans l'output
- Versionning du code (code applicatif, Dockerfile, Descripteur de déploiement...)
- Un début de process de release (standardisation du build, du déploiement...)
- Application : http://belem42.hackathon-container.com/containerbank/
- Grafana : http://grafana-belem42.hackathon-container.com
-
ViewAdvisors
: voir une liste de conseillers et leurs spécialités (none, savings, credits ou insurance) -
ViewCustomer
: voir les informations relatives à un client -
EditCustomer
: mettre à jour les informations relatives à un client -
AddCustomer
: ajouter un nouveau client au système -
ViewCard
: voir les informations relatives à une carte bleue -
EditCard
: mettre à jour les informations relatives à une carte bleue -
AddCard
: ajouter une nouvelle carte bleue au système -
ViewPayment
: voir des informations relatives à l'historique de paiement d’une carte bleue -
AddPayment
: ajouter des informations relatives à un paiement (nature du paiement) -
Monitoring
: monitorer chaque appels et leur durée -
Logging
: centraliser les logs de l'application
( ne pas mettre d'accents dans les champs texte ;) )
- Mettre en place des volumes persistants sur MongoDB
- Mettre en oeuvre des replicaset MongoDB par back-end (pour l'instant un seul conteneur mongo)
- Terminer le refacto du front en supprimant toutes les références JPA/Hibernate
- Remplacer le front JSP/spring par un front statique (Angular)
- Mettre en place de l'autoscalling
- Centraliser les logs avec Graylog
- Persister les dashboards grafana
- Monitorer les fronts et les mongo
- Automatiser la création des data minimum pour démarrer (card type et advisors)
- Gérer la configuration applicative via des config et secrets k8s
- Swagger des API
- Sécuriser les backends et la configuration mongo (mitigé par l'impossibilité d'accès externe au namespace).
- ...
mvn clean package
mvn tomcat7:run-war
Chaque projet (front + backs ends) contient un fichier build.sh permettant de créer un container, et accessoirement de le tagger
./build.sh $version [tag]
Indiquer l'option tag permettra de générer l'image puis de la push dans la registry.
L'ensemble des fichiers de déploiement kubernetes se trouve dans le dossier "deployment" de chaque projet. Un fichier makefile, contenant les directives deploy
et destroy
permet de réaliser les commandes :
make deploy
Déploie la stack du projet dans le cluster kubernetes
make destroy
Détruit la stack du projet dans le cluster kubernetes
cd ./belem42/deployment/
make deploy-mongodb
make deploy-all
make deploy-monitoring