Les conteneurs épousent la philosophie des architectures microservices. Nous vous présenterons un socle technique résilient et scalable pour distribuer des microservices sur une infrastructure s’appuyant sur Docker Swarm pour l’orchestration des conteneurs et Interlock avec HAProxy pour la gestion du Service Discovery, le tout accessible depuis le Cloud.
Nous déploierons au sein de cette infrastructure une application de trombinoscope développée en architecture microservices. Chaque individu présent au sein du trombinoscope sera représenté par un microservice spécifique, que nous pourrons déployer et faire scaler au sein du cluster. Avec autant de microservices, il est nécessaire de mesurer leur état, nous vous présenterons également les outils de supervision que nous avons mis en place au sein de la solution.
Par Jean-Louis Rigau (Software Engineer, Continuous Delivery, DevOps and Docker @Xebia) & Thomas Auffredou (Software Engineer @ Xebia)
Toutes les vidéos des conférences seront disponibles sur Xebia.tv
2. @ContainerDay16 @jlrigau @tauffredou
Jean-Louis RIGAU
@jlrigau
Continuous Delivery, DevOps and Docker
@ Xebia IT Architects
Thomas AUFFREDOU
@tauffredou
Continuous Delivery, DevOps and Docker
@ Xebia IT Architects
3. @ContainerDay16 @jlrigau @tauffredou
Contexte
La startup Tromb'In souhaite révolutionner le marché des réseaux sociaux en
proposant une application de trombinoscope offrant une fonctionnalité de vote
innovante.
Elle a fait le choix de développer son application en s’appuyant sur une architecture
microservices et de gérer l’ensemble de son infrastructure sur Amazon AWS.
Elle a entendu parler de Docker et souhaite mettre en place une solution d’
orchestration de conteneurs résiliente et scalable pour déployer son application.
5. @ContainerDay16 @jlrigau @tauffredou
● Identity
○ Affiche une identité : nom + photo
○ Permet de voter
○ Génère un évènement à chaque vote
● Messaging Channel
○ Redis en Publish/Subscribe
● Service Discovery
○ Liste l’ensemble des applications Identity
● Trombinoscope
○ Liste l’ensemble des identités
○ Affiche le nombre de votes (Hit/Sec)
Une application, plusieurs services
8. @ContainerDay16 @jlrigau @tauffredou
● Mise en place d’un cluster Docker Swarm
○ 3 masters en quorum + 5 nodes
● Utilisation de Consul comme KV-Store
○ Configuration du cluster + Overlay Network
● Service discovery avec Interlock avec Nginx
○ Exposition de l’ensemble des services
● Load Balancing avec Amazon ELB
○ masters sur le port 3375
○ nodes sur le port 80
● Gestion des DNS avec Route 53
○ admin
○ *.service
Choix d’infrastructure
12. @ContainerDay16 @jlrigau @tauffredou
Création de l’infrastructure
● Entièrement sur Amazon AWS
● Terraform pour automatiser la création de l’infrastructure
○ Instances Amazon EC2
○ Security Groups
○ Elastic Load Balancing
○ Règles Route 53
● Nombre d’instances configurable
$ make launch-infra
14. @ContainerDay16 @jlrigau @tauffredou
Génération de l’inventaire
● Génération de l’inventaire pour Ansible
○ à partir des données de Terraform
○ script en javascript pour la conversion
$ make terraform-to-ansible
15. @ContainerDay16 @jlrigau @tauffredou
Provisioning des instances
● Provisioning des instances avec Ansible
○ Installation de docker
○ Configuration du cluster
○ Déploiement de conteneurs de base
$ make configure
17. @ContainerDay16 @jlrigau @tauffredou
Déploiement de l’application
● Compilation en utilisant un conteneur de build
● Création des images applicatives
● Stockage des images sur le Docker Hub
● Déploiement avec Docker Compose
$ docker-compose up -d