XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Alexis Kinsella, CTO de...

Post on 09-Jan-2017

93 views 2 download

Transcript of XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Alexis Kinsella, CTO de...

@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