@xebiconfr #xebiconfr
Choisissez votre style avec Docker & Amazon Web ServicesAlexis Kinsella / Gérôme Egron
@xebiconfr
@xebiconfr #xebiconfr
Usage du Cloud chez Xebia
2
@xebiconfr #xebiconfr
Usage de Docker
3
@xebiconfr #xebiconfr
Docker pour :
Le développement
L’usine logicielle
L’infrastructure
Quels usages ?
4
@xebiconfr #xebiconfr
Docker pour le développeur
5
@xebiconfr #xebiconfr
POCer facilement
Éviter les installations manuelles et laborieuses
Clusteriser simplement
Utiliser plusieurs versions d’un outil
6
@xebiconfr #xebiconfr
Fournir des mocks de services développés par d’autres équipes
Mocks
7
@xebiconfr #xebiconfr
Docker pour l’usine logicielle
8
@xebiconfr #xebiconfr 9
Docker Docker-compose
Développeur
git push
ECR
@xebiconfr #xebiconfr
Docker pour l’infrastructure
10
@xebiconfr #xebiconfr
Le mode artisanal
11
@xebiconfr #xebiconfr
Gestion directe des instances
Responsabilités du provisioning & du monitoring
Instances EC2
12
@xebiconfr #xebiconfr
Utiliser l’AMI Amazon Linux officielle 2016.09
ou,
Installer manuellement Docker
2 Solutions
13
@xebiconfr #xebiconfr
Pet vs Cattle
14
@xebiconfr #xebiconfr
Le mode industriel
15
@xebiconfr #xebiconfr
Automatiser les déploiements
Uniformiser les déploiements
Optimiser l’usage des ressources
Pour répondre à des besoins modernes :
16
@xebiconfr #xebiconfr
Utiliser Dockeravec des
Orchestrateurs
Une solution ?
17
@xebiconfr #xebiconfr
1ère solution - Distributions spécialisées
18
@xebiconfr #xebiconfr
2ème solution - Les outils d’orchestration
Nomad KubernetesMesos / Marathon / ZooKeeper
19
@xebiconfr #xebiconfr
3ème solution - Docker for AWS
Basé sur CloudFormation
Nœuds de type manager et worker
S’appuie sur les services AWS pour fonctionner
AMI Customisées
20
@xebiconfr #xebiconfr
Le setup de ces solutions est à votre charge !
Problème
21
@xebiconfr #xebiconfr
Elastic Beanstalk avec Docker
Elastic Container Service
4ème solution - Les services AWS
22
@xebiconfr #xebiconfr
Elastic Beanstalk
23
@xebiconfr #xebiconfr
Historiquement utilisé avec des stacks préconfigurées Node.js ou Java
Succès historique sur nos projets
Utilisation de Jenkins et l’Elastic Beanstalk Command Line Interface (EB CLI) pour construire & déployer les livrables
24
@xebiconfr #xebiconfr
Mono application
25
@xebiconfr #xebiconfr
Mono & Multi container
2 Modes
26
@xebiconfr #xebiconfr
Plusieurs options de déploiement :
● Dockerfile ● Dockerrun.aws.json● Un Bundle de déploiement
Mono Container
27
@xebiconfr #xebiconfr
Authentification
Référence de l’image à déployer
Configuration complémentaire:
● Ports● Volumes● Logging
Dockerrun.aws.json
28
@xebiconfr #xebiconfr
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "janedoe/image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx"}
Dockerrun.aws.json
29
@xebiconfr #xebiconfr
Supporte le déploiement d’applications multi-container
Utilise Elastic Container Service
Se charge de la gestion du cluster ECS, des définitions de tâches et des exécutions
Multi Container
30
@xebiconfr #xebiconfr
app1.elasticbeanstalk.com:80
app2.elasticbeanstalk.com:80Instance 1 Instance 2
80
9000
Auto Scaling Group / ECS Cluster
Elastic Beanstalk Environment
Task 1-1 Task 1-2
Container 1 Container 2
Container 3
Container 1 Container 2
Container 3
31
@xebiconfr #xebiconfr
Le format v2 supporte des instances multi-containers
Les images doivent être pré-construites
Dockerrun.aws.json v2
32
@xebiconfr #xebiconfr
AMI optimisée pour ECS
Agent ECS pré-installé
Multi Container
33
@xebiconfr #xebiconfr
Blue-Green Deployment
Multi Environment Management
Rolling Update
Easy Rollback
Pourquoi utiliser Elastic Beanstalk avec Docker ?
34
@xebiconfr #xebiconfr
Un mot sur CloudFormation
35
@xebiconfr #xebiconfr
Fichiers de configuration au format JSON
Rendre répétable la création de vos infrastructures
Garder les définitions dans un gestionnaire de source
Donner la capacité de tester les déploiements
Pourquoi utiliser CloudFormation ?
36
@xebiconfr #xebiconfr
Elastic Container Service
37
@xebiconfr #xebiconfr
Gérer soi-même un cluster est une tâche complexe
38
@xebiconfr #xebiconfr
Load-Balancing
Auto-Scaling
CloudWatch
Elastic Container Registry
Cloud Formation ...
Intégration avec les services AWS
39
@xebiconfr #xebiconfr
Intégration End-to-End
Stockage sécurisé des images
Accès fiables aux images
Elastic Container Registry
40
@xebiconfr #xebiconfr
Régions AWS & Disponibilité d’ECS
41
@xebiconfr #xebiconfr
Clusters, Task Definitions, Services
Elastic Container Service
42
@xebiconfr #xebiconfr
Pas de Cluster / Orchestrateur à faire fonctionner
Contrôle & Monitoring via des API et la console
Scaling
Avantages
43
@xebiconfr #xebiconfr
C’est avant tout un pool de ressources
Clusters
44
@xebiconfr #xebiconfr
Unités de travail
Regroupent des containers liés
Tournent sur des instances
Tasks
45
@xebiconfr #xebiconfr
Adapté pour les tâches à durée de vie longue
Load balance le trafic entre les instances
Rétablit les instances défaillantes
Services
46
@xebiconfr #xebiconfr
Métriques enregistrées chaque minute pour une durée de 2 semaines
Métriques: CPUReservation, MemoryReservation, CPUUtilization, MemoryUtilization
Dimensions: ClusterName, ServiceName
Possibilité d’envoyer des métriques customisées
Métriques & Cloud Watch
47
@xebiconfr #xebiconfr
CloudFormation pour lier les services entre eux
Route53 avec une zone privée
Outils tiers de service discovery (Consul, Etcd)
Service Discovery
48
@xebiconfr #xebiconfr
TaskTask
TaskTask
TaskTask
TaskTask
Task
TaskTask
Task
Application router, e.g.
nginxRoute 53 private
zone, e.g. example.com
ECS Service
Internal ELB withCNAME, e.g.
api.example.com
Service Discovery avec Route53
49
@xebiconfr #xebiconfr
Scheduler par tâches- Exécute les tâches une unique fois- Lancement de jobs batchés (Jusqu’à 10)- Permet de lancer les jobs en random (RunTask) ou placés (StartTask)
Scheduler de services- Gestion de la santé des tâches (Relance les tâches au besoin)- Scale Up & Scale Down- Availability Zone awareness
Schedulers ECS
50
@xebiconfr #xebiconfr
Support des Elastic Load Balancing
Permet d’associer un port de l’ELB avec un port d’un container (Classic & Dynamic port mapping)
Si un healthcheck de Load Balancer est en erreur, la tâche est killée puis redémarrée
Services ECS
51
@xebiconfr #xebiconfr
Lors de la mise à jour des tâches, il est possible de jouer avec les paramètres de minimumHealthyPercent et maximumPercent pour assurer des déploiements sans coupure
Rolling Update - Jobs à durée de vie longue
52
@xebiconfr #xebiconfr
Rolling Update - Jobs à durée de vie longue (min: 50%, max: 100%)
#ContainerdayFR
Instance 1 Instance 2 Instance 3 Instance 4Step 1
Task 2Task 1 Task 4Task 3
Instance 1 Instance 2 Instance 3 Instance 4Step 2
Task 2Task 1 Task 4Task 3
Instance 1 Instance 2 Instance 3 Instance 4Step 3
Task 4Task 3Task 2Task 1
53
@xebiconfr #xebiconfr
Rolling Update - Jobs à durée de vie longue (min: 100%, max: 200%)
Instance 1 Instance 2 Instance 3 Instance 4Step 1
Task 2Task 1 Task 4Task 3
Instance 5 Instance 6 Instance 7 Instance 8
Instance 1 Instance 2 Instance 3 Instance 4Step 2
Task 2Task 1 Task 4Task 3
Instance 5 Instance 6 Instance 7 Instance 8
Task 6Task 5 Task 8Task 7
Instance 1 Instance 2 Instance 3 Instance 4Step 3 Instance 5 Instance 6 Instance 7 Instance 8
Task 8Task 7Task 6Task 5
Intéressant si le nombre d’instances ne peut être réduit54
@xebiconfr #xebiconfr
Définir 2 services
Chaque service est associéà un ELB
Chaque service est associéà une même entrée Route53 avec une policy par poids(Primaire: 100%, Secondaire: 0%)
Switcher les poids pour changer le routage DNS d’un service à l’autre
TaskTask
Task
Route 53 record set
with weighted routing policy
Blue-Green Deployments
TaskTask
Task
55
@xebiconfr #xebiconfr
Elastic Search Cluster
Container 1 Container 2
Container 3
ECS Instance
Container 4
Container 1 Container 2
Container 3
ECS Instance
Container 4
Gelf
Plugin Logstash
Gestion des logs avec ELK
56
@xebiconfr #xebiconfr
Container 1 Container 2
Container 3
ECS Instance
Container 4
Container 1 Container 2
Container 3
ECS Instance
Container 4
AWS Log Driver
Gestion des logs CloudWatch Logs
57
@xebiconfr #xebiconfr
Cloud Hybride
58
@xebiconfr #xebiconfr
Direct Connect
VPN
Virtual Private Cloud
Intégrer un DataCenter avec AWS
59
@xebiconfr #xebiconfr
Conclusion
60
@xebiconfr #xebiconfr#ContainerdayFR
EC2
Beanstalk
ECS
Une solution pour chaque besoin
61
@xebiconfr #xebiconfr
Questions
62