Successfully reported this slideshow.
#DevoxxFR
Orchestration de containers
Le choix des armes
Jean-Louis Rigau
Thomas Auffredou
Yannick Lorenzati
1
#DevoxxFR
Jean-Louis
Rigau
2
Expert DevOps
&
Responsable de l’offre
Xebia Container
@jlrigau
#DevoxxFR
Developer as a Service
Expert DevOps
@tauffredou
Thomas
Auffredou
3
#DevoxxFR
DevOps & Docker enthusiast
@ylorenzati
4
Yannick
Lorenzati
#DevoxxFR @ylorenzati 5
#DevoxxFR
Deuxième édition
13 juin 2017
http://paris-container-day.fr
6
#DevoxxFR
Diffusez vos cartes dans la communauté
et devenez un ninja du développement.
7
#DevoxxFR
8
Xebia #BeXebian
recrutement@xebia.fr
8
#DevoxxFR
S01 : Contexte
● Les Conteneurs
● Architecture microservices
● C’est quoi un orchestrateur ?
● Swarm, Mesos et K...
#DevoxxFR
S02 : Utilisation
● Usine logicielle
● Pipeline
● Déploiement de l’application
● Communication inter-conteneurs
...
#DevoxxFR @ylorenzati
S03 : Exploitation
● Infrastructure
● Gestion des volumes
● Service Discovery
● Haute Disponibilité
...
#DevoxxFR
S01 : Contexte
On pose les bases
12
#DevoxxFR
Les Conteneurs
13
#DevoxxFR
C’est quoi un conteneur ?
● Basé sur le noyau linux
● Isolation d’un processus
● Plusieurs implémentations
14
#DevoxxFR
Nouveau standard de packaging
On ne livre plus une application
mais une image avec :
○ L’application
○ Son runti...
#DevoxxFR
Conteneur vs Vm
16
#DevoxxFR
Microservices
17
#DevoxxFR
Monolithe, problème
de mise à l’échelle
18
#DevoxxFR
Catherine de Médicish
Divide ut crescas
19
19
#DevoxxFR
Diviser pour
mieux scaler
20
#DevoxxFR
Complexité des
architectures
microservices
● Multiplication des services
stateless
● Multiplication des bases de...
#DevoxxFR
Microservices
❤
conteneurs
22
#DevoxxFR
Tant qu’on peut les
compter, tout va bien
23
#DevoxxFR
RÉPONSE: 117
24
#DevoxxFR
Une seule solution ...
25
#DevoxxFR
...c’est l’orchestration
26
#DevoxxFR
Mais c’est quoi un
orchestrateur ?
27
#DevoxxFR
Il gère un pool de ressources
28
#DevoxxFR
Hyperviseur VS orchestrateur
29
1 machine, N systèmes * N machines, 1 système
* N machines, N systèmes avec des ...
#DevoxxFR
Il connaît la topologie du cluster
Ressources disponibles
Applications déployées
30
#DevoxxFR
État de santé des services
31
#DevoxxFR
État de santé de la plateforme
32
#DevoxxFR
Évolution des outils
33
Manuel Automatisé Délégué
#DevoxxFR
Swarm mode
34
#DevoxxFR
Généralités
35
Docker Swarm mode
3000 commits
71 contributeurs
Développé en Go
Géré par Docker Inc
#DevoxxFR
Un peu de vocabulaire
Node : Docker engine membre du cluster swarm de
type Manager ou Worker
Service : un ensemb...
#DevoxxFR 37
#DevoxxFR
Notions clés
38
Une unique dépendance : le Docker Engine
Manager ou Worker au runtime
Modèle de service déclarat...
#DevoxxFR 39
#DevoxxFR 40
Mesos / Marathon
#DevoxxFR
Généralités
41
Mesos
12000 commits
240 contributeurs
Marathon
5400 commits
228 contributeurs
Géré par Mesosphere
#DevoxxFR
Un peu de vocabulaire
42
Mesos Master : Connaît l’ensemble des ressources du
cluster et orchestre les tâches
Mes...
#DevoxxFR 43
#DevoxxFR
Notions clés
44
Séparation de la gestion des ressources et du
déploiement des applications
De multiples framewor...
#DevoxxFR 45
#DevoxxFR 46
Kubernetes
#DevoxxFR
Généralités
47
46000 commits
1100 contributeurs
Géré par la Cloud Native Computing Foundation
#DevoxxFR
Un peu de vocabulaire
48
Apiserver : expose l’API kubernetes. Connaît l’état
souhaité du cluster
Kube-controller...
#DevoxxFR
Un peu de vocabulaire
49
Master : regroupe les composants nécessaires à la
gestion du cluster
Node : exécute les...
#DevoxxFR 50
#DevoxxFR
Notions clés
51
Un pod regroupe plusieurs conteneurs
Chaque pod est accessible par une adresse ip dédiée,
routab...
#DevoxxFR 52
#DevoxxFR 53
Cycle de vie
d’une application
conteneurisée
BUILD
#DevoxxFR
Code source
54
#DevoxxFR
Conteneur de build
55
#DevoxxFR
on la met dans un conteneur
app java + java runtime + tomcat dans un container ?
Conteneur applicatif
56
#DevoxxFR
Slaves à la demande
57
#DevoxxFR 58
SHIP
Cycle de vie
d’une application
conteneurisée
#DevoxxFR
Unité de déploiement
Image de conteneur = Unité de déploiement
Nécessite la mise en place d’une Registry pour st...
#DevoxxFR
Gestion des environnements
Environnements ISO prod (recette, preprod)
Création dynamique d’environnements :
la b...
#DevoxxFR 61
RUN
Cycle de vie
d’une application
conteneurisée
#DevoxxFR
Déploiement
Toutes nos applications sont déployées de manière
identique via des API REST
Il faut anticiper les r...
#DevoxxFR
Mise à jour
Stratégies de déploiement :
● Rolling update
● Canary release
● Blue / green
63
#DevoxxFR
Résilience
● Redéploiement
● Healthcheck
● Réconciliation
64
#DevoxxFR
Application Clickcount
65
#DevoxxFR
Architecture
66
#DevoxxFR
Application of the year !!!
67
#DevoxxFR
In the next episode...
68
#DevoxxFR
S02 : Utilisation
69
On utilise la plateforme pour déployer l’application
click-count
#DevoxxFR
Usine Logicielle
70
#DevoxxFR 71
Big Picture
#DevoxxFR
Usine Logicielle
72
Objectif : usine résiliente et scalable
“S’appuyer au maximum sur les possibilités offertes
...
#DevoxxFR 73
Swarm mode
#DevoxxFR
Communication entre le Jenkins master et les slaves
via le plugin Jenkins Swarm
(https://plugins.jenkins.io/swar...
#DevoxxFR
Utilisation du plugin Jenkins Docker pipeline pour les
conteneurs de build
75
Swarm mode
#DevoxxFR
$ echo "xxxxxxx" | docker secret create 
jenkins_admin_password -
Utilisation de Docker Compose pour déployer l’...
#DevoxxFR 77
Mesos / Marathon
#DevoxxFR
Utilisation du plugin Jenkins Mesos
(https://plugins.jenkins.io/mesos)
Création d’un framework dédié “Jenkins Sc...
#DevoxxFR 79
Configuration de templates pour les slaves (Slave Info)
Utilisation des labels Jenkins au sein des jobs
Exécu...
#DevoxxFR
Utilisation de Marathon pour déployer la CI sous la
forme d’un groupe
80
Mesos / Marathon
#DevoxxFR 81
Kubernetes
#DevoxxFR
Utilisation du plugin kubernetes
(https://plugins.jenkins.io/kubernetes)
Les agents jenkins sont démarrés à la d...
#DevoxxFR
L’usine logicielle est déployée à l’intérieur du cluster
Kubernetes.
83
Kubernetes
#DevoxxFR 84
Kubernetes
#DevoxxFR
Pipeline
85
#DevoxxFR
stage(‘Preparation’)
Utilisation du plugin pipeline de Jenkins
Configuration du job via le Jenkinsfile
Check-out...
#DevoxxFR
Construction de l’application avec Maven ($ mvn clean
package)
Plusieurs stratégies possibles :
● Utiliser un co...
#DevoxxFR
stage(‘Result’)
Stockage du WAR au sein de Jenkins
Archive nécessaire à la création de l’image applicative
Pas d...
#DevoxxFR
stage(‘Build image’)
Construction de l’image applicative Click Count
89
#DevoxxFR
stage(‘Push image’)
Push de l’image au sein
de la Docker Registry
Utilisation du Commit ID
comme tag
90
#DevoxxFR
stage(‘Deploy on Staging’)
Déploiement de l’application Click Count sur
l’environnement de Staging
Spécifique à ...
#DevoxxFR
Déploiement de
l’application
92
#DevoxxFR
Swarm mode
93
Docker Compose V 3.1
2 services :
● Web (replicas=3)
● Redis
#DevoxxFR
Swarm mode
94
Déploiement de l’application sur le cluster Swarm via
le Compose file
$ VERSION=${version} docker ...
#DevoxxFR 95
#DevoxxFR
Mesos / Marathon
96
Mesos V 1.1.0 + Marathon V 1.4.1
Un groupe contenant 2 applications
#DevoxxFR
Mesos / Marathon
97
Création du groupe click-count via l’API REST de
Marathon
$ curl -X PUT -H 'Content-type: ap...
#DevoxxFR 98
#DevoxxFR
Kubernetes
99
Kubernetes V 1.5.4
2 Deployments
(Web + Redis)
4 replicas pour le
service Web
#DevoxxFR
Kubernetes
100
Déploiement de l’application via la CLI (kubectl)
$ kubectl --namespace=${namespace} apply -f k8s...
#DevoxxFR
Kubernetes
Intégration AWS :
Configuration des DNS route53 publics via
molecule/route53-kubernetes
Configuration...
#DevoxxFR 102
#DevoxxFR
Communication
inter-conteneurs
103
#DevoxxFR
Faire communiquer les
différentes instances de
l’application Web avec le
cache Redis
Quels besoins ?
104
#DevoxxFR
Utilisation d’un Overlay
network dédié à l’ensemble de
la stack de services
S’appuie sur le DNS interne de
Docke...
#DevoxxFR
Création d’un Overlay
network “default” par Docker
Compose au déploiement
Accès aux différents services
directem...
#DevoxxFR 107
#DevoxxFR
Utilisation de Marathon LB qui
s’appuie sur HAProxy
Déployé sous la forme d’un
conteneur sur chaque Mesos Slave
...
#DevoxxFR 109
Mesos / Marathon
#DevoxxFR 110
#DevoxxFR 111
Calico : routage BGP
Service : routage L4, répartit la charge sur les services
sous-jacents
Namespace & Kube...
#DevoxxFR
Kubernetes
En complément :
ingress : routage applicatif L7
112
#DevoxxFR 113
#DevoxxFR
Persistance des données
114
#DevoxxFR
Conserver les données du
cache Redis après un
redéploiement du service
ou d’une montée de version
Quels besoins ...
#DevoxxFR
La problématique
116
Par nature, un conteneur est immutable
La persistance des données doit se faire via l’utili...
#DevoxxFR
...et au sein d’un cluster ?
117
Les données doivent être accessibles depuis n’importe
quel noeud du cluster
Ass...
#DevoxxFR 118
Swarm mode
Déclaration d’un volume
pour le cache Redis au sein
du fichier Compose
Utilisation du driver
“rex...
#DevoxxFR 119
#DevoxxFR 120
Mesos / Marathon
Déclaration du volume dans le fichier de configuration
Marathon
Configuration via les param...
#DevoxxFR 121
Mesos / Marathon
#DevoxxFR 122
#DevoxxFR
Déclaration du point de
montage /data au sein du
conteneur
Utilisation d’un Persistent
Volumes
https://kubernete...
#DevoxxFR 124
#DevoxxFR
Scalabilité
125
#DevoxxFR
L’application Web doit être
capable de s’adapter à de
faible ou forte demande
Quels besoins ?
126
#DevoxxFR 127
Swarm mode
Utilisation de la commande “docker service scale”
$ docker service scale click-count_web=10
#DevoxxFR 128
Mesos / Marathon
#DevoxxFR 129
Kubernetes
Utilisation de la commande “kubectl scale”
$ kubectl scale --replicas=5 deployment/click-count
#DevoxxFR 130
#DevoxxFR
Résilience des
applications
131
#DevoxxFR
L’application Click-count
doit être toujours
disponible et résiliente à la
panne
Quels besoins ?
132
#DevoxxFR 133
#DevoxxFR
In the next episode...
134
#DevoxxFR @ylorenzati
S03 : Exploitation
On exploite nos orchestrateurs
Agenda
135
#DevoxxFR
Infrastructure
136
#DevoxxFR
Outils utilisés
137
Kargo
#DevoxxFR
Infrastructure globale
Pour chaque orchestrateur :
● Une zone isolée pour les 3 masters
● Une zone isolée pour l...
#DevoxxFR
Cloud Amazon AWS
Utilisation minimum des services managés...
...à l’exclusion de :
● Elastic Load Balancing
● El...
#DevoxxFR
Gestion des volumes
140
#DevoxxFR
Utilisation du plugin REX-Ray
$dockerplugin install --grant-all-permissions
rexray/ebs:latest
141
Swarm mode
#DevoxxFR
External Volumes
Basé sur REX-Ray
Fonctionne en mode docker et mesos containerizer
Au final, en mode docker, aut...
#DevoxxFR
Création dynamique de volumes persistants avec
StorageClass et le provisionner aws-ebs
Pour l’usine, utilisation...
#DevoxxFR
Compatible REX-Ray
Uniquement en Flex Volume
Nécessite la création préalable du volume
144
Kubernetes
#DevoxxFR
Service discovery
145
#DevoxxFR
Quels besoins ?
Exposer les services vers l’extérieur
Répartition de charge & Routage HTTP
Enregistrement automa...
#DevoxxFR
Mise en place de Træfɪk
● Load Balancer niveau 7
● Développé en Go
● API REST
● Multiple backends
● Configuratio...
#DevoxxFR 148
Swarm mode
#DevoxxFR
Utilisation d’un Amazon ELB afin de faire
communiquer Marathon-lb avec le monde extérieur
149
Mesos / Marathon
#DevoxxFR
Utilisation d’un service de type “LoadBalancer” pour
communiquer avec le monde extérieur
Ce service va démarrer ...
#DevoxxFR
Utilisation du plugin CNI
Calico pour la partie
network
151
Kubernetes
#DevoxxFR
Haute disponibilité
152
#DevoxxFR
Perte d’un slave
Les tâches de ce slave seront redéployé sur les autres
slaves
153
#DevoxxFR
Perte d’un master
La perte d’un master n’affecte pas les services
existants
Mécanisme de multi master :
On a un ...
#DevoxxFR
3 noeuds
● Tolérance à une panne
5 noeuds
● Tolérance a deux pannes
● Un master en maintenance + tolérance à une...
#DevoxxFR
Gestion des logs
156
#DevoxxFR
Graylog
Centralisation des logs avec Graylog
(https://www.graylog.org)
Traitement des logs comme des flux d’évèn...
#DevoxxFR
Usages
Récupération de l’ensemble des logs des services
conteneurisés
● Services d’infrastructure (marathon-lb, ...
#DevoxxFR
Fonctionnalités Clefs
Recherche avancée (Ex : par
container name ou ID)
Dashboards (Interface Web + API
REST)
An...
#DevoxxFR
Graylog Extended Log Format
Événements structurés depuis n'importe où !
Syslog sans ses limitations
Compression ...
#DevoxxFR
Exemple de payload
161
#DevoxxFR
Docker logging driver
Configuration du démon Docker
{
"log-driver": "gelf",
"log-opts": {
"gelf-address": "{{ do...
#DevoxxFR 163
#DevoxxFR
Monitoring
164
#DevoxxFR
Une solution unifié
165
#DevoxxFR 166
#DevoxxFR
167
Merci / Question ?
167
Prochain SlideShare
Chargement dans…5
×

Devoxx 17 - Orchestration de conteneurs : le choix des armes !

481 vues

Publié le

Retrouvez la vidéo de la conférence sur : https://www.youtube.com/watch?v=UhrIOMuA3_w

L’année passée a vu converger les fonctionnalités des moteurs de conteneurs. L’enjeu de l’année à venir n’est plus sur les couches système mais bien sur l’orchestration des services. Nous vous proposons de comparer les trois orchestrateurs Mesos/Marathon, Swarm/Docker DC et Kubernetes au travers d’un cycle de vie devops : intégration continue, déploiement, “Infrastructure-as-Code” et exploitation.

Par Jonathan Raffre, Yannick Lorenzati, Jean-Louis Rigau, Thomas Auffredou, Experts DevOps et Coud chez Xebia.

Publié dans : Technologie
  • Soyez le premier à commenter

Devoxx 17 - Orchestration de conteneurs : le choix des armes !

  1. 1. #DevoxxFR Orchestration de containers Le choix des armes Jean-Louis Rigau Thomas Auffredou Yannick Lorenzati 1
  2. 2. #DevoxxFR Jean-Louis Rigau 2 Expert DevOps & Responsable de l’offre Xebia Container @jlrigau
  3. 3. #DevoxxFR Developer as a Service Expert DevOps @tauffredou Thomas Auffredou 3
  4. 4. #DevoxxFR DevOps & Docker enthusiast @ylorenzati 4 Yannick Lorenzati
  5. 5. #DevoxxFR @ylorenzati 5
  6. 6. #DevoxxFR Deuxième édition 13 juin 2017 http://paris-container-day.fr 6
  7. 7. #DevoxxFR Diffusez vos cartes dans la communauté et devenez un ninja du développement. 7
  8. 8. #DevoxxFR 8 Xebia #BeXebian recrutement@xebia.fr 8
  9. 9. #DevoxxFR S01 : Contexte ● Les Conteneurs ● Architecture microservices ● C’est quoi un orchestrateur ? ● Swarm, Mesos et Kubernetes ● Cycle de vie ● Architecture de l’application de démo Agenda 9
  10. 10. #DevoxxFR S02 : Utilisation ● Usine logicielle ● Pipeline ● Déploiement de l’application ● Communication inter-conteneurs ● Persistance des données ● Scalabilité ● Résilience Agenda 10
  11. 11. #DevoxxFR @ylorenzati S03 : Exploitation ● Infrastructure ● Gestion des volumes ● Service Discovery ● Haute Disponibilité ● Gestion des logs ● Monitoring Agenda 11
  12. 12. #DevoxxFR S01 : Contexte On pose les bases 12
  13. 13. #DevoxxFR Les Conteneurs 13
  14. 14. #DevoxxFR C’est quoi un conteneur ? ● Basé sur le noyau linux ● Isolation d’un processus ● Plusieurs implémentations 14
  15. 15. #DevoxxFR Nouveau standard de packaging On ne livre plus une application mais une image avec : ○ L’application ○ Son runtime ○ Toutes ses dépendances 15
  16. 16. #DevoxxFR Conteneur vs Vm 16
  17. 17. #DevoxxFR Microservices 17
  18. 18. #DevoxxFR Monolithe, problème de mise à l’échelle 18
  19. 19. #DevoxxFR Catherine de Médicish Divide ut crescas 19 19
  20. 20. #DevoxxFR Diviser pour mieux scaler 20
  21. 21. #DevoxxFR Complexité des architectures microservices ● Multiplication des services stateless ● Multiplication des bases de données ● Communication interservices 21
  22. 22. #DevoxxFR Microservices ❤ conteneurs 22
  23. 23. #DevoxxFR Tant qu’on peut les compter, tout va bien 23
  24. 24. #DevoxxFR RÉPONSE: 117 24
  25. 25. #DevoxxFR Une seule solution ... 25
  26. 26. #DevoxxFR ...c’est l’orchestration 26
  27. 27. #DevoxxFR Mais c’est quoi un orchestrateur ? 27
  28. 28. #DevoxxFR Il gère un pool de ressources 28
  29. 29. #DevoxxFR Hyperviseur VS orchestrateur 29 1 machine, N systèmes * N machines, 1 système * N machines, N systèmes avec des outils de gestion d’infrastructure
  30. 30. #DevoxxFR Il connaît la topologie du cluster Ressources disponibles Applications déployées 30
  31. 31. #DevoxxFR État de santé des services 31
  32. 32. #DevoxxFR État de santé de la plateforme 32
  33. 33. #DevoxxFR Évolution des outils 33 Manuel Automatisé Délégué
  34. 34. #DevoxxFR Swarm mode 34
  35. 35. #DevoxxFR Généralités 35 Docker Swarm mode 3000 commits 71 contributeurs Développé en Go Géré par Docker Inc
  36. 36. #DevoxxFR Un peu de vocabulaire Node : Docker engine membre du cluster swarm de type Manager ou Worker Service : un ensemble de tâches Task : Un conteneur et sa commande 36
  37. 37. #DevoxxFR 37
  38. 38. #DevoxxFR Notions clés 38 Une unique dépendance : le Docker Engine Manager ou Worker au runtime Modèle de service déclaratif
  39. 39. #DevoxxFR 39
  40. 40. #DevoxxFR 40 Mesos / Marathon
  41. 41. #DevoxxFR Généralités 41 Mesos 12000 commits 240 contributeurs Marathon 5400 commits 228 contributeurs Géré par Mesosphere
  42. 42. #DevoxxFR Un peu de vocabulaire 42 Mesos Master : Connaît l’ensemble des ressources du cluster et orchestre les tâches Mesos Agent : Il exécute les tâches demandées par le master localement Framework : Il permet d’interagir avec le master (scheduler + executor) Task : Représente un processus exécuté sur un agent
  43. 43. #DevoxxFR 43
  44. 44. #DevoxxFR Notions clés 44 Séparation de la gestion des ressources et du déploiement des applications De multiples frameworks (http://mesos.apache.org/documentation/latest/frame works) Supporte plusieurs runtimes de conteneurs (Docker + Mesos containerizer)
  45. 45. #DevoxxFR 45
  46. 46. #DevoxxFR 46 Kubernetes
  47. 47. #DevoxxFR Généralités 47 46000 commits 1100 contributeurs Géré par la Cloud Native Computing Foundation
  48. 48. #DevoxxFR Un peu de vocabulaire 48 Apiserver : expose l’API kubernetes. Connaît l’état souhaité du cluster Kube-controller-manager : contrôle état du cluster Kube-proxy : configure l’accès aux services Kubelet : présent sur chaque noeud, il exécute les pods
  49. 49. #DevoxxFR Un peu de vocabulaire 49 Master : regroupe les composants nécessaires à la gestion du cluster Node : exécute les pods Pod : ensemble de conteneurs colocalisés partageant des ressources ( stockage, ip)
  50. 50. #DevoxxFR 50
  51. 51. #DevoxxFR Notions clés 51 Un pod regroupe plusieurs conteneurs Chaque pod est accessible par une adresse ip dédiée, routable au sein du cluster.
  52. 52. #DevoxxFR 52
  53. 53. #DevoxxFR 53 Cycle de vie d’une application conteneurisée BUILD
  54. 54. #DevoxxFR Code source 54
  55. 55. #DevoxxFR Conteneur de build 55
  56. 56. #DevoxxFR on la met dans un conteneur app java + java runtime + tomcat dans un container ? Conteneur applicatif 56
  57. 57. #DevoxxFR Slaves à la demande 57
  58. 58. #DevoxxFR 58 SHIP Cycle de vie d’une application conteneurisée
  59. 59. #DevoxxFR Unité de déploiement Image de conteneur = Unité de déploiement Nécessite la mise en place d’une Registry pour stocker les images Mécanisme de Push / Pull 59
  60. 60. #DevoxxFR Gestion des environnements Environnements ISO prod (recette, preprod) Création dynamique d’environnements : la branche “FEATURE-better-click” crée un environnement “better-click” 60
  61. 61. #DevoxxFR 61 RUN Cycle de vie d’une application conteneurisée
  62. 62. #DevoxxFR Déploiement Toutes nos applications sont déployées de manière identique via des API REST Il faut anticiper les ressources nécessaires pour chaque application 62
  63. 63. #DevoxxFR Mise à jour Stratégies de déploiement : ● Rolling update ● Canary release ● Blue / green 63
  64. 64. #DevoxxFR Résilience ● Redéploiement ● Healthcheck ● Réconciliation 64
  65. 65. #DevoxxFR Application Clickcount 65
  66. 66. #DevoxxFR Architecture 66
  67. 67. #DevoxxFR Application of the year !!! 67
  68. 68. #DevoxxFR In the next episode... 68
  69. 69. #DevoxxFR S02 : Utilisation 69 On utilise la plateforme pour déployer l’application click-count
  70. 70. #DevoxxFR Usine Logicielle 70
  71. 71. #DevoxxFR 71 Big Picture
  72. 72. #DevoxxFR Usine Logicielle 72 Objectif : usine résiliente et scalable “S’appuyer au maximum sur les possibilités offertes par la plateforme d’orchestration sous-jacente.”
  73. 73. #DevoxxFR 73 Swarm mode
  74. 74. #DevoxxFR Communication entre le Jenkins master et les slaves via le plugin Jenkins Swarm (https://plugins.jenkins.io/swarm) Possibilité d’ajouter ou supprimer des slaves via Docker 74 $ docker service scale ci_jenkins-slave=10 Swarm mode
  75. 75. #DevoxxFR Utilisation du plugin Jenkins Docker pipeline pour les conteneurs de build 75 Swarm mode
  76. 76. #DevoxxFR $ echo "xxxxxxx" | docker secret create jenkins_admin_password - Utilisation de Docker Compose pour déployer l’usine logicielle Création d’un secret pour stocker le mot de passe du Jenkins master 76 Swarm mode
  77. 77. #DevoxxFR 77 Mesos / Marathon
  78. 78. #DevoxxFR Utilisation du plugin Jenkins Mesos (https://plugins.jenkins.io/mesos) Création d’un framework dédié “Jenkins Scheduler” Communication via JNLP entre le master et les slaves Mesos HA non supporté 78 Mesos / Marathon
  79. 79. #DevoxxFR 79 Configuration de templates pour les slaves (Slave Info) Utilisation des labels Jenkins au sein des jobs Exécution des Jenkins slave à la demande Utilisation d’une image de conteneur pour chaque template Nécessite un JDK sur chaque slave Mesos / Marathon
  80. 80. #DevoxxFR Utilisation de Marathon pour déployer la CI sous la forme d’un groupe 80 Mesos / Marathon
  81. 81. #DevoxxFR 81 Kubernetes
  82. 82. #DevoxxFR Utilisation du plugin kubernetes (https://plugins.jenkins.io/kubernetes) Les agents jenkins sont démarrés à la demande et utilisent à leur tour des conteneurs de build 82 Kubernetes
  83. 83. #DevoxxFR L’usine logicielle est déployée à l’intérieur du cluster Kubernetes. 83 Kubernetes
  84. 84. #DevoxxFR 84 Kubernetes
  85. 85. #DevoxxFR Pipeline 85
  86. 86. #DevoxxFR stage(‘Preparation’) Utilisation du plugin pipeline de Jenkins Configuration du job via le Jenkinsfile Check-out du repository Click Count Création d’un numéro de version basé sur le Commit ID 86
  87. 87. #DevoxxFR Construction de l’application avec Maven ($ mvn clean package) Plusieurs stratégies possibles : ● Utiliser un conteneur de build ● Réutiliser le Jenkins agent pour builder stage(‘build’) 87
  88. 88. #DevoxxFR stage(‘Result’) Stockage du WAR au sein de Jenkins Archive nécessaire à la création de l’image applicative Pas de déploiement sur un repository de type Nexus Package de déploiement = Image Docker 88
  89. 89. #DevoxxFR stage(‘Build image’) Construction de l’image applicative Click Count 89
  90. 90. #DevoxxFR stage(‘Push image’) Push de l’image au sein de la Docker Registry Utilisation du Commit ID comme tag 90
  91. 91. #DevoxxFR stage(‘Deploy on Staging’) Déploiement de l’application Click Count sur l’environnement de Staging Spécifique à l’orchestrateur ● Docker Compose ● API REST de Marathon ● Kubernetes CLI (kubectl) 91
  92. 92. #DevoxxFR Déploiement de l’application 92
  93. 93. #DevoxxFR Swarm mode 93 Docker Compose V 3.1 2 services : ● Web (replicas=3) ● Redis
  94. 94. #DevoxxFR Swarm mode 94 Déploiement de l’application sur le cluster Swarm via le Compose file $ VERSION=${version} docker -H tcp://swarm-master1.private:2375 stack deploy -c docker-compose.yml click-count
  95. 95. #DevoxxFR 95
  96. 96. #DevoxxFR Mesos / Marathon 96 Mesos V 1.1.0 + Marathon V 1.4.1 Un groupe contenant 2 applications
  97. 97. #DevoxxFR Mesos / Marathon 97 Création du groupe click-count via l’API REST de Marathon $ curl -X PUT -H 'Content-type: application/json' http://mesos-master1.private:8080/v2/groups -d@marathon.json
  98. 98. #DevoxxFR 98
  99. 99. #DevoxxFR Kubernetes 99 Kubernetes V 1.5.4 2 Deployments (Web + Redis) 4 replicas pour le service Web
  100. 100. #DevoxxFR Kubernetes 100 Déploiement de l’application via la CLI (kubectl) $ kubectl --namespace=${namespace} apply -f k8s/dev/
  101. 101. #DevoxxFR Kubernetes Intégration AWS : Configuration des DNS route53 publics via molecule/route53-kubernetes Configuration des ELB via le cloud-provider AWS 101
  102. 102. #DevoxxFR 102
  103. 103. #DevoxxFR Communication inter-conteneurs 103
  104. 104. #DevoxxFR Faire communiquer les différentes instances de l’application Web avec le cache Redis Quels besoins ? 104
  105. 105. #DevoxxFR Utilisation d’un Overlay network dédié à l’ensemble de la stack de services S’appuie sur le DNS interne de Docker Mesh Routing natif (niveau 4) 105 Swarm mode
  106. 106. #DevoxxFR Création d’un Overlay network “default” par Docker Compose au déploiement Accès aux différents services directement via leur nom redis:6379 106 Swarm mode
  107. 107. #DevoxxFR 107
  108. 108. #DevoxxFR Utilisation de Marathon LB qui s’appuie sur HAProxy Déployé sous la forme d’un conteneur sur chaque Mesos Slave Expose les ports de services des applications dynamiquement 108 Mesos / Marathon
  109. 109. #DevoxxFR 109 Mesos / Marathon
  110. 110. #DevoxxFR 110
  111. 111. #DevoxxFR 111 Calico : routage BGP Service : routage L4, répartit la charge sur les services sous-jacents Namespace & KubeDNS : les services disposent d’une entrée DNS relative au namespace. ex : redis.clickcount.svc.cluster.local Kubernetes
  112. 112. #DevoxxFR Kubernetes En complément : ingress : routage applicatif L7 112
  113. 113. #DevoxxFR 113
  114. 114. #DevoxxFR Persistance des données 114
  115. 115. #DevoxxFR Conserver les données du cache Redis après un redéploiement du service ou d’une montée de version Quels besoins ? 115
  116. 116. #DevoxxFR La problématique 116 Par nature, un conteneur est immutable La persistance des données doit se faire via l’utilisation d’un volume Les volumes locaux ne garantissent pas la persistance des données
  117. 117. #DevoxxFR ...et au sein d’un cluster ? 117 Les données doivent être accessibles depuis n’importe quel noeud du cluster Associer les volumes Docker avec un système de stockage réseau ● Docker plugin REX-Ray ● Kubernetes Persistent Volumes
  118. 118. #DevoxxFR 118 Swarm mode Déclaration d’un volume pour le cache Redis au sein du fichier Compose Utilisation du driver “rexray/ebs:latest” afin de persister les données au sein d’un volume EBS
  119. 119. #DevoxxFR 119
  120. 120. #DevoxxFR 120 Mesos / Marathon Déclaration du volume dans le fichier de configuration Marathon Configuration via les paramètres --volume-driver et --volume pour utiliser le plugin REX-Ray via Docker https://rexray.readthedocs.io/en/stable/user-guide/sch edulers/#docker-containerizer-with-marathon
  121. 121. #DevoxxFR 121 Mesos / Marathon
  122. 122. #DevoxxFR 122
  123. 123. #DevoxxFR Déclaration du point de montage /data au sein du conteneur Utilisation d’un Persistent Volumes https://kubernetes.io/docs/c oncepts/storage/persistent- volumes/ 123 Kubernetes
  124. 124. #DevoxxFR 124
  125. 125. #DevoxxFR Scalabilité 125
  126. 126. #DevoxxFR L’application Web doit être capable de s’adapter à de faible ou forte demande Quels besoins ? 126
  127. 127. #DevoxxFR 127 Swarm mode Utilisation de la commande “docker service scale” $ docker service scale click-count_web=10
  128. 128. #DevoxxFR 128 Mesos / Marathon
  129. 129. #DevoxxFR 129 Kubernetes Utilisation de la commande “kubectl scale” $ kubectl scale --replicas=5 deployment/click-count
  130. 130. #DevoxxFR 130
  131. 131. #DevoxxFR Résilience des applications 131
  132. 132. #DevoxxFR L’application Click-count doit être toujours disponible et résiliente à la panne Quels besoins ? 132
  133. 133. #DevoxxFR 133
  134. 134. #DevoxxFR In the next episode... 134
  135. 135. #DevoxxFR @ylorenzati S03 : Exploitation On exploite nos orchestrateurs Agenda 135
  136. 136. #DevoxxFR Infrastructure 136
  137. 137. #DevoxxFR Outils utilisés 137 Kargo
  138. 138. #DevoxxFR Infrastructure globale Pour chaque orchestrateur : ● Une zone isolée pour les 3 masters ● Une zone isolée pour les 5 workers Une zone transverse pour les outils de logging et de monitoring 138
  139. 139. #DevoxxFR Cloud Amazon AWS Utilisation minimum des services managés... ...à l’exclusion de : ● Elastic Load Balancing ● Elastic Block Store ● Route 53 139
  140. 140. #DevoxxFR Gestion des volumes 140
  141. 141. #DevoxxFR Utilisation du plugin REX-Ray $dockerplugin install --grant-all-permissions rexray/ebs:latest 141 Swarm mode
  142. 142. #DevoxxFR External Volumes Basé sur REX-Ray Fonctionne en mode docker et mesos containerizer Au final, en mode docker, autant utiliser REX-Ray directement…. cf slide d’avant 142 Mesos / Marathon
  143. 143. #DevoxxFR Création dynamique de volumes persistants avec StorageClass et le provisionner aws-ebs Pour l’usine, utilisation des emptyVolume pour les données éphémères. 143 Kubernetes
  144. 144. #DevoxxFR Compatible REX-Ray Uniquement en Flex Volume Nécessite la création préalable du volume 144 Kubernetes
  145. 145. #DevoxxFR Service discovery 145
  146. 146. #DevoxxFR Quels besoins ? Exposer les services vers l’extérieur Répartition de charge & Routage HTTP Enregistrement automatique des services Domain Name Server (DNS) 146
  147. 147. #DevoxxFR Mise en place de Træfɪk ● Load Balancer niveau 7 ● Développé en Go ● API REST ● Multiple backends ● Configuration à chaud 147 Swarm mode
  148. 148. #DevoxxFR 148 Swarm mode
  149. 149. #DevoxxFR Utilisation d’un Amazon ELB afin de faire communiquer Marathon-lb avec le monde extérieur 149 Mesos / Marathon
  150. 150. #DevoxxFR Utilisation d’un service de type “LoadBalancer” pour communiquer avec le monde extérieur Ce service va démarrer un Amazon ELB devant l’application 150 Kubernetes
  151. 151. #DevoxxFR Utilisation du plugin CNI Calico pour la partie network 151 Kubernetes
  152. 152. #DevoxxFR Haute disponibilité 152
  153. 153. #DevoxxFR Perte d’un slave Les tâches de ce slave seront redéployé sur les autres slaves 153
  154. 154. #DevoxxFR Perte d’un master La perte d’un master n’affecte pas les services existants Mécanisme de multi master : On a un master leader et les autres sont passifs Election geré par Consensus : RAFT / Paxos 154
  155. 155. #DevoxxFR 3 noeuds ● Tolérance à une panne 5 noeuds ● Tolérance a deux pannes ● Un master en maintenance + tolérance à une panne Multi-master 155
  156. 156. #DevoxxFR Gestion des logs 156
  157. 157. #DevoxxFR Graylog Centralisation des logs avec Graylog (https://www.graylog.org) Traitement des logs comme des flux d’évènements (https://12factor.net/fr/logs) https://blog.docker.com/2017/02/adventures-in-gelf/ 157
  158. 158. #DevoxxFR Usages Récupération de l’ensemble des logs des services conteneurisés ● Services d’infrastructure (marathon-lb, træfɪk, etc.) ● Services de l’usine logicielle (Docker Registry, Jenkins master + slaves, conteneurs de builds, etc.) ● Services de l’application Click Count (Web + Redis) 158
  159. 159. #DevoxxFR Fonctionnalités Clefs Recherche avancée (Ex : par container name ou ID) Dashboards (Interface Web + API REST) Analyses avancées (Exploration de données) Alertes et déclencheurs 159
  160. 160. #DevoxxFR Graylog Extended Log Format Événements structurés depuis n'importe où ! Syslog sans ses limitations Compression et Chunking out-of-the-box Les données sont typées 160
  161. 161. #DevoxxFR Exemple de payload 161
  162. 162. #DevoxxFR Docker logging driver Configuration du démon Docker { "log-driver": "gelf", "log-opts": { "gelf-address": "{{ docker_gelf_address }}" } } 162
  163. 163. #DevoxxFR 163
  164. 164. #DevoxxFR Monitoring 164
  165. 165. #DevoxxFR Une solution unifié 165
  166. 166. #DevoxxFR 166
  167. 167. #DevoxxFR 167 Merci / Question ? 167

×