183
FORMATION DOCKER 1

FORMATION DOCKER - particule

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FORMATION DOCKER - particule

FORMATION DOCKER

1

Page 2: FORMATION DOCKER - particule

CONCERNANT CES SUPPORTS DE COURS

2 . 1

Page 3: FORMATION DOCKER - particule

SUPPORTS DE COURS RÉALISÉS PAR PARTICULE

ex Expertise Cloud NativeExpertise DevOpsNos offres de formations:

Sources : HTML/PDF :

Osones/Alterway

https://particule.io/trainings/https://github.com/particuleio/formations/

https://particule.io/formations/

2 . 2

Page 4: FORMATION DOCKER - particule

COPYRIGHT

Licence : Copyright © 2014-2019 alter way Cloud ConsultingCopyright © 2020 particule.Depuis 2020, tous les commits sont la propriété deleurs auteurs respectifs

Creative Commons BY-SA 4.0

2 . 3

Page 5: FORMATION DOCKER - particule

LE CLOUD : VUE D’ENSEMBLE

3 . 1

Page 6: FORMATION DOCKER - particule

LE CLOUD, C’EST LARGE !

Stockage/calcul distant (on oublie, cf. externalisation)

Virtualisation++

Abstraction du matériel (voire plus)

Accès normalisé par des APIs

Service et facturation à la demande

Flexibilité, élasticité

3 . 2

Page 7: FORMATION DOCKER - particule

WAAS : WHATEVER AS A SERVICE

IaaS : Infrastructure as a Service

PaaS : Platform as a Service

SaaS : Software as a Service

3 . 3

Page 8: FORMATION DOCKER - particule

LE CLOUD EN UN SCHÉMA

3 . 4

Page 9: FORMATION DOCKER - particule

POURQUOI DU CLOUD ? CÔTÉ TECHNIQUE

Abstraction des couches basses

On peut tout programmer à son gré (API)

Permet la mise en place d’architectures scalables

3 . 5

Page 10: FORMATION DOCKER - particule

VIRTUALISATION DANS LE CLOUD

Le cloud IaaS repose souvent sur la virtualisation

Ressources compute : virtualisation

Virtualisation complète : KVM, Xen

Virtualisation conteneurs : OpenVZ, LXC, Docker, RKT

3 . 6

Page 11: FORMATION DOCKER - particule

NOTIONS ET VOCABULAIRE IAAS

L’instance est par définition éphémère

Elle doit être utilisée comme ressource de calcul

Séparer les données des instances

3 . 7

Page 12: FORMATION DOCKER - particule

ORCHESTRATION DES RESSOURCES ?

Groupement fonctionnel de ressources : microservices

Infrastructure as Code : Définir toute uneinfrastructure dans un seul fichier texte de manièredéclarative

Scalabilité : passer à l'échelle son infrastructure enfonction de différentes métriques.

3 . 8

Page 13: FORMATION DOCKER - particule

POSITIONNEMENT DES CONTENEURS DANS L'ÉCOSYSTÈME CLOUD ?

Facilitent la mise en place de PaaS

Fonctionnent sur du IaaS ou sur du bare-metal

Simplifient la décomposition d'applications en microservices

3 . 9

Page 14: FORMATION DOCKER - particule

LES CONTENEURS

4 . 1

Page 15: FORMATION DOCKER - particule

DÉFINITION

Les conteneurs fournissent un environnement isolésur un système hôte, semblable à un chroot sousLinux ou une jail sous BSD, mais en proposant plusde fonctionnalités en matière d'isolation et deconfiguration. Ces fonctionnalités sont dépendantesdu système hôte et notamment du kernel.

4 . 2

Page 16: FORMATION DOCKER - particule

LE KERNEL LINUX

Namespaces

Cgroups (control groups)

4 . 3

Page 17: FORMATION DOCKER - particule

LES NAMESPACES

4 . 4

Page 18: FORMATION DOCKER - particule

MOUNT NAMESPACES ( LINUX 2.4.19)

Permet de créer un arbre des points de montageindépendants de celui du système hôte.

4 . 5

Page 19: FORMATION DOCKER - particule

UTS NAMESPACES (LINUX 2.6.19)

Unix Time Sharing : Permet à un conteneur dedisposer de son propre nom de domaine et d’identitéNIS sur laquelle certains protocoles tel que LDAPpeuvent se baser.

4 . 6

Page 20: FORMATION DOCKER - particule

IPC NAMESPACES (LINUX 2.6.19)

Inter Process Communication : Permet d’isoler lesbus de communication entre les processus d’unconteneur.

4 . 7

Page 21: FORMATION DOCKER - particule

PID NAMESPACES (LINUX 2.6.24)

Isole l’arbre d’exécution des processus et permetdonc à chaque conteneur de disposer de son propreprocessus maître (PID 0) qui pourra ensuite exécuteret manager d'autres processus avec des droitsillimités tout en étant un processus restreint au seindu système hôte.

4 . 8

Page 22: FORMATION DOCKER - particule

USER NAMESPACES (LINUX 2.6.23-3.8)

Permet l’isolation des utilisateurs et des groupes ausein d’un conteneur. Cela permet notamment degérer des utilisateurs tels que l’UID 0 et GID 0, le rootqui aurait des permissions absolues au sein d’unnamespace mais pas au sein du système hôte.

4 . 9

Page 23: FORMATION DOCKER - particule

NETWORK NAMESPACES (LINUX 2.6.29)

Permet l’isolation des ressources associées au réseau,chaque namespace dispose de ses propres cartesréseaux, plan IP, table de routage, etc.

4 . 10

Page 24: FORMATION DOCKER - particule

CGROUPS : CONTROL CROUPSCGroup: / |--docker | |--7a977a50f48f2970b6ede780d687e72c0416d9ab6e0b02030698c1633fdde956 | |--6807 nginx: master process ngin | | |--6847 nginx: worker proces

4 . 11

Page 25: FORMATION DOCKER - particule

CGROUPS : LIMITATION DE RESSOURCES

Limitation des ressources : des groupes peuvent êtremis en place afin de ne pas dépasser une limite demémoire.

4 . 12

Page 26: FORMATION DOCKER - particule

CGROUPS : PRIORISATION

Priorisation : certains groupes peuvent obtenir uneplus grande part de ressources processeur ou debande passante d'entrée-sortie.

4 . 13

Page 27: FORMATION DOCKER - particule

CGROUPS : COMPTABILITÉ

Comptabilité : permet de mesurer la quantité deressources consommées par certains systèmes, envue de leur facturation par exemple.

4 . 14

Page 28: FORMATION DOCKER - particule

CGROUPS : ISOLATION

Isolation : séparation par espace de nommage pourles groupes, afin qu'ils ne puissent pas voir lesprocessus des autres, leurs connexions réseaux ouleurs fichiers.

4 . 15

Page 29: FORMATION DOCKER - particule

CGROUPS : CONTRÔLE

Contrôle : figer les groupes ou créer un point desauvegarde et redémarrer.

4 . 16

Page 30: FORMATION DOCKER - particule

DEUX PHILOSOPHIES DE CONTENEURS

Systeme : simule une séquence de boot complèteavec un init process ainsi que plusieurs processus(LXC, OpenVZ).Process : un conteneur exécute un ou plusieursprocessus directement, en fonction de l'applicationconteneurisée (Docker, Rkt).

4 . 17

Page 31: FORMATION DOCKER - particule

ENCORE PLUS “CLOUD” QU’UNE INSTANCE

Partage du kernel

Un seul processus par conteneur

Le conteneur est encore plus éphémère quel’instance

Le turnover des conteneurs est élevé : orchestration

4 . 18

Page 32: FORMATION DOCKER - particule

CONTAINER RUNTIME

Permettent d'exécuter des conteneurs sur un système

docker: historique

containerd: implémentation de référence

cri-o: implémentation Open Source développée parRedHat

kata containers: Conteneurs dans des VMs

4 . 19

Page 33: FORMATION DOCKER - particule

LES CONTENEURS: CONCLUSION

Fonctionnalités offertes par le Kernel

Les conteneurs engine fournissent des interfacesd'abstraction

Plusieurs types de conteneurs pour différents besoins

4 . 20

Page 34: FORMATION DOCKER - particule

LES CONCEPTS

5 . 1

Page 35: FORMATION DOCKER - particule

UN ENSEMBLE DE CONCEPTS ET DE COMPOSANTS

Layers

Stockage

Volumes

Réseau

Publication de ports

Service Discovery

5 . 2

Page 36: FORMATION DOCKER - particule

LAYERS

Les conteneurs et leurs images sont décomposés encouches (layers)

Les layers peuvent être réutilisés entre différentsconteneurs

Gestion optimisée de l'espace disque.

5 . 3

Page 37: FORMATION DOCKER - particule

LAYERS : UNE IMAGE

Une image se decompose en layers

5 . 4

Page 38: FORMATION DOCKER - particule

LAYERS : UN CONTENEUR

Une conteneur = une image + un layer r/w

5 . 5

Page 39: FORMATION DOCKER - particule

LAYERS : PLUSIEURS CONTENEURS

Une image, plusieurs conteneurs

5 . 6

Page 40: FORMATION DOCKER - particule

LAYERS : RÉPÉTITION DES LAYERS

Les layers sont indépendants de l'image

5 . 7

Page 41: FORMATION DOCKER - particule

STOCKAGE

Images Docker, données des conteneurs, volumes

Multiples backends (extensibles via plugins):AUFSDeviceMapperOverlayFSNFS (via plugin Convoy)GlusterFS (via plugin Convoy)

5 . 8

Page 42: FORMATION DOCKER - particule

STOCKAGE : AUFS

A unification filesystem

Stable : performance écriture moyenne

Non intégré dans le Kernel Linux (mainline)

5 . 9

Page 43: FORMATION DOCKER - particule

STOCKAGE : DEVICE MAPPER

Basé sur LVM

Thin Provisionning et snapshot

Intégré dans le Kernel Linux (mainline)

Stable : performance écriture moyenne

5 . 10

Page 44: FORMATION DOCKER - particule

STOCKAGE : OVERLAYFS

Successeur de AUFS

Performances accrues

Relativement stable mais moins éprouvé que AUFSou Device Mapper

5 . 11

Page 45: FORMATION DOCKER - particule

STOCKAGE : PLUGINS

Étendre les drivers de stockages disponibles

Utiliser des systèmes de fichier distribués (GlusterFS)

Partager des volumes entre plusieurs hôtes docker

5 . 12

Page 46: FORMATION DOCKER - particule

VOLUMES

Assurent une persistance des données

Indépendance du volume par rapport au conteneuret aux layers

Deux types de volumes :Conteneur : Les données sont stockées dans ceque l'on appelle un data conteneurHôte : Montage d'un dossier de l'hôte dockerdans le conteneur

Partage de volumes entre plusieurs conteneurs

5 . 13

Page 47: FORMATION DOCKER - particule

VOLUMES : EXEMPLE

Un volume monté sur deux conteneurs5 . 14

Page 48: FORMATION DOCKER - particule

VOLUMES : PLUGINS

Permettre le partage de volumes entre differentshôtes

Fonctionnalité avancées : snapshot, migration,restauration

Quelques exemples:Convoy : multi-host et multi-backend (NFS,GlusterFS)Flocker : migration de volumes dans un cluster

5 . 15

Page 49: FORMATION DOCKER - particule

RÉSEAU : A LA BASE, PAS GRAND CHOSE...NETWORK ID NAME DRIVER42f7f9558b7a bridge bridge6ebf7b150515 none null0509391a1fbd host host

5 . 16

Page 50: FORMATION DOCKER - particule

RÉSEAU : BRIDGE

5 . 17

Page 51: FORMATION DOCKER - particule

RÉSEAU : HOST

5 . 18

Page 52: FORMATION DOCKER - particule

RÉSEAU : NONE

Explicite

5 . 19

Page 53: FORMATION DOCKER - particule

RÉSEAU : LES ÉVOLUTIONS

Refactorisation des composants réseau (libnetwork)

Système de plugins : multi host et multi backend(overlay network)

Quelques exemples d'overlay :Flannel : UDP et VXLANWeave : VXLAN

5 . 20

Page 54: FORMATION DOCKER - particule

RÉSEAU : MULTIHOST OVERLAY

5 . 21

Page 55: FORMATION DOCKER - particule

PUBLICATION DE PORTS

Dans le cas d'un réseau diffèrent de l'hôte

Les conteneurs ne sont pas accessible depuisl'extérieur

Possibilité de publier des ports depuis l'hôte vers leconteneur (iptables)

L'hôte sert de proxy au service

5 . 22

Page 56: FORMATION DOCKER - particule

PUBLICATION DE PORTS

5 . 23

Page 57: FORMATION DOCKER - particule

LINKS

Les conteneurs d'un même réseau peuventcommuniquer via IP

Les liens permettent de lier deux conteneurs parnom

Système de DNS rudimentaire (/etc/hosts)

Remplacés par les discovery services

5 . 24

Page 58: FORMATION DOCKER - particule

LES CONCEPTS: CONCLUSION

Les composants de Docker sont modulaires

Nombreuses possibilités offertes par défaut.

Possibilité d'étendre les fonctionnalités via desplugins

5 . 25

Page 59: FORMATION DOCKER - particule

BUILD, SHIP AND RUN !

6 . 1

Page 60: FORMATION DOCKER - particule

BUILD

6 . 2

Page 61: FORMATION DOCKER - particule

LE CONTENEUR ET SON IMAGE

Flexibilité et élasticité

Format standard de facto

Instanciation illimitée

6 . 3

Page 62: FORMATION DOCKER - particule

CONSTRUCTION D'UNE IMAGE

Possibilité de construire son image à la main (long etsource d'erreurs)

Suivi de version et construction d'images de manièreautomatisée

Utilisation de Dockerfile afin de garantirl'idempotence des images

6 . 4

Page 63: FORMATION DOCKER - particule

DOCKERFILE

Suite d'instruction qui définit une image

Permet de vérifier le contenu d'une image

FROM alpine:3.4MAINTAINER Particule <[email protected]>RUN apk -U add nginxEXPOSE 80 443CMD ["nginx"]

6 . 5

Page 64: FORMATION DOCKER - particule

DOCKERFILE : PRINCIPALES INSTRUCTIONS

FROM : baseimage utilisée

RUN : Commandes effectuées lors du build de l'image

EXPOSE : Ports exposées lors du run (si -P est précisé)

ENV : Variables d'environnement du conteneur àl'instanciation

CMD : Commande unique lancée par le conteneur

ENTRYPOINT : "Préfixe" de la commande uniquelancée par le conteneur

6 . 6

Page 65: FORMATION DOCKER - particule

DOCKERFILE : BEST PRACTICES

Bien choisir sa baseimage

Chaque commande Dockerfile génère un nouveaulayer

Comptez vos layers !

6 . 7

Page 66: FORMATION DOCKER - particule

DOCKERFILE : BAD LAYERINGRUN apk --update add \ git \ tzdata \ python \ unrar \ zip \ libxslt \ py-pip \

RUN rm -rf /var/cache/apk/*

VOLUME /config /downloads

EXPOSE 8081

CMD ["--datadir=/config", "--nolaunch"]

ENTRYPOINT ["/usr/bin/env","python2","/sickrage/SickBeard.py"]

6 . 8

Page 67: FORMATION DOCKER - particule

DOCKERFILE : GOOD LAYERINGRUN apk --update add \ git \ tzdata \ python \ unrar \ zip \ libxslt \ py-pip \ && rm -rf /var/cache/apk/*

VOLUME /config /downloads

EXPOSE 8081

CMD ["--datadir=/config", "--nolaunch"]

ENTRYPOINT ["/usr/bin/env","python2","/sickrage/SickBeard.py"]

6 . 9

Page 68: FORMATION DOCKER - particule

DOCKERFILE : DOCKERHUB

Build automatisée d'images Docker

Intégration GitHub / DockerHub

Plateforme de stockage et de distribution d'imagesDocker

6 . 10

Page 69: FORMATION DOCKER - particule

SHIP

6 . 11

Page 70: FORMATION DOCKER - particule

SHIP : LES CONTENEURS SONT MANIPULABLES

Sauvegarder un conteneur :

Exporter une image :

Importer un conteneur :

docker commit mon-conteneur backup/mon-conteneur

docker run -it backup/mon-conteneur

docker save -o mon-image.tar backup/mon-conteneur

docker import mon-image.tar backup/mon-conteneur

6 . 12

Page 71: FORMATION DOCKER - particule

SHIP : DOCKER REGISTRY

DockerHub n’est qu’au Docker registry ce queGitHub est à git

Pull and Push

Image officielle : registry

6 . 13

Page 72: FORMATION DOCKER - particule

RUN

6 . 14

Page 73: FORMATION DOCKER - particule

RUN : LANCER UN CONTENEUR

docker run

-d (detach)

-i (interactive)

-t (pseudo tty)

6 . 15

Page 74: FORMATION DOCKER - particule

RUN : BEAUCOUP D’OPTIONS...

-v /directory/host:/directory/container

-p portHost:portContainer

-P-e “VARIABLE=valeur”

--restart=always--name=mon-conteneur

6 . 16

Page 75: FORMATION DOCKER - particule

RUN : ...DONT CERTAINES UN PEU DANGEREUSES

--privileged (Accès à tous les devices)

--pid=host (Accès aux PID de l’host)

--net=host (Accès à la stack IP de l’host)

6 . 17

Page 76: FORMATION DOCKER - particule

RUN : SE “CONNECTER” À UN CONTENEUR

docker exec

docker attach

6 . 18

Page 77: FORMATION DOCKER - particule

RUN : DÉTRUIRE UN CONTENEUR

docker kill (SIGKILL)

docker stop (SIGTERM puis SIGKILL)

docker rm (détruit complètement)

6 . 19

Page 78: FORMATION DOCKER - particule

BUILD, SHIP AND RUN : CONCLUSIONS

Écosystème de gestion d'images

Construction automatisée d'images

Contrôle au niveau conteneurs

6 . 20

Page 79: FORMATION DOCKER - particule

ÉCOSYSTÈME DOCKER

7 . 1

Page 80: FORMATION DOCKER - particule

DOCKER INC.

Docker Inc != Docker Project

Docker Inc est le principal développeur du DockerEngine, Compose, Machine, Kitematic, Swarm etc.

Ces projets restent OpenSource et les contributionssont possibles

7 . 2

Page 81: FORMATION DOCKER - particule

OCI

Créé sous la Linux Fondation

But : Créer des standards OpenSource concernant lamanière de "runner" et le format des conteneurs

Non lié à des produits commerciaux

Non lié à des orchestrateurs ou des clientsparticuliers

runC a été donné par Docker à l'OCI comme basepour leurs travaux

7 . 3

Page 82: FORMATION DOCKER - particule

LES AUTRES PRODUITS DOCKER

7 . 4

Page 83: FORMATION DOCKER - particule

DOCKER-COMPOSE

Concept de stack

Infrastructure as a code

Scalabilité

7 . 5

Page 84: FORMATION DOCKER - particule

DOCKER-COMPOSE

docker-compose.ymlnginx: image: nginx ports: - "80:80" - "443:443" volumes: - "/srv/nginx/etc/sites-enabled:/etc/nginx/sites-enabled" - "/srv/nginx/etc/certs:/etc/nginx/certs" - "/srv/nginx/etc/log:/var/log/nginx" - "/srv/nginx/data:/var/www"

7 . 6

Page 85: FORMATION DOCKER - particule

DOCKER-MACHINE

"Metal" as a Service

Provisionne des hôtes Docker

Abstraction du Cloud Provider

7 . 7

Page 86: FORMATION DOCKER - particule

DOCKER SWARM

Clustering : Mutualisation d'hôtes Docker

Orchestration : placement intelligent des conteneursau sein du cluster

7 . 8

Page 87: FORMATION DOCKER - particule

AUTOUR DE DOCKER

Plugins : étendre les fonctionnalités notammentréseau et volumes

Systèmes de gestion de conteneurs (COE)

Docker as a Service :Docker CloudTutum

7 . 9

Page 88: FORMATION DOCKER - particule

ÉCOSYSTÈME DOCKER : CONCLUSION

Le projet Docker est Open Source et n'appartientplus à Docker

Des outils permettent d'étendre les fonctionnalitésde Docker

Docker Inc. construit des offres commerciales autourde Docker

7 . 10

Page 89: FORMATION DOCKER - particule

DOCKER HOSTS

8 . 1

Page 90: FORMATION DOCKER - particule

LES DISTRIBUTIONS TRADITIONNELLES

Debian, CentOS, Ubuntu

Supportent tous Docker

Paquets DEB et RPM disponibles

8 . 2

Page 91: FORMATION DOCKER - particule

UN PEU "TOO MUCH" NON ?

Paquets inutiles ou out of date

Services par défaut/inutiles alourdissent lesdistributions

Cycle de release figé

8 . 3

Page 92: FORMATION DOCKER - particule

OS ORIENTÉS CONTENEURS

Faire tourner un conteneur engine

Optimisé pour les conteneurs : pas de servicessuperflus

Fonctionnalités avancées liées aux conteneurs(clustering, network, etc.)

Sécurité accrue de part le minimalisme

8 . 4

Page 93: FORMATION DOCKER - particule

OS ORIENTÉS CONTENEURS : EXEMPLES

CoreOS (CoreOS)

Atomic (Red Hat)

RancherOS (Rancher)

Photon (VMware)

8 . 5

Page 94: FORMATION DOCKER - particule

COREOS : PHILOSOPHIE

Trois "channels" : stable, beta, alpha

Dual root : facilité de mise à jour

Système de fichier en read only

Pas de gestionnaire de paquets : tout estconteneurisé

Forte intégration de systemd

8 . 6

Page 95: FORMATION DOCKER - particule

COREOS : FONCTIONNALITÉS ORIENTÉES CONTENEURS

Inclus :DockerRktEtcd (base de données clé/valeur)Flannel (overlay network)Kubernetes Kubelet

Permet nativement d'avoir un cluster complet

Stable et éprouvé en production

Idéal pour faire tourner Kubernetes (Tectonic)

8 . 7

Page 96: FORMATION DOCKER - particule

COREOS : ETCD

Système de stockage simple : clé = valeur

Hautement disponible (quorum)

Accessible via API

8 . 8

Page 97: FORMATION DOCKER - particule

COREOS : FLANNEL

Communication multi-hosts

UDP ou VXLAN

S'appuie sur un système clé/valeur comme etcd

8 . 9

Page 98: FORMATION DOCKER - particule

RANCHEROS : PHILOSOPHIE

Docker et juste Docker : Docker est le process de PID1)

Docker in Docker : Daemon User qui tourne dans leDaemon System

Pas de processus tiers, pas d'init, juste Docker

Encore en beta

8 . 10

Page 99: FORMATION DOCKER - particule

FEDORA ATOMIC : PHILOSOPHIE

Équivalent à CoreOS mais basée sur Fedora

Utilise systemd

Update Atomic (incrémentielles pour rollback)

8 . 11

Page 100: FORMATION DOCKER - particule

PROJECT PHOTON

Développé par VMware mais Open Source

Optimisé pour vSphere

Supporte Docker, Rkt et Pivotal Garden (CloudFoundry)

8 . 12

Page 101: FORMATION DOCKER - particule

DOCKER HOSTS : CONCLUSION

Répond à un besoin différent des distributionsclassiques

Fourni des outils et une logique adaptée auxenvironnements full conteneurs

Sécurité accrue (mise à jour)

8 . 13

Page 102: FORMATION DOCKER - particule

DOCKER EN PRODUCTION

9 . 1

Page 103: FORMATION DOCKER - particule

OÙ DÉPLOYER ?

Cloud public:GCEAWS

Cloud privé: OpenStack

Bare Metal9 . 2

Page 104: FORMATION DOCKER - particule

COMMENT ?

Utilisation de COE (Container Orchestration Engine)

Utilisation d'infrastructure as code

Utilisation d'un Discovery Service

9 . 3

Page 105: FORMATION DOCKER - particule

CONTAINER ORCHESTRATION ENGINE

Gestion du cycle de vie des conteneurs/applications

Abstraction des hôtes et des cloud providers(clustering)

Scheduling en fonction des besoins de l'application

Quelques exemples:Docker SwarmRancherMesosKubernetes

9 . 4

Page 106: FORMATION DOCKER - particule

INFRASTRUCTURE AS A CODE

Version Control System

Intégration / Déploiement Continue

Outils de templating (Heat, Terraform,Cloudformation)

9 . 5

Page 107: FORMATION DOCKER - particule

DISCOVERY SERVICE

La nature éphémère des conteneurs empêche touteconfiguration manuelle

Connaître de façon automatique l'état de sesconteneurs à tout instant

Fournir un endpoint fixe à une applicationsusceptible de bouger au sein d'un cluster

9 . 6

Page 108: FORMATION DOCKER - particule

CONSUL

Combinaison de plusieurs services : KV Store, DNS,HTTP

Failure detection

Datacenter aware

Github

9 . 7

Page 109: FORMATION DOCKER - particule

CONSUL

Exemple :$ curl -X PUT -d 'docker' http://localhost:8500/v1/kv/container/key1true$ curl http://localhost:8500/v1/kv/container/key1 | jq .[ { "CreateIndex": 5, "ModifyIndex": 5, "LockIndex": 0, "Key": "container/key1", "Flags": 0, "Value": "ZG9ja2Vy" }]$ echo ZG9ja2Vy | base64 -ddocker

9 . 8

Page 110: FORMATION DOCKER - particule

CONSUL

L'enregistrement des nouveaux conteneurs peut êtreautomatisé

Registrator est un process écoutant le daemonDocker et enregistrant les évènements

9 . 9

Page 111: FORMATION DOCKER - particule

RANCHER

Permet de provisionner et mutualiser des hôtesDocker sur différents Cloud Provider

Fournit des fonctionnalité de COE :Cattle : COE développé par RancherKubernetes : COE développé par Google

Bon compromis entre simplicité et fonctionnalitéscomparé à Mesos ou Kubernetes

Encore jeune, adapté aux environnement de taillemoyenne (problèmes de passage à l'échelle)

Page 112: FORMATION DOCKER - particule

9 . 10

Page 113: FORMATION DOCKER - particule

APACHE MESOS / MARATHON

Mesos : Gestion et orchestration de systèmesdistribués

A la base orienté Big Data (Hadoop, Elasticsearch...) etétendu aux conteneurs via Marathon

Marathon : Scheduler pour Apache Mesos orientéconteneur

Multi Cloud/Datacenter

Adapté aux gros environnements, éprouvé jusque10000 nodes

Page 114: FORMATION DOCKER - particule

9 . 11

Page 115: FORMATION DOCKER - particule

KUBERNETES

COE développé par Google, devenu open source en2014

Utilisé par Google pour la gestion de leurs conteneurs

Adapté à tout type d'environnements

Devenu populaire en très peu de temps

9 . 12

Page 116: FORMATION DOCKER - particule

QUELQUES AUTRES

Hashicorp Nomad

Amazon ECS

Docker Cloud

Docker UCP (Universal Control Plane)

9 . 13

Page 117: FORMATION DOCKER - particule

DOCKER EN PRODUCTION : CONCLUSION

9 . 14

Page 118: FORMATION DOCKER - particule

MONITORER UNE INFRASTRUCTURE DOCKER

10 . 1

Page 119: FORMATION DOCKER - particule

QUOI MONITORER ?

L'infrastructure

Les conteneurs

10 . 2

Page 120: FORMATION DOCKER - particule

MONITORER SON INFRASTRUCTURE

Problématique classique

Monitorer des serveur est une problématique résoludepuis de nombreuses années par des outils devenus des

standards :

Nagios

Shinken

Centreon

Icinga

10 . 3

Page 121: FORMATION DOCKER - particule

INTÉRÊT ?

Un des principes du cloud computing est d'abstraireles couches basses

Docker accentue cette pratique

Est-ce intéressant de monitorer son infra ?

10 . 4

Page 122: FORMATION DOCKER - particule

Oui bien sûr ;)

10 . 5

Page 123: FORMATION DOCKER - particule

MONITORER SES CONTENEURS

Monitorer les services fournis par les conteneurs

Monitorer l'état d'un cluster

Monitorer un conteneur spécifique

10 . 6

Page 124: FORMATION DOCKER - particule

PROBLÉMATIQUES DES CONTENEURS

Les conteneurs sont des boîtes noires

Les conteneurs sont dynamiques

La scalabilité induite par les conteneurs devient unproblème

10 . 7

Page 125: FORMATION DOCKER - particule

MONITORER LES SERVICES

La problématique est différente pour chaque service

Concernant les web services (grande majorité), letemps de réponse du service et la disponibilité duservice sont de bons indicatifs

Problème adressé par certains services discoverypour conserver une vision du système cohérente (ex :Consul

10 . 8

Page 126: FORMATION DOCKER - particule

MONITORER L'ÉTAT D'UN CLUSTER

Dépends grandement de la technologie employée

Le cluster se situe t-il au niveau de l'host Docker oudes conteneurs eux mêmes ?

10 . 9

Page 127: FORMATION DOCKER - particule

MONITORER, OK MAIS DEPUIS OÙ ?

Commandes exécutées dans le container

Agents à l'intérieur du conteneur

Agents à l'extérieur du conteneur

10 . 10

Page 128: FORMATION DOCKER - particule

LES OUTILS DE MONITORING

Docker stats

CAdvisor

Datadog

Sysdig

Prometheus

10 . 11

Page 129: FORMATION DOCKER - particule

KUBERNETES : CONCEPTS ET OBJETS

11 . 1

Page 130: FORMATION DOCKER - particule

KUBERNETES : API RESOURCES

NamespacesPodsDeploymentsDaemonSetsStatefulSetsJobsCronjobs

11 . 2

Page 131: FORMATION DOCKER - particule

KUBERNETES : NAMESPACES

Fournissent une séparation logique des ressources :Par utilisateursPar projet / applicationsAutres...

Les objets existent uniquement au sein d'unnamespace donnéÉvitent la collision de nom d'objets

11 . 3

Page 132: FORMATION DOCKER - particule

KUBERNETES : LABELS

Système de clé/valeurOrganisent les différents objets de Kubernetes (Pods,RC, Services, etc.) d'une manière cohérente quireflète la structure de l'applicationCorrèlent des éléments de Kubernetes : par exempleun service vers des Pods

11 . 4

Page 133: FORMATION DOCKER - particule

KUBERNETES : LABELS

Exemple de label :apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80

11 . 5

Page 134: FORMATION DOCKER - particule

KUBERNETES : POD

Ensemble logique composé de un ou plusieursconteneursLes conteneurs d'un pod fonctionnent ensemble(instanciation et destruction) et sont orchestrés surun même hôteLes conteneurs partagent certaines spécifications duPod :

La stack IP (network namespace)Inter-process communication (PID namespace)Volumes

C'est la plus petite et la plus simple unité dansKubernetes

11 . 6

Page 135: FORMATION DOCKER - particule

KUBERNETES : POD

Les Pods sont définis en YAML comme les fichiersdocker-compose :

11 . 7

Page 136: FORMATION DOCKER - particule

KUBERNETES : DEPLOYMENT

Permet d'assurer le fonctionnement d'un ensemblede PodsVersion, Update et RollbackAnciennement appelés Replication Controllers

11 . 8

Page 137: FORMATION DOCKER - particule

KUBERNETES : DEPLOYMENT

11 . 9

Page 138: FORMATION DOCKER - particule

KUBERNETES : DEPLOYMENTapiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80

11 . 10

Page 139: FORMATION DOCKER - particule

KUBERNETES : DAEMONSET

Assure que tous les noeuds exécutent une copie dupodNe connaît pas la notion de replicas.Utilisé pour des besoins particuliers comme :

l'exécution d'agents de collection de logscomme fluentd ou logstashl'exécution de pilotes pour du matériel commenvidia-pluginl'exécution d'agents de supervision commeNewRelic agent ou Prometheus node exporter

11 . 11

Page 140: FORMATION DOCKER - particule

KUBERNETES : DAEMONSETapiVersion: apps/v1kind: DaemonSetmetadata: name: fluentdspec: selector: matchLabels: name: fluentd template: metadata: labels: name: fluentd spec: containers: - name: fluentd image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2

11 . 12

Page 141: FORMATION DOCKER - particule

KUBERNETES : STATEFULSET

Similaire au DeploymentLes pods possèdent des identifiants uniques.Chaque replica de pod est créé par ordre d'indexNécessite un Persistent Volume et unStorage Class.Supprimer un StatefulSet ne supprime pas le PVassocié

11 . 13

Page 142: FORMATION DOCKER - particule

KUBERNETES : STATEFULSETapiVersion: apps/v1kind: StatefulSetmetadata: name: webspec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: k8s.gcr.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata:

11 . 14

Page 143: FORMATION DOCKER - particule

KUBERNETES : JOB

Crée des pods et s'assurent qu'un certain nombred'entre eux se terminent avec succès.Peut exécuter plusieurs pods en parallèleSi un noeud du cluster est en panne, les pods sontreschedulés vers un autre noeud.

11 . 15

Page 144: FORMATION DOCKER - particule

KUBERNETES : JOBapiVersion: batch/v1kind: Jobmetadata: name: pispec: parallelism: 1 completions: 1 template: metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure

11 . 16

Page 145: FORMATION DOCKER - particule

KUBERNETES: CRON JOB

Un CronJob permet de lancer des Jobs de manièreplanifiée.la programmation des Jobs se définit au format Cronle champ jobTemplate contient la définition del'application à lancer comme Job.

11 . 17

Page 146: FORMATION DOCKER - particule

KUBERNETES : CRONJOBapiVersion: batch/v1beta1kind: CronJobmetadata: name: batch-job-every-fifteen-minutesspec: schedule: "0,15,30,45 * * * *" jobTemplate: spec: template: metadata: labels: app: periodic-batch-job spec: restartPolicy: OnFailure containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]

11 . 18

Page 147: FORMATION DOCKER - particule

KUBERNETES : NETWORKING

12 . 1

Page 148: FORMATION DOCKER - particule

KUBERNETES : NETWORK PLUGINS

Kubernetes n'implémente pas de solution de gestionde réseau par défautLe réseau est implémenté par des solutions tierces :

: IPinIP + BGP : eBPF : VXLAN

Bien

CalicoCiliumWeave

d'autres

12 . 2

Page 149: FORMATION DOCKER - particule

KUBERNETES : CNI

Projet dans la CNCFStandard pour la gestion du réseau enenvironnement conteneuriséLes solutions précédentes s'appuient sur CNI

Container Network Interface

12 . 3

Page 150: FORMATION DOCKER - particule

KUBERNETES : SERVICES

Abstraction des Pods sous forme d'une IP virtuelle deServiceRendre un ensemble de Pods accessibles depuisl'extérieur ou l'intérieur du clusterLoad Balancing entre les Pods d'un même ServiceSélection des Pods faisant parti d'un Service grâceaux labels

12 . 4

Page 151: FORMATION DOCKER - particule

KUBERNETES : SERVICES

12 . 5

Page 152: FORMATION DOCKER - particule

KUBERNETES : SERVICES CLUSTERIP

Exemple de Service (on remarque la sélection sur lelabel et le mode d'exposition):

apiVersion: v1kind: Servicemetadata: name: frontendspec: type: ClusterIP ports: - port: 80 selector: app: guestbook

12 . 6

Page 153: FORMATION DOCKER - particule

KUBERNETES : SERVICE NODEPORT

NodePort : chaque noeud du cluster ouvre un portstatique et redirige le trafic vers le port indiqué

12 . 7

Page 154: FORMATION DOCKER - particule

KUBERNETES : SERVICE LOADBALANCER

LoadBalancer : expose le Service en externe enutilisant le loadbalancer d'un cloud provider

AWS ELB/ALB/NLBGCP LoadBalancerAzure BalancerOpenStack Octavia

12 . 8

Page 155: FORMATION DOCKER - particule

KUBERNETES : SERVICE LOADBALANCER

12 . 9

Page 156: FORMATION DOCKER - particule

KUBERNETES : SERVICES

Il est aussi possible de mapper un Service avec un nom dedomaine en spécifiant le paramètre spec.externalName.

apiVersion: v1kind: Servicemetadata: name: my-service namespace: prodspec: type: ExternalName externalName: my.database.example.com

12 . 10

Page 157: FORMATION DOCKER - particule

KUBERNETES: INGRESS

L'objet Ingress permet d'exposer un Service àl'extérieur d'un cluster KubernetesIl permet de fournir une URL visible permettantd'accéder un Service KubernetesIl permet d'avoir des terminations TLS, de faire duLoad Balancing, etc...

12 . 11

Page 158: FORMATION DOCKER - particule

KUBERNETES: INGRESS

12 . 12

Page 159: FORMATION DOCKER - particule

KUBERNETES : INGRESSapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: particulespec: rules: - host: blog.particule.io http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 80

12 . 13

Page 160: FORMATION DOCKER - particule

KUBERNETES : INGRESS CONTROLLER

Pour utiliser un Ingress, il faut un Ingress Controller. UnIngress permet de configurer une règle de reverse proxy

sur l'Ingress Controller.

Nginx Controller :

Traefik : Istio : Linkerd : Contour :

https://github.com/kubernetes/ingress-nginxhttps://github.com/containous/traefik

https://github.com/istio/istiohttps://github.com/linkerd/linkerdhttps://www.github.com/heptio/contour/

12 . 14

Page 161: FORMATION DOCKER - particule

KUBERNETES : ARCHITECTURE

13 . 1

Page 162: FORMATION DOCKER - particule

KUBERNETES : COMPOSANTS

Kubernetes est écrit en Go, compilé statiquement.Un ensemble de binaires sans dépendanceFaciles à conteneuriser et à packagerPeut se déployer uniquement avec des conteneurssans dépendance d'OS

13 . 2

Page 163: FORMATION DOCKER - particule

KUBERNETES : COMPOSANTS DU CONTROL PLANE

etcd: Base de donnéeskube-apiserver : API server qui permet laconfiguration d'objets Kubernetes (Pod, Service,Deployment, etc.)kube-proxy : Permet le forwarding TCP/UDP et leload balancing entre les services et les backends(Pods)kube-scheduler : Implémente les fonctionnalités deschedulingkube-controller-manager : Responsable de l'état ducluster, boucle infinie qui régule l'état du cluster afind'atteindre un état désiré

13 . 3

Page 164: FORMATION DOCKER - particule

KUBERNETES : COMPOSANTS DU CONTROL PLANE

13 . 4

Page 165: FORMATION DOCKER - particule

KUBERNETES : COMPOSANTS DU CONTROL PLANE

13 . 5

Page 166: FORMATION DOCKER - particule

KUBERNETES : ETCD

Base de données de type Clé/Valeur (Key Value Store)Stocke l'état d'un cluster KubernetesPoint sensible (stateful) d'un cluster KubernetesProjet intégré à la CNCF

13 . 6

Page 167: FORMATION DOCKER - particule

KUBERNETES : KUBE-APISERVER

Les configurations d'objets (Pods, Service, RC, etc.) sefont via l'API serverUn point d'accès à l'état du cluster aux autrescomposants via une API RESTTous les composants sont reliés à l'API server

13 . 7

Page 168: FORMATION DOCKER - particule

KUBERNETES : KUBE-SCHEDULER

Planifie les ressources sur le clusterEn fonction de règles implicites (CPU, RAM, stockagedisponible, etc.)En fonction de règles explicites (règles d'affinité etanti-affinité, labels, etc.)

13 . 8

Page 169: FORMATION DOCKER - particule

KUBERNETES : KUBE-PROXY

Responsable de la publication des ServicesUtilise iptablesRoute les paquets à destination des conteneurs etréalise le load balancing TCP/UDP

13 . 9

Page 170: FORMATION DOCKER - particule

KUBERNETES : KUBE-CONTROLLER-MANAGER

Boucle infinie qui contrôle l'état d'un clusterEffectue des opérations pour atteindre un état donnéDe base dans Kubernetes : replication controller,endpoints controller, namespace controller etserviceaccounts controller

13 . 10

Page 171: FORMATION DOCKER - particule

KUBERNETES : AUTRES COMPOSANTS

kubelet : Service "agent" fonctionnant sur tous lesnœuds et assure le fonctionnement des autresserviceskubectl : Ligne de commande permettant de piloterun cluster Kubernetes

13 . 11

Page 172: FORMATION DOCKER - particule

KUBERNETES : KUBELET

Service principal de KubernetesPermet à Kubernetes de s'auto configurer :

Surveille un dossier contenant les manifests(fichiers YAML des différents composant deKubernetes).Applique les modifications si besoin (upgrade,rollback).

Surveille l'état des services du cluster via l'API server(kube-apiserver).

13 . 12

Page 173: FORMATION DOCKER - particule

KUBERNETES : KUBELET

Assure la communication entre les nodes etl'apiserverEn charge de créer les conteneurs au travers del'interface Container Runtime Interface (CRI)Peut fonctionner avec différentes container runtimes

13 . 13

Page 174: FORMATION DOCKER - particule

KUBERNETES : KUBELET

13 . 14

Page 175: FORMATION DOCKER - particule

KUBERNETES: NETWORK

Kubernetes n'implémente pas de solution réseau pardéfaut, mais s'appuie sur des solutions tierces qui

implémentent les fonctionnalités suivantes :

Chaque pods reçoit sa propre adresse IPLes pods peuvent communiquer directement sansNAT

13 . 15

Page 176: FORMATION DOCKER - particule

OPENSHIFT : INTRODUCTION

14 . 1

Page 177: FORMATION DOCKER - particule

OPENSHIFT

Solution de PaaS développée par Red Hat

Deux version :Open Source : Entreprise :

Se base sur Kubernetes en tant qu'orchestrateur deconteneurs

OpenShift OriginOpenShift Container Platform

14 . 2

Page 178: FORMATION DOCKER - particule

OPENSHIFT VS KUBERNETES : DIFFÉRENCES ET AJOUTS

Pas d'Ingress : Router

Build et Images Stream : Création d'images etpipeline de CI/CD

Templates : Permet de definir et templatiserfacilement un ensemble d'Objet OpenShift

OpenShift SDN ou Nuage Network pour le réseau

14 . 3

Page 179: FORMATION DOCKER - particule

OPENSHIFT : ROUTER

Quasiment identique à Ingress mais implémentésavant Kubernetes

Fournissent les même fonctionnalités

Deux implementations :HAProxyF5 Big IP

14 . 4

Page 180: FORMATION DOCKER - particule

OPENSHIFT : BUILD

Permet de construire et reproduire des imagesd'application

Docker builds : via Dockerfile

Source-to-Image (S2I) builds : système de buildpropre à OpenShift qui produit une image Dockerd'une application depuis les source

Pipeline builds : via Jenkins

14 . 5

Page 181: FORMATION DOCKER - particule

OPENSHIFT : IMAGE STREAM

Similaires à un dépôt DockerHub

Rassemble des images similaires identifiées par destags

Permet de garder un historique des différentesversions

14 . 6

Page 182: FORMATION DOCKER - particule

OPENSHIFT : CONCLUSION

14 . 7

Page 183: FORMATION DOCKER - particule

CONCLUSION

15 . 1