Uploaded by didier.troy

Docker DAY 0

advertisement
Présentation
●
●
●
●
●
Treeptik, issue du monde Java, adopte une démarche DevOps dans son organisation et son
offre de services
Actuellement 35 salariés
Créateur du PaaS CloudUnit à destination des développeurs Java
Partenaire historique Docker depuis 2014
Treeptik intervient chez ses clients en fonction du besoin :
○ Prestations d’assistance technique
○ Formations (Certifiantes Docker, Java JEE)
○ Missions de conseil (audit, accompagnement dans l’industrialisation des
développements)
○ Missions d’expertise produit : CloudUnit, Docker Datacenter, Rancher, Atomic
Objectif de la formation
Pourquoi
Docker ?
Les cas
d’utilisation
de Docker
La montée en
compétence
technique
La Stack
applicative
Docker
3
La dream team
Personnes à impliquer sur le projet en mesure de valider la réussite du projet.
➔
Infrastructure
➔
Sécurité
➔
Développeurs
➔
Architecture
➔
Ops
4
Docker
la génèse
Avant docker...
Dotcloud fondé en 2009
Opensource Docker en 2013
Levées de fonds
Normalisation
6
Pourquoi Docker !
L’industrie logicielle a changée
Fin des grosses applications monolithiques
Micro-services
Processus de déploiements
7
L’écosystème
Official Repositories
Infrastructure & Service Providers
Networking
Dev Tools
Clustering & Scheduling
Operating Systems
Storage
Big Data
Management
Service Discovery
Security
Build / Continuous Integration
Configuration Management
8
Storage
Monitoring & Logging
Consulting &Training
8
Un problème vrai en 2017
Qui risque de l’être en 2018
9
Un problème vrai en 2017
Qui risque de l’être en 2018
10
La logistique navale
11
La logistique navale
12
La logistique navale
13
La logistique navale
14
La logistique navale
15
DockerCon Keynote Amsterdam 2014
In this keynote, Henk Kolk, Chief Architect at ING, talks about Continuous Delivery in a large
financial services company. Kolk details the business benefits of ING’s DevOps transformation
and highlights the role Docker played in speeding up innovation cycles.
https://blog.docker.com/2014/12/dockercon-europe-keynote-continuous-delivery-in-the-enterprise-by-henk-kolk-ing/
16
Les principes Unix
Chacun fait ce qu’il a à faire
Simple et composable
Ecosystème riche et concurrent
Pas de compromis
17
Un langage atypique
Héritier du C
Docker engine / client / machine...
18
Un langage atypique
Héritier du C
Docker engine / client / machine...
Protocole HTTP(S) / TLS
19
Un langage atypique
Héritier du C
Docker engine / client / machine...
Protocole HTTP(S) / TLS
Architecture REST
20
Un langage atypique
Héritier du C
Docker engine / client / machine...
Protocole HTTP(S) / TLS
Architecture REST
Cross compilation
21
Use Cases
CRÉATION, GESTION ET
DEPLOIEMENT
Image
A
Push
Docker
image
registry
Search
Pull
Source
code
repository
Dockerfile
for A
Run
Cont A
Build
Docker Engine
Docker Engine
Host 1 OS
Host 2 OS
Le container
Introduction aux containers
Un peu d’histoire...
●
●
●
La containerisation utilise le kernel du système hôte pour démarrer de multiples systèmes de
fichiers racine
Chaque système de fichier racine est appelé container
Chaque container possède ses propres processus, mémoires, carte réseau
Application
Application
Application
Bins/Libs
Bins/Libs
Bins/Libs
Docker Engine
Host OS
Server
26
Comparaison Containers / VM
Host hardware
App 3
App 2
App 1
App 3
App 1
Kernel
Docker
Engine
App 6
App 5
App 4
App 3
App 2
App 1
container
App 2
Full virtualization
Docker
containers
Guest OS
Guest OS
virt.
virt.
Hypervisor
Host OS
Host hardware
VM
And the winner is...
Great isolation but overhead
Less isolation but less overhead
Conclusion
Avantages et limitations des VM
Les bénéfices:
●
Un serveur physique est divisé en plusieurs machines virtuelles
●
Plus facile à mettre à l’échelle qu’un serveur physique
●
Modèle de Cloud et paiement à la demande (AWS, Azure, Rackspace..)
Les limitations:
●
Chaque VM nécessite une allocation de CPU, de stockage dédié, de RAM et un OS complet
●
Modèle linéaire: l’augmentation du nombre de VM nécessite des ressource supplémentaires
●
L’utilisation d’un système hôte complet entraîne une surcharge
●
La portabilité des applications n’est toujours pas garantie
29
Historique du modèle
Virtualisation de processus
●
UNIX chroot (1979-1982)
●
BSD Jail (1998)
●
Parallels Virtuozzo (2001)
●
Solaris Containers (2005)
●
Linux LXC (2008)
●
Docker (2013)
Docker est une évolution de LXC qui a permis de rendre le container utilisable par un plus grand
nombre d’utilisateurs grâce à son API et son client convivial.
30
Pourquoi utiliser les containers ?
●
Les containers sont plus légers et rapides que les VMs
●
Pas besoin d’installer un système d’exploitation complet
●
En conséquence, les besoins en CPU, RAM et stockage sont moins contraignants
●
On peut faire tourner bien plus de containers sur un serveur que de VMs
●
Le concept assure une meilleure portabilité
●
Les containers représentent une meilleure solution pour développer et déployer des
applications microservices
31
La mission de docker
La mission de Docker
32
Concepts clés du container
Docker et le noyau Linux
Le Docker Engine est l’application qui active les containers destinés à être exécutés
Il utilise plusieurs fonctionnalités “natives” du noyau Linux.
Les NAMESPACES permettent:
● l’isolation des processus et du système de fichier
● l’isolation réseau et de disposer de ses propre interfaces
Les CGROUPS (Control Groups) permettent:
● de mesurer et limiter les ressources (RAM, CPU, block I/O, network)
● de donner l’accès au différents périphériques (/dev/*)
Les règles IPTABLES permettent:
● d’assurer la communication entre containers sur le même hôte
● d’assurer d’éventuelles communication entre les containers et l’extérieur
33
Cycle de vie d’un container
Le cycle de vie d’un container diffère de celui d’une VM
A l’opposé d’une VM, le conteneur n’est pas destiné à une existence perpétuelle.
L’orchestrateur se chargera de redémarrer le container sur un autre hôte en cas de défaillance.
Cycle de vie basique d’un container:
●
Création d’un container à partir d’une image
●
Démarrage d’un container avec un processus
●
Le processus se termine et le container s’arrête
●
Le container est détruit
34
Gestion des containers Linux
Création et démarrage d’un container
Pour démarrer un container nous utiliserons la commande docker run
Cette commande effectue les deux actions suivantes:
● Crée un container en utilisant l’image spécifiée
● Démarre le container
Syntaxe: docker run [options] [image] [command] [args]
L’image est spécifiée de cette manière: repository:tag
$ docker run ubuntu:14.04 echo "hello world"
$ docker run ubuntu:14.04 ps -ef
35
Gestion des containers Linux
Lister et repérer ses containers
Pour lister les containers démarrés, nous utiliserons la commande docker ps
Le flag –a permet de lister tous les containers (y compris les containers arrêtés)
$ docker ps
$ docker ps -a
36
Gestion des containers Linux
Accès au terminal d’un container
Accéder au terminal
Utilisez les flags -i et -t flags avec la commande docker run
● Le flag -i demande à docker de se connecter à l’entrée standard STDIN du container
● Le flag -t demande l’accès à un pseudo-terminal
Note: Nous devons également démarrer un terminal comme commande par défaut (e.g. bash)
Sortir du terminal
En tapant exit nous quittons le terminal et revenons sur l’hôte mais le container est aussi arrêté.
Pour se détacher du Terminal sans arrêter le container, presser CTRL + P + Q simultanément.
Exercice:
$ docker run -i -t ubuntu:14.04 bash
$ touch test
$ ls
$ docker run -i -t ubuntu:14.04 bash
$ ls
37
Gestion des containers Linux
Containers et processus
●
Un container tourne tant que le processus
qui a été spécifié lors de son démarrage
tourne encore
●
Le processus de la commande principale
aura toujours le PID numéro 1 à l’intérieur
du container
●
Ci-contre un arbre de processus expliquant
l’héritage des processus du container visà-vis du système hôte
38
Gestion des containers Linux
Containers et processus
●
Démarrez un container Ubuntu avec un processus bash comme commande principale
●
Exécutez un ps -ef et vérifiez le PID du processus bash
●
Sortez du container sans l’éteindre avec les touches CTRL + P + Q
●
Exécutez un ps -ef | grep bash sur le système hôte et observez le processus bash
●
Notez le PID du processus parent de chaque process bash
●
Trouvez le processus parent que vous avez noté
●
Que constatez-vous ?
39
Gestion des containers Linux
Mode détaché
Ce mode permet de faire tourner un container en arrière plan
On utilisera le flag -d pour utiliser ce mode lors du lancement
Pour observer la sortie, on utilisera la commande docker logs [container id]
Exercice:
$ docker run -d centos:7 ping 127.0.0.1 –c 50
$ docker ps
Après quelques minutes:
$ docker ps
40
Gestion des containers Linux
Démarrage d’un container applicatif
Nous allons maintenant démarrer un container applicatif.
On utilisera le flag -P pour mapper les ports du container vers des ports de l’hôte
Exercice:
$ docker run -d -P nginx
$ docker ps
Rendez-vous sur l’URL publiée
service
http://IP_SYSTEME_HOTE:PORT
pour
vérifier
le
fonctionnement
du
41
Gestion des containers Linux
Attachement et détachement
Détachement
La combinaison CTRL + P + Q ne fonctionne que si les conditions suivantes sont réunies:
● l’entrée standard du container est connectée
● le container a été démarrée avec un Terminal
● par exemple: docker run -it ubuntu
Dans ces conditions, CTRL+C terminera le processus en cours donc terminera également le
container.
Attachement
Permet d’accéder à un container qui tourne en arrière plan
La sortie standard du PID 1 du container sera affichée
Pour cela on utilisera la commande docker attach en spécifiant un id ou nom de container
Attention: l’attachement à un container peut-être source d’erreur car si vous pressez par
accident CTRL+C, le container se terminera
42
Gestion des containers Linux
La commande “docker exec”
●
●
●
●
La commande docker exec permet d’éxécuter un processus additionnel dans un container
On l’utilise communément pour accéder au terminal d’un container
la syntaxe est docker exec -it [container ID] bash
De cette façon, en quittant le terminal, le container ne s’arrêtera pas
Exercice:
$ docker run -d -P nginx
$ docker exec -it <container id> bash
Quittez le terminal en cours et vérifiez que le container tourne
$ docker ps
43
Gestion des containers Linux
Arrêt, démarrage de container
Pour cela deux commandes peuvent être utilisées:
- docker stop
- docker kill
docker stop envoie un SIGTERM au processus principal du container
- le processus reçoit ensuite un SIGKILL après une période de grâce
- cette période de grâce peut-être spécifiée avec le flag -t (par défaut à 10s)
docker kill envoie un SIGKILL directement au processus principal du container
docker start permet de redémarrer un container qui a été arrêté.
Le container redémarrera avec les mêmes options qui ont été spécifiées lors de son
lancement.
44
Gestion des containers Linux
Inspection de containers
La commande docker inspect affiche tous les détails à propos d’un container
L’affichage des détails est présenté sous la forme d’un objet JSON
45
Gestion des containers Linux
Inspection de containers, récupération d’une propriété spécifique
La récupération d’une propriété spécifique via un pipe et grep n’est pas idéale.
C’est pourquoi il est possible d’utiliser l’option --format avec la commande docker inspect
La syntaxe est la suivante:
docker inspect --format='{{.<field1>.<field2>>}}' <container id>
Exercice:
$ docker run -d tomcat
$ docker inspect --format='{{.Config.Cmd}}' <container name>
$ docker inspect -- format='{{.NetworkSettings.IPAddress}}'<container name>
Pour récupérer les clés et les valeurs d’une section entière, on utilisera:
$ docker inspect --format='{{json .Config}}' <container name>
46
Gestion des containers Linux
Suppression d'un ou plusieurs containers
On ne peut stopper qu’un container arrêté.
On utilisera la commande docker rm en spécifiant un id de container ou un nom.
On peut tout de même supprimer un container démarré avec l’option -f
Pour supprimer tous les containers, on utilisera une combinaison de commandes.
Exercice:
$ docker rm <container id>
Pour supprimer le dernier container démarré:
$ docker rm $(docker ps -ql)
Pour supprimer tous les containers:
$ docker rm $(docker ps -aq)
47
Création d'images de containers
Comprendre le système de couches dans Docker
●
●
●
●
●
●
●
Une image est une collection de fichiers
et de metadatas
Les images sont constituées de multiple
couches
Une couche n’est rien d’autre qu’une
autre image
Chaque image contient l’ensemble des
applications dont nous avons besoin
Chaque image contient une couche ou
image de base
Docker utilise un système de “copy on
write” pour gérer les couches d’images
Les couches sont en lecture seule
48
Création d'images de containers
Partage de couches
●
●
Les images peuvent partager des couches dans le but d’optimiser les temps de transfert et
la gestion de la mémoire et de l’espace disque.
Les images parentes qui existent déjà sur le système hôte n’ont pas besoin d’être
téléchargées.
49
Création d'images de containers
La couche d’écriture du container
●
●
●
●
Docker crée une couche d’écriture qui se
situe au dessus de toutes les autres
couches.
Les images parentes sont en lecture seule
Tous les changements apportés au
container sont enregistrés sur la couche d’
écriture.
Lorsque l’on change un fichier présent sur
une couche en lecture seule, le système
de “copy on write” copie ce fichier sur la
couche d’écriture et masque l’ancien
fichier.
50
Création d'images de containers
Méthodes de création d’image
Il existe trois méthodes de création d’image
●
La méthode de “commit” qui consiste à enregistrer les changements comme une nouvelle
image. Elle permet de construire une image de manière interactive mais ne permet pas
d’automatiser le build. Elle est idéale par exemple en phase de construction de Dockerfile afin
d’identifier tous étapes de RUN par exemple.
●
La méthode de build à partir d’un Dockerfile. Il s’agit d’un fichier de recette dans laquelle nous
décrivons à partir de quelle image de base nous allons travailler et les instructions
d’installation dans cette image ainsi que la commande a exécuter lors de son lancement.
Cette méthode permet une automatisation du build (pour des cycles de CI/CD par exemple).
●
L’import d’un fichier TAR dans Docker comme seule image de base. Cette méthode permet
par exemple de restaurer un backup d’image mais crée une image d’une seule couche.
51
Gestion des containers Linux
Créer une image de manière interactive
Exercice:
$ docker run -it centos bash
A l’intérieur du container, on installe les paquets nécessaires:
# yum update -y
# yum install -y httpd vim
# exit
Repérez le container arrêté pour le “commiter”
$ docker ps -a
$ docker commit c16378f943fe centos-httpd
$ docker images
A voir aussi: docker history / docker diff
52
Gestion des containers Linux
Créer une image à partir d’un Dockerfile
Exercice:
On crée un dossier de travail pour le Dockerfile et les fichiers:
$ mkdir httpd && cd httpd && touch index.html
On édite un fichier nommé Dockerfile, puis on liste les instructions:
FROM fedora
RUN yum update -y
RUN yum install -y httpd && yum clean all
COPY index.html /var/www/html
EXPOSE 80
ENTRYPOINT [ "/usr/sbin/httpd" ]
CMD [ "-D", "FOREGROUND" ]
Pour finir on lance le build de l’image en taggant au passage:
$ docker build -t monsite .
$ docker run -dP monsite
A voir aussi: cache et commandes courantes
53
Gestion des containers Linux
Choix d’un driver storage pour le daemon Docker
A voir aussi: http://www.projectatomic.io/docs/filesystems/
54
Publication d’images sur Registry
Présentation et installation de la registry Docker
●
Par défaut, lorsque l’on démarre un container, nous utilisons des images issues du Docker
Hub ou de notre banque d’image locale.
●
La centralisation de ces images sur votre propre infrastructure vous permettra d’assurer
sécurité, disponibilité, vitesse, facilité d’intégration et de s’interfacer avec votre système
d’intégration/déploiement continue.
Nous allons démarrer une registry Docker à l’aide de l’image publiée sur le Docker Hub.
Exercice:
On crée un container en mappant manuellement ses ports sur l’hôte:
$ docker run -d -p 5000:5000 --restart always --name registry registry:2
55
Docker
en production
Les questions à se poser
Quel orchestrateur choisir ?
Caas commercial ou opensource ?
Des distributions dédiés : CoreOS ou RancherOS
OS
Registry
Comment Distribuer les images
Choisir le bon produit opensource ou commercial
Héberger soi-même sa registry
rité
Sécu
Après le DevOps, le SecOps !
Docker Silverbullet pour la sécurité ?
Unusable security is not security
Monit
oring
Monitoring global
Mise à jour de la supervision
Nécessité d’une métrologie forte
57
Les contraintes et les KPI
Et bien plus encore
Les contraintes existantes liées à l’environnement représentent les critères d’acceptation minimale pour que la PoC soit
acceptée. Il est aussi important de définir des indicateurs de performance (KPI) qui justifie le changement de technologies
et le passage à Docker.
Les contrainte technique
Les indicateurs
➔
Gestion des logs
➔
Fréquence de déploiement
➔
Chiffrement des communications
➔
Rapidité des déploiements
➔
Scalabilité
➔
Qualité des déploiements
➔
Clustering
➔
Temps de reprise
➔
Back-up
➔
Densification des serveurs
➔
…..
➔
…..
58
Quel orchestrateur choisir ?
Les solutions CaaS à retenir
Docker SWARM
CaaS opensource
Produit opensource
Nos consultants sont certifiés et habilités à
animer les formations officielles.
Docker Datacenter
Support
CaaS commercial production ready
Treeptik est le seul partenaire français certifié et
en mesure d’apporter ce niveau de conseil
Support
Nos consultants sont certifiés pour déployer et
supporter l’offre à licence Docker Datacenter
59
Les containers : la bonne idée !
Les idées les plus simples sont souvent les meilleures !
La portabilité est enfin une réalité
L'application est assemblée avec toutes ses dépendances
dans un container et peut être exécutée sur n’importe quel
cloud ou serveur !
Déploiement accéléré
Les containers contiennent le minimum nécessaire au
démarrage de l'application, ce qui réduit leur taille et
permet des déploiements très rapides.
L’intégration continue boostée
L’intégration continue peut enfin simplement tester
l’application dans son intégralité. Le déploiement en
continu est enfin accessible.
L’innovation décuplée
Les containers duplicables, jetables et partageables
facilement, ce qui simplifie les processus
d’innovations
60
Offres concurrentes
Aperçu et positionnement
De manière générale, le container Docker est devenu LE standard d’isolation
A l’exception de quelques irréductibles comme RKT, tous les orchestrateurs s’appuient sur la
technologie Docker.
61
Comment choisir son orchestrateur ?
Combien de machines avez vous ?
Une seule par application ou par
environnement
Un peu...
Jusqu’à une dizaine
Beaucoup (quelques centaines)
L’intégration continue peut enfin simplement tester
l’application dans son intégralité. Le déploiement en
continu est enfin accessible.
Des milliers
62
Comment distributer ses images ?
Choix de l’hébergement
Docker Registry
Opensource
Docker Trusted
Registry
Production ready
loadbalanced
Sonatype
Artefacts Maven, nodeJS...
GitLab
Le petit dernier
63
Préoccupation fondamentale
Docker Baseline
64
Questions à se poser
Du DevOps à SecOps
➔
Comment forcer les développeurs à faire de la sécurité ? Mauvaise question...
➔
Comment donner aux développeurs les bons outils pour la sécurité ?
Isolation des container linux
●
●
●
●
●
●
pid namespace
mnt namespace
net namespace
uts namespace
ipc namespace
user namespace
●
●
●
●
●
●
●
pivot_root
uid/gid drop
cap drop
all cgroups
selinux
apparmor
seccomp
65
Trusted registry
Du DevOps à SecOps
Utilisation systématique de TLS
Identification des layers (MiM)
Authentification AD, LDAP...
66
Notary
Du DevOps à SecOps
Système de signature d’images et de
validation
Vérification de l’auteur
Non altération du contenu
Support physique pour les clés
67
Nautilus
Du DevOps à SecOps
Scanner d’images Docker
Vulnérabilité (CVE Check)
Validation des licences
Optimisation des images
68
Java Friendly
Pour 2017 !
69
// DockerCon 2016 :: des chiffres
●
Docker est présent dans 50% des mises en place des principes du
Continuous Delivery,
●
dans 47% des nouvelles applications microservices,
●
dans 43% des migrations d’applications legacy vers une architecture
microservices,
●
dans 41% des solutions d’intégration continue,
●
dans 39% des transformations DevOps,
●
et dans 37% des conteneurisations des applications Legacy.
// DockerCon 2017 ::
●
Oracle a annoncé la mise à disposition de ses produits dans le Docker Store
●
Microsoft supporte maintenant l’isolation de container Linux sur Hyper-V
●
IBM offre dorénavant la capacité de faire tourner des containers dans Docker
Enterprise Edition sous IBM z Systems, LinuxONE and Power Systems
●
Cisco propose désormais une couche réseau dédiée aux container
●
Docker annonce de Linux Kit (OS immutable dédié au containers)
●
Docker annonce le projet Moby (modularité des composants Docker)
Cycle de vie
NOUVEAUTÉS
Docker 1.12 et 1.13
Nouveautés Docker 1.12
Swarm Mode et orchestration
Liste des nouveautés pour cette version:
● Intégration de Swarm dans le Docker Engine (Swarm mode)
● Concept de “service” qui permet d’orchestrer une application sur un cluster Docker
● Fonction de “healthcheck” qui teste l’état d’un container
● Load balancing (routing mesh) automatique
● Mise à niveau progressive et transparente d’une stack d’applications
74
Nouveautés Docker 1.13
Consolidation des features de la version 1.12
Liste des nouveautés pour cette version:
● Fichiers Compose désormais utilisables en mode service Swarm
● Fonctions de purge et nettoyage
● Analyse de logs d’un service complet
● Docker pour AWS et Microsoft Azure permet d’étendre sa plateforme sur des cloud publics
75
Linux vs Microsoft
Containers
Présentation
Docker + Microsoft
Docker Linux vs Docker windows
77
Microsoft Container
Docker Linux vs Docker windows
● Linux Container dans Hyper-V
● Microsoft Light Container
● Microsoft Heavy Container
78
DOCKER
DATACENTER
Présentation
Docker Containers-As-A-Service
Présentation des concepts à l’origine de l’offre commerciale Docker Datacenter
80
Docker Datacenter overview
Présentation des composants de la plateforme
81
Docker Datacenter features
Des fonctionnalités d’intégration en entreprise
Liste des fonctionnalités principales:
● Sécurité complète de la plateforme et des échanges
● Plateforme agnostique (déploiement sur bare-metal, machine virtuelle ou cloud public)
● Management de cluster d’hôtes Docker et supervision
● Interfaces web de gestion
● Gestion de rôles multi-tenant et mappage LDAP
● Gestion de backends de stockage d’entreprise
● Gestion de clusters en version Swarm classique et Swarm mode 1.12
● Processus d’installation simplifiés
82
Docker Universal Control Plane
Capture d’écran du panneau de gestion
83
Docker Trusted Registry
Capture d’écran de la banque d’images
84
Twelve factors
Applications
Introduction
Méthologie pour concevoir les logiciels en tant que services (webapp, saas…)
●
●
●
●
●
Utiliser des formats déclaratifs pour automatiser
Offrir une portabilité maximum entre les environnements
Etre adapté aux plateformes clouds publics et privés pour grossir horizontalement
Minimiser la divergence entre développement et déploiement
Pouvoir grossir verticalement sans changement significatif dans l’architecture
Quelque soit le langage et quelque soit les services externes utilisées
86
1. Base de code
-et déploiements...
Une base de code est suivie avec un système de contrôle de version
Une base de code correspond à un dépôt (svn, git, mercurial…)
● Une unique base de code par application
● Si une application utilise plusieurs base de code,
ce n’est pas une application mais un système distribué
Interdit de partager du code entre plusieurs applications
● Besoin de factoriser et d’utiliser des librairies à partager
● de donner l’accès au différents périphériques (/dev/*)
Un déploiement est une instance en fonctionnement de l’application
87
2. Dépendances
Déclarez explicitement et isolez les dépendances
Ne jamais dépendre de l’existence implicite de packages au niveau système
● Les dépendances doivent être déclarées à travers un manifeste
● Favoriser les outils de gestion de dépendances
Il faut simplifier la mise en place des environnements de développements et production
Ne jamais dépendre d’outils système tels que ImageMagick par exemple
● Aucune garantie de compatibilité de version
● Si besoin fournir le binaire avec l’application
88
3. Configuration
Stockez la configuration dans l’environnement
La configuration d’une application est tout de varier entre des déploiements (dev, qa, recettes, …)
● Ressources gérées par la base de données
● Les identifiants pour des services externes (amazon par exemple)
● Les valeurs spécifiques au déploiement (urls par exemple)
Stricte séparation du code et de la configuration
Puis je rendre mon application opensource sans compromission ?
Puis je rendre mon application innersource sans compromission ?
Utiliser des outils dédiés à cet usage : consul, etcd...
89
4. Services externes
Traitez les services externes comme des ressources attachées
90
5. Assemblez, publiez, éxecutez
Séparer strictement les étapes d’assemblage et d’exécution
Une base de code est transformée en suivant les étapes :
●
●
●
Le build : compile les binaires et les ressources
La release : combine le binaire du build avec la configuration de déploiement
Le runtime : lance l’application dans l’environnement d’exécution
91
6. Processus
Exécutez l’application comme un ou plusieurs processus sans état
Les processus sont sans état et ne partagent rien !
●
Toute donnée qui doit être persistée doit être stockée dans un service externe stateful,
typiquement une base de données
●
Le FS peut être utilisé comme cache temporaire
●
Les sessions persistentes (données de session utilisateur) doivent être externalisés.
Datastore avec date d’expiration comme redis ou memcached par exemple
92
7. Association de ports
Exportez les services via des associations de ports
●
Déclaration de dépendances dans l’espace de l’utilisateur
●
Tout service doit être exposé via des ports. Pas seulement HTTP
Presque tout serveur peut fonctionner à travers l’association à un port et écouter les requêtes
entrantes. Redis par exemple
●
Inversement toute application peut devenir le service externe d’une autre application en
fournissant son url dans la configuratio de l’application qui la consomme
93
8. Concurrence
Grossissez à l’aide du modèle de processus
●
●
●
●
●
●
●
Grossir verticalement est vite limitant.
Il faut grossir horizontalement
Pour cela, multipliez les processus
Même les JMV qui gèrent des threads
Utiliser des Events !
Utiliser la gestionnaire de processus pour
la relance ou la distribution
Ne jamais utiliser de daemons
94
9. Jetable
Maximisez la robustesse avec des démarrages rapides et des arrêts gracieux
On doit démarrer et arrêter les processus rapidement
●
●
●
Minimiser le temps de démarrage
Savoir répondre aux signaux SIGTERM
Les processus doivent être robustes face aux morts subites
○ panne du hardware sous-javent par exemple.
○ utiliser des files de messages
Crash-only software is software that crashes safely and recovers quickly
95
10. Parité dev / prod
Gardez les environnements aussi proches que possible
Utiliser le CD pour réduire le fossé entre les environnements
●
●
●
Fossé temporel : un développeur peut développer et déployer du code dans les heures ou
minutes qui suivent
Fossé humain : les personnes qui écrivent le code sont impliqués dans son déploiement et
pour surveiller son comportement en production
Fossé technique : environnement, outils, versions...
96
11. Logs
Traitez les logs comme des flux d’évènements
Ne plus s’inquiètez du routage ou du stockage des flux de sortie
●
●
●
Voir les logs comme des flux d’évènements
Ce n’est pas à l’application de gérer ses logs
Tout doit aller vers stdout
○ En développement, le dev regarde son terminale
○ En production, Les flux seront capturés par leur environnement d’éxecution
●
Idéalement, les flux doivent être envoyés vers des outils d’indexation et d’archivage
○ Trouver un évènement dans le passé
○ Faire des graphiques à échelle des tendances (nb de requêtes, nb d’exception…)
○ Lever des alertes à partir d’heuristiques définie par l’utilisateur
97
12. Processus d’administration
Lancer les comme des one-off-processes
Environnement identique à ceux des processus standard de l’application
●
Exemple de Use Cases
○ Migration de données dans la BDD
○ Lancer une console, un REPL…
○ Exécuter des scripts
●
●
●
Ils doivent s’éxecuter sur une release
Préférer les langages avec un REPL. Cool Java9 en aura un !
Sinon SSH
98
Back to
Docker
Les corvées des sysadmins
Petits échantillons...
Sauvegardes
Gestion des Logs
Accès distants
100
Sauvegardes
Choix du COW : AUFS, BTRFS… LVM
Drivers Storage : NFS, Ceph...
Infinit Storage Platform
Dernière acquisition
101
Infinit storage platform
102
Gestions des logs
103
Gestions des logs
104
Gestions des logs
105
Workflow
de Mise en production
Transformation
Evolutions des pratiques
107
Use case #1
108
Use case #2
109
Use case #3
110
Use case #4 (RancherOS)
111
Use case #5
112
Use case #6
113
Use case #7
114
DevOpSec,
la sécurité
au coeur du DevOps
Contrôles de sécurité obligatoires
Analyse de code
Test d’intrusion
Web Application Firewall
116
5 étapes à prendre en compte
Plan de sécurité
Engager les développeurs
Armer les développeurs
Automatiser les process *
Utiliser les mécanismes classiques *
117
Automatiser les process :: qualité
118
Sécurité avec la CI / CD
119
Les mécanismes classiques
Test intrusion automatisé pour les versions mineures
Test intrusion manuel pour les versions majeures
WAF avec une configuration générique
Utiliser Sonar pour les vulnérabilités
120
ZERO DOWNTIME
DEPLOYMENT
LinuxKit
122
Moby
123
Container Pipeline Release
DEV
Version Control
Continuous
Integration
Staging
Deployment
Blue
Deployment
Repository
QA
Deployment
NON PROD
Green
Deployment
PRODUCTION
Demo Time
Demo :: Maven
mvn clean package docker:build -DpushImage
BLUE GREEN DEPLOYMENT
127
CANARY RELEASE
128
Live Demo
Swarm
●
●
●
●
●
Python webapp which lets you vote between two options
Redis queue which collects new votes
.NET worker which consumes votes and stores them in…
Postgres database backed by a Docker volume
Node.js webapp which shows the results of the voting in real time
130
Docker UseCases
Simplifier configuration
Management Code Pipeline
Productivité développeur
Isolation Application
Consolidation Serveur
Debugging
Multi-tenant
Déploiement rapide
131
Download