3. Evolution vers la
conteneurisation
1 application / 1 serveur
1 application / 1 VM
Conteneurisation
Serveur
Système d’exploitation
Dépendances
Application A
● Serveur dédié à 1 seule application
● Difficile à scaler
● Difficile à faire évoluer
● Forte adhérence à l’infrastructure
Serveur
Système d’exploitation
Dépendances
Application B
4. 1 application / 1 serveur
1 application / 1 VM
Conteneurisation
Evolution vers la
conteneurisation
Serveur
Système d’exploitation
Hyperviseur
Système d’exploitation
Dépendances
Application A
Avantages
● Meilleur utilisation des ressources physiques
● Plus facile à scaler
● Ouverture vers le Cloud
Limitations / inconvénients
● Chaque VM supplémentaire consomme des ressources
physiques avec son OS
● Portabilité de l’application non garantie
Système d’exploitation
Dépendances
Application A
5. 1 application / 1 serveur
1 application / 1 VM
Conteneurisation
Evolution vers la
conteneurisation
Serveur
Système d’exploitation
Dépendances
Application A
Dépendances
Application B
Avantages
● Augmentation de la densité de déploiement
● Démarrage accéléré du service
● Standardisation du packaging de l’application
Bénéfices
● Portabilité de l’application
● Déploiement simplifié
● Permet d’augmenter la fréquence de livraison
Docker
6. Serveur
OS hôte
Hyperviseur
OS invité OS invité
Dépendances
Application A
Dépendances
Application B
Serveur
OS hôte
Dépendances
Application A
Dépendances
Application B
Virtualisation Conteneurisation
Docker
7. Virtualisation Conteneurisation
● S’appuie sur un hyperviseur pour
l’accès au ressources physiques
● Chaque machine virtuelle contient un
système d’exploitation complet
Avantage
● Très bonne isolation
Inconvénients
● Boot d’un système complet au démarrage
● Volumineux
● Potentiel coût de licence
● Partage du noyau du système hôte
● Utilise les cgroups pour isoler et
limiter l’accès aux ressources
physiques
● Utilise les namespaces pour isoler les
conteneurs entre eux
Avantages
● Démarrage immédiat
● Portabilité
● Augmente la densité de déploiement
Inconvénient
● Isolation dépendante du système hôte
9. Cas d’usages de la conteneurisation
● Pour le développeur
○ Création de l’environnement simplifié
○ Environnement reproductible
○ Mise en oeuvre d’une stack complexe rapidement et simplement
○ Evite le “ça marche sur mon poste”
● Pour l’opérationnel
○ Montée de version et retour arrière simplifié
○ Montée en charge simplifiée
○ Orienté micro-service
○ Déploiement simplifié
11. Le Dockerfile : la recette
● Fichier texte
● Semblable à un script d’installation
12. L’image Docker : le packaging unique
● Construite à partir du Dockerfile
● N’embarque pas un système d’exploitation complet
● Contient l’application
● Construit couche par couche (layers)
● Portable
● Utilise un mécanisme de gestion de version
13. Le conteneur : l’unité de déploiement
● Fait tourner l’application
● Immuable
● Pas de stockage persistent
16. Docker Compose
● Permet d’automatiser la création de conteneurs
● Permet de construire des applications multi-conteneur simplement
● S’appui sur un fichier texte qui décrit le déploiement
● Permet de gérer une architecture complexe comme une seule entité
Limitations
● Se limite à l’automatisation du déploiement
● N’est pas orienté pour une infrastructure distribuée
● Pas de gestion des droits
18. Kubernetes
Qu’est ce que Kubernetes ?
Qu’est ce que ça fait ?
Quelle valeur ajoutée ?
Points de vigilance ?
● Une plate-forme de conteneurs
● Projet Open Source initié par Google
● Gère une flotte de serveurs
● Permet de déclarer l’état attendu d’une application
19. Kubernetes
Qu’est ce que Kubernetes ?
Qu’est ce que ça fait ?
Quelle valeur ajoutée ?
Points de vigilance ?
● Met à disposition les ressources d’une flotte de serveurs
● S’assure de la bonne santé des applications déployées
● Permet de s’abstraire des spécificités d’une infrastructure
20. Kubernetes
Qu’est ce que Kubernetes ?
Qu’est ce que ça fait ?
Quelle valeur ajoutée ?
Points de vigilance ?
● Gain de temps pour les opérationnels
○ Surveillance de l’état de santé des applications
○ S’adapte aux changements de l’infrastructure
● Contribue à réduire les coûts d’exploitation
○ Optimisation des ressources des serveurs
○ Ajustement des applications en fonction de la charge
21. Kubernetes
Qu’est ce que Kubernetes ?
Qu’est ce que ça fait ?
Quelle valeur ajoutée ?
Points de vigilance ?
● Installation / configuration / administration complexe
● Privilégier une solution commerciale on-premise ou Cloud
● Accompagnement recommandé des équipes
23. Le Dockerfile
Application Java Spring Boot
FROM openjdk:8-jdk-slim
COPY target/*.jar /opt/app.jar
WORKDIR /opt
EXPOSE 8080
CMD [ "java", "-jar", "app.jar" ]
Exemples
Les instructions
Bonnes pratiques
Application Spring Boot
OpenJDK 8
Exposition du port TCP 8080
Position du répertoire de travail
Commande de démarrage
24. Le Dockerfile
Exemples
Les instructions
Bonnes pratiques
Site web
FROM alpine:3.9
RUN apk --update add nginx
RUN mkdir /run/nginx && touch /run/nginx/nginx.pid
COPY nginx.conf /etc/nginx/nginx.conf
ADD www /www
CMD [ "nginx" ]
25. Le Dockerfile
Exemples
Les instructions
Bonnes pratiques
FROM Défini l’image de base à utiliser
RUN Exécute des commandes bash / sh
CMD Défini la commande à exécuter au démarrage
ADD / COPY Copie des fichier dans l’image
EXPOSE Informe d’un port réseau exposés par le conteneur
ENV Permet de définir des variables d’environnement
VOLUME Informe d’un répertoire persistent du conteneur
26. Le Dockerfile
Exemples
Les instructions
Bonnes pratiques
● Privilégier des images de base minimalistes (Alpine)
● 1 seul processus par conteneur
● Démarrer l’application / processus au premier plan
● Logs de l’application sur la sortie standard
● Installer uniquement ce qui est nécessaire
● Limiter le nombre de layers
● Organiser les layers en fonction du build
● Utiliser si besoin le build multi-stage
● Éviter l’usage de l’utilisateur root
27. Utilisation de
Docker CLI
Gestion des images
Gestion des conteneurs
Gestion des réseaux
Gestion des volumes
docker images Liste les images
docker build Crée une image à partir d’un Dockerfile
docker pull Télécharge une image depuis le Docker hub
docker commit Crée une image à partir d’un conteneur
docker save Permet de sauvegarder une image
docker load Permet de charger une image depuis une archive
28. Utilisation de
Docker CLI
Gestion des images
Gestion des conteneurs
Gestion des réseaux
Gestion des volumes
docker create Crée un conteneur sans le démarrer
docker run Crée et démarre le conteneur
docker rm Supprime un conteneur
docker stop Arrête un conteneur
docker start Démarre un conteneur
docker restart Redémarre un conteneur
docker ps Liste les conteneur actifs
docker logs Retourne les logs d’un conteneur
docker inspect Affiche les propriétés d’un conteneur
docker exec Exécute une commande dans un conteneur
29. Utilisation de
Docker CLI
Gestion des images
Gestion des conteneurs
Gestion des réseaux
Gestion des volumes
docker network create Crée un nouveau réseau
docker network rm Supprime un réseau
docker network ls Liste les réseaux
docker network inspect Affiche les informations sur un réseau
30. Utilisation de
Docker CLI
Gestion des images
Gestion des conteneurs
Gestion des réseaux
Gestion des volumes
docker volume create Crée un nouveau volume
docker volume rm Supprime un volume
docker volume ls Liste les volumes
docker volume inspect Affiche les informations sur un volume
35. Les ressources
Kubernetes
Node
Ingress controller
Persistent volume
● Met à disposition un service de reverse-proxy
● Nombreuse implémentations
○ Nginx
○ HAproxy
○ Istio
○ Traefik
● Possibilité d’utiliser plusieurs implémentations (classes)
Node
Kubelet
Ingress controller
36. Les ressources
Kubernetes
Node
Ingress controller
Persistent volume
● Met à disposition du stockage persistent
● Nombreuse implémentations
○ AWS Elastic Block Store
○ Azure File / Azure Disk
○ Vsphere Volume
○ Ceph FS
○ iSCSI
○ NFS
● Possibilité d’utiliser plusieurs implémentations (classes)
37. Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
● Unité de déploiement
● Contient un groupe de conteneurs
● Partagent le stockage
● Partagent la même interface réseau (même IP)
● Ordonnancés ensembles (co-scheduled)
● Déployés sur le même node
● Ephémère
Pod
Conteneur
Conteneur
Conteneur
nginx
application
redis / cache
38. Replica Set
Replicas : nombre de pods
Template : définition du pod
● Défini le nombre de pods à déployer
● S’assure du nombre de réplicas
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
39. Replica Set
Replicas : 3
Template : définition du pod
Pod A
Conteneur
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
Conteneur
Pod C
Conteneur
Conteneur
Conteneur
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
40. Pod A
Conteneur
Conteneur
Conteneur
Replica Set
Replicas : 3
Template : définition du pod
Pod B
Conteneur
Conteneur
Conteneur
Pod C
Conteneur
Conteneur
Conteneur
Pod C indisponible
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
41. Pod A
Conteneur
Conteneur
Conteneur
Replica Set
Replicas : 3
Template : définition du pod
Pod B
Conteneur
Conteneur
Conteneur
Destruction du pod C
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
42. Pod A
Conteneur
Conteneur
Conteneur
Replica Set
Replicas : 3
Template : définition du pod
Pod B
Conteneur
Conteneur
Conteneur
Pod D
Conteneur
Conteneur
Conteneur
Création d’un
nouveau Pod
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
43. Deployment
Replica Set
Replicas : nombre de pods
Template : définition du pod
● Gère les transitions du Replica Set
● Garde l’historique des modifications
● Gère les modifications du template
● Permet le retour arrière
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
44. Deployment
Replica Set
Replicas : 2
Template : définition du pod
Deployment A
Replica Set
Replicas : 2
Pod A
Conteneur
Conteneur
Pod A
Conteneur
Conteneur
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
45. Deployment
Replica Set
Replicas : 1
Template : définition du pod
Deployment A
Replica Set
Replicas : 2
Pod A
Conteneur
Conteneur
Pod A
Conteneur
Conteneur
Modification de
la configuration
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
46. Deployment
Replica Set
Replicas : 1
Template : définition du pod
Deployment A
Replica Set
Replicas : 2
Pod A
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
Deployment B
Replica Set
Replicas : 1
Pod A
Conteneur
Conteneur
Application de la
nouvelle
configuration
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
47. Deployment
Replica Set
Replicas : 1
Template : définition du pod
Deployment B
Replica Set
Replicas : 1
Pod A
Conteneur
Conteneur
Suppression de
l’ancien
déploiement
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
48. Deployment
Replica Set
Replicas : 2
Template : définition du pod
Deployment B
Replica Set
Replicas : 1
Pod A
Conteneur
Conteneur
Retour arrière sur
la configuration
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
49. Deployment
Replica Set
Replicas : 2
Template : définition du pod
Deployment A
Replica Set
Replicas : 2
Pod A
Conteneur
Conteneur
Pod A
Conteneur
Conteneur
Deployment B
Replica Set
Replicas : 1
Pod A
Conteneur
Conteneur
Roll-back de la
configuration de
déploiement
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
50. Deployment
Replica Set
Replicas : 2
Template : définition du pod
Deployment A
Replica Set
Replicas : 2
Pod A
Conteneur
Conteneur
Pod A
Conteneur
Conteneur
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
53. Pod A
Conteneur
Conteneur
Pod C
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
Service
Permet d’accéder aux pods depuis
l'intérieur du cluster
Accède au service par
son nom DNS interne
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
54. Service
Pod C
Conteneur
Conteneur
Pod C indisponible
Pod A
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
55. Service
Suppression du pod en
erreur sans interruption
de service
Pod A
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
57. Pod A
Conteneur
Conteneur
Pod D
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
Service
Rattachement du
pod au service
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
58. ● Permet de stocker des informations sensibles
● Exploitables via des volumes sur des conteneurs
● Encodé en base64
● Sous forme de fichier
● Sous forme de clé - valeur
Pod
Conteneur
Conteneur
Volume Secret
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
59. ● Permet de stocker de la configuration
● Exploitables via des volumes sur des conteneurs
● Sous forme de fichier
● Sous forme de clé - valeur
Pod
Conteneur
Conteneur
Volume Config Map
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
60. Pod A
Conteneur
Conteneur
Pod C
Conteneur
Conteneur
Pod B
Conteneur
Conteneur
ServiceIngress
Permet d’accéder à un service
depuis l’extérieur du cluster
Accède au service en
fonction d’un nom DNS
et d’un path d’url
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim
61. ● Permet l’obtention d’un espace de stockage
● Défini la quantité de stockage
● Défini la politiques d’accès : lecture seule, écriture
Pod
Conteneur
Conteneur
Volume
Persistent Volume
Claim
Les objets
Kubernetes
Pod
Replica set
Deployment
Service
Secret
Config map
Ingress
Persistent volume claim