formation docker

179
1 FORMATION DOCKER

Upload: dinhhuong

Post on 13-Feb-2017

265 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: FORMATION DOCKER

1

FORMATION DOCKER

Page 2: FORMATION DOCKER

2 . 1

CONCERNANT CES SUPPORTS DE COURS

Page 3: FORMATION DOCKER

2 . 2

SUPPORTS DE COURS RÉALISÉS PAR OSONEShttps://osones.com

Copyright © 2017 OsonesLicence : Sources : Online :

Creative Commons BY-SA 4.0https://github.com/Osones/Formations/

https://osones.com/formations/docker.html

Page 5: FORMATION DOCKER

3 . 1

LE CLOUD : VUE D’ENSEMBLE

Page 6: FORMATION DOCKER

3 . 2

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é

Page 7: FORMATION DOCKER

3 . 3

WAAS : WHATEVER AS A SERVICEIaaS : Infrastructure as aService

PaaS : Platform as a Service

SaaS : Software as a Service

Page 8: FORMATION DOCKER

3 . 4

LE CLOUD EN UN SCHÉMA

Page 9: FORMATION DOCKER

3 . 5

POURQUOI DU CLOUD ? CÔTÉ TECHNIQUEAbstraction des couches basses

On peut tout programmer à son gré (API)

Permet la mise en place d’architectures scalables

Page 10: FORMATION DOCKER

3 . 6

VIRTUALISATION DANS LE CLOUDLe cloud IaaS repose souvent sur la virtualisation

Ressources compute : virtualisation

Virtualisation complète : KVM, Xen

Virtualisation conteneurs : OpenVZ, LXC, Docker,RKT

Page 11: FORMATION DOCKER

3 . 7

NOTIONS ET VOCABULAIRE IAASL’instance est par définition éphémère

Elle doit être utilisée comme ressource decalcul

Séparer les données des instances

Page 12: FORMATION DOCKER

3 . 8

ORCHESTRATION DES RESSOURCES ?Groupement fonctionnel de ressources : micro services

Infrastructure as Code : Définir toute une infrastructure dansun seul fichier texte de manière déclarative

Scalabilité : passer à l'échelle son infrastructure en fonctionde différentes métriques.

Page 13: FORMATION DOCKER

3 . 9

POSITIONNEMENT DES CONTENEURS DANSL'É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

Page 14: FORMATION DOCKER

4 . 1

LES CONTENEURS

Page 15: FORMATION DOCKER

4 . 2

DÉFINITIONLes conteneurs fournissent un environnement isolé sur unsystème hôte, semblable à un chroot sous Linux ou une jailsous BSD, mais en proposant plus de fonctionnalités enmatière d'isolation et de configuration. Ces fonctionnalitéssont dépendantes du système hôte et notamment du kernel.

Page 16: FORMATION DOCKER

4 . 3

LE KERNEL LINUXNamespaces

Cgroups (control groups)

Page 17: FORMATION DOCKER

4 . 4

LES NAMESPACES

Page 18: FORMATION DOCKER

4 . 5

MOUNT NAMESPACES ( LINUX 2.4.19)Permet de créer un arbre des points de montageindépendants de celui du système hôte.

Page 19: FORMATION DOCKER

4 . 6

UTS NAMESPACES (LINUX 2.6.19)Unix Time Sharing : Permet à un conteneur de disposer deson propre nom de domaine et d’identité NIS sur laquellecertains protocoles tel que LDAP peuvent se baser.

Page 20: FORMATION DOCKER

4 . 7

IPC NAMESPACES (LINUX 2.6.19)Inter Process Communication : Permet d’isoler les bus decommunication entre les processus d’un conteneur.

Page 21: FORMATION DOCKER

4 . 8

PID NAMESPACES (LINUX 2.6.24)Isole l’arbre d’exécution des processus et permet donc àchaque conteneur de disposer de son propre processusmaître (PID 0) qui pourra ensuite exécuter et managerd'autres processus avec des droits illimités tout en étant unprocessus restreint au sein du système hôte.

Page 22: FORMATION DOCKER

4 . 9

USER NAMESPACES (LINUX 2.6.23-3.8)Permet l’isolation des utilisateurs et des groupes au sein d’unconteneur. Cela permet notamment de gérer des utilisateurstels que l’UID 0 et GID 0, le root qui aurait des permissionsabsolues au sein d’un namespace mais pas au sein dusystème hôte.

Page 23: FORMATION DOCKER

4 . 10

NETWORK NAMESPACES (LINUX 2.6.29)Permet l’isolation des ressources associées au réseau,chaque namespace dispose de ses propres cartes réseaux,plan IP, table de routage, etc.

Page 24: FORMATION DOCKER

4 . 11

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

Page 25: FORMATION DOCKER

4 . 12

CGROUPS : LIMITATION DE RESSOURCESLimitation des ressources : des groupes peuvent être mis enplace afin de ne pas dépasser une limite de mémoire.

Page 26: FORMATION DOCKER

4 . 13

CGROUPS : PRIORISATIONPriorisation : certains groupes peuvent obtenir une plusgrande part de ressources processeur ou de bande passanted'entrée-sortie.

Page 27: FORMATION DOCKER

4 . 14

CGROUPS : COMPTABILITÉComptabilité : permet de mesurer la quantité de ressourcesconsommées par certains systèmes, en vue de leurfacturation par exemple.

Page 28: FORMATION DOCKER

4 . 15

CGROUPS : ISOLATIONIsolation : séparation par espace de nommage pour lesgroupes, afin qu'ils ne puissent pas voir les processus desautres, leurs connexions réseaux ou leurs fichiers.

Page 29: FORMATION DOCKER

4 . 16

CGROUPS : CONTRÔLEContrôle : figer les groupes ou créer un point de sauvegardeet redémarrer.

Page 30: FORMATION DOCKER

4 . 17

DEUX PHILOSOPHIES DE CONTENEURSSysteme : simule une séquence de boot complète avec un initprocess ainsi que plusieurs processus (LXC, OpenVZ).Process : un conteneur exécute un ou plusieurs processusdirectement, en fonction de l'application conteneurisée(Docker, Rkt).

Page 31: FORMATION DOCKER

4 . 18

ENCORE PLUS “CLOUD” QU’UNE INSTANCEPartage du kernel

Un seul processus par conteneur

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

Le turnover des conteneurs est élevé : orchestration

Page 32: FORMATION DOCKER

4 . 19

CONTAINER RUNTIMEDocker

Rkt

LXC

Page 33: FORMATION DOCKER

4 . 20

LXCConteneur système

Utilise la liblxc

Virtualisation d'un système complet (boot)

Page 34: FORMATION DOCKER

4 . 21

DOCKERDéveloppé par dotCloud et open sourcé en mars 2013

Fonctionne en mode daemon : difficulté d'intégration avecles init-process

Utilisait la liblxc

Utilise désormais la libcontainer

Page 35: FORMATION DOCKER

4 . 22

ROCKET (RKT)Se prononce “rock-it”

Développé par CoreOS

Pas de daemon : intégration avec systemd

Utilise systemd-nspawn et propose maintenant d'autressolutions (eg. KVM)

Adresse certains problèmes de sécurité inhérents à Docker

Page 36: FORMATION DOCKER

4 . 23

LES CONTENEURS: CONCLUSIONFonctionnalités offertes par le Kernel

Les conteneurs engine fournissent des interfacesd'abstraction

Plusieurs types de conteneurs pour différents besoins

Page 37: FORMATION DOCKER

5 . 1

LES CONCEPTS

Page 38: FORMATION DOCKER

5 . 2

UN ENSEMBLE DE CONCEPTS ET DECOMPOSANTSLayers

Stockage

Volumes

Réseau

Publication de ports

Links

Page 39: FORMATION DOCKER

5 . 3

LAYERSLes conteneurs et leurs images sont décomposés en couches(layers)

Les layers peuvent être réutilisés entre différents conteneurs

Gestion optimisée de l'espace disque.

Page 40: FORMATION DOCKER

5 . 4

LAYERS : UNE IMAGE

Une image se decompose en layers

Page 41: FORMATION DOCKER

5 . 5

LAYERS : UN CONTENEUR

Une conteneur = une image + un layer r/w

Page 42: FORMATION DOCKER

5 . 6

LAYERS : PLUSIEURS CONTENEURS

Une image, plusieurs conteneurs

Page 43: FORMATION DOCKER

5 . 7

LAYERS : RÉPÉTITION DES LAYERS

Les layers sont indépendants de l'image

Page 44: FORMATION DOCKER

5 . 8

STOCKAGEImages Docker, données des conteneurs, volumes

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

Page 45: FORMATION DOCKER

5 . 9

STOCKAGE : AUFSA unification filesystem

Stable : performance écriture moyenne

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

Page 46: FORMATION DOCKER

5 . 10

STOCKAGE : DEVICE MAPPERBasé sur LVM

Thin Provisionning et snapshot

Intégré dans le Kernel Linux (mainline)

Stable : performance écriture moyenne

Page 47: FORMATION DOCKER

5 . 11

STOCKAGE : OVERLAYFSSuccesseur de AUFS

Performances accrues

Relativement stable mais moins éprouvé que AUFS ou DeviceMapper

Page 48: FORMATION DOCKER

5 . 12

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

Page 49: FORMATION DOCKER

5 . 13

VOLUMESAssurent une persistance des données

Indépendance du volume par rapport au conteneur et auxlayers

Deux types de volumes :Conteneur : Les données sont stockées dans ce que l'onappelle un data conteneurHôte : Montage d'un dossier de l'hôte docker dans leconteneur

Partage de volumes entre plusieurs conteneurs

Page 50: FORMATION DOCKER

5 . 14

VOLUMES : EXEMPLE

Un volume monté sur deux conteneurs

Page 51: FORMATION DOCKER

5 . 15

VOLUMES : PLUGINSPermettre le partage de volumes entre differents hôtes

Fonctionnalité avancées : snapshot, migration,restauration

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

Page 52: FORMATION DOCKER

5 . 16

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

Page 53: FORMATION DOCKER

5 . 17

RÉSEAU : BRIDGE

Page 54: FORMATION DOCKER

5 . 18

RÉSEAU : HOST

Page 55: FORMATION DOCKER

5 . 19

RÉSEAU : NONEExplicite

Page 56: FORMATION DOCKER

5 . 20

RÉSEAU : LES ÉVOLUTIONSRefactorisation des composants réseau (libnetwork)

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

Quelques exemples d'overlay :Flannel : UDP et VXLANWeaves : UDP

Page 57: FORMATION DOCKER

5 . 21

RÉSEAU : MULTIHOST OVERLAY

Page 58: FORMATION DOCKER

5 . 22

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

Les conteneurs ne sont pas accessible depuis l'extérieur

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

L'hôte sert de proxy au service

Page 59: FORMATION DOCKER

5 . 23

PUBLICATION DE PORTS

Page 60: FORMATION DOCKER

5 . 24

LINKSLes conteneurs d'un même réseau peuvent communiquer viaIP

Les liens permettent de lier deux conteneurs par nom

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

Remplacés par les discovery services

Page 61: FORMATION DOCKER

5 . 25

LES CONCEPTS: CONCLUSIONLes composants de Docker sont modulaires

Nombreuses possibilités offertes par défaut.

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

Page 62: FORMATION DOCKER

6 . 1

BUILD, SHIP AND RUN !

Page 63: FORMATION DOCKER

6 . 2

BUILD

Page 64: FORMATION DOCKER

6 . 3

LE CONTENEUR ET SON IMAGEFlexibilité et élasticité

Format standard de facto

Instanciation illimitée

Page 65: FORMATION DOCKER

6 . 4

CONSTRUCTION D'UNE IMAGEPossibilité de construire son image à la main (long et sourced'erreurs)

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

Utilisation de Dockerfile afin de garantir l'idempotence desimages

Page 66: FORMATION DOCKER

6 . 5

DOCKERFILESuite d'instruction qui définit une image

Permet de vérifier le contenu d'une image

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

Page 67: FORMATION DOCKER

6 . 6

DOCKERFILE : PRINCIPALES INSTRUCTIONSFROM : 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 unique lancée parle conteneur

Page 68: FORMATION DOCKER

6 . 7

DOCKERFILE : BEST PRACTICESBien choisir sa baseimage

Chaque commande Dockerfile génère un nouveaulayer

Comptez vos layers !

Page 69: FORMATION DOCKER

6 . 8

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"]

Page 70: FORMATION DOCKER

6 . 9

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"]

Page 71: FORMATION DOCKER

6 . 10

DOCKERFILE : DOCKERHUBBuild automatisée d'images Docker

Intégration GitHub / DockerHub

Plateforme de stockage et de distribution d'imagesDocker

Page 72: FORMATION DOCKER

6 . 11

SHIP

Page 73: FORMATION DOCKER

6 . 12

SHIP : LES CONTENEURS SONT MANIPULABLESSauvegarder un conteneur:

docker commit mon-conteneur backup/mon-conteneur

docker run -it backup/mon-conteneur

Exporter un conteneur:

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

Importer un conteneur:

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

Page 74: FORMATION DOCKER

6 . 13

SHIP : DOCKER REGISTRYDockerHub n’est qu’au Docker registry ce que GitHub est àgit

Pull and Push

Image officielle : registry

Page 75: FORMATION DOCKER

6 . 14

RUN

Page 76: FORMATION DOCKER

6 . 15

RUN : LANCER UN CONTENEURdocker run

-d (detach)

-i (interactive)

-t (pseudo tty)

Page 77: FORMATION DOCKER

6 . 16

RUN : BEAUCOUP D’OPTIONS...-v /directory/host:/directory/container

-p portHost:portContainer

-P-e “VARIABLE=valeur”

–restart=always–name=mon-conteneur

Page 78: FORMATION DOCKER

6 . 17

RUN : ...DONT CERTAINES UN PEUDANGEREUSES

–privileged (Accès à tous les devices)

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

–net=host (Accès à la stack IP del’host)

Page 79: FORMATION DOCKER

6 . 18

RUN : SE “CONNECTER” À UN CONTENEURdocker exec

docker attach

Page 80: FORMATION DOCKER

6 . 19

RUN : DÉTRUIRE UN CONTENEURdocker kill (SIGKILL)

docker stop (SIGTERM puisSIGKILL)

docker rm (détruit complètement)

Page 81: FORMATION DOCKER

6 . 20

BUILD, SHIP AND RUN : CONCLUSIONSÉcosystème de gestion d'images

Construction automatisée d'images

Contrôle au niveau conteneurs

Page 82: FORMATION DOCKER

7 . 1

ÉCOSYSTÈME DOCKER

Page 83: FORMATION DOCKER

7 . 2

DOCKER INC.Docker Inc != Docker Project

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

Ces projets restent OpenSource et les contributions sontpossibles

Page 84: FORMATION DOCKER

7 . 3

OCICréé sous la Linux Fondation

But : Créer des standards OpenSource concernant la manièrede "runner" et le format des conteneurs

Non lié à des produits commerciaux

Non lié à des orchestrateurs ou des clients particuliers

runC a été donné par Docker à l'OCI comme base pour leurstravaux

Page 85: FORMATION DOCKER

7 . 4

LES AUTRES PRODUITS DOCKER

Page 86: FORMATION DOCKER

7 . 5

DOCKER-COMPOSEConcept de stack

Infrastructure as acode

Scalabilité

Page 87: FORMATION DOCKER

7 . 6

DOCKER-COMPOSEdocker-compose.yml

nginx: image: vsense/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"

Page 88: FORMATION DOCKER

7 . 7

DOCKER-MACHINE"Metal" as a Service

Provisionne des hôtes Docker

Abstraction du Cloud Provider

Page 89: FORMATION DOCKER

7 . 8

DOCKER SWARMClustering : Mutualisation d'hôtes Docker

Orchestration : placement intelligent des conteneurs au seindu cluster

Page 90: FORMATION DOCKER

AUTOUR DE DOCKERPlugins : étendre les fonctionnalités notamment réseau etvolumes

Systèmes de gestion de conteneurs(COE)

Docker as a Service :Docker CloudTutum

Page 91: FORMATION DOCKER

7 . 9

Page 92: FORMATION DOCKER

7 . 10

ÉCOSYSTÈME DOCKER : CONCLUSIONLe projet Docker est Open Source et n'appartient plus aDocker

Des outils permettent d'étendre les fonctionnalités de Docker

Docker Inc. construit des offres commerciales autour deDocker

Page 93: FORMATION DOCKER

8 . 1

DOCKER HOSTS

Page 94: FORMATION DOCKER

8 . 2

LES DISTRIBUTIONS TRADITIONNELLESDebian, CentOS, Ubuntu

Supportent tous Docker

Paquets DEB et RPMdisponibles

Page 95: FORMATION DOCKER

8 . 3

UN PEU "TOO MUCH" NON ?Paquets inutiles ou out of date

Services par défaut/inutiles alourdissent lesdistributions

Cycle de release figé

Page 96: FORMATION DOCKER

8 . 4

OS ORIENTÉS CONTENEURSFaire tourner un conteneur engine

Optimisé pour les conteneurs : pas de services superflus

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

Sécurité accrue de part le minimalisme

Page 97: FORMATION DOCKER

8 . 5

OS ORIENTÉS CONTENEURS : EXEMPLESCoreOS (CoreOS)

Atomic (Red Hat)

RancherOS (Rancher)

Photon (VMware)

Ubuntu Snappy Core(Ubuntu)

Page 98: FORMATION DOCKER

8 . 6

COREOS : PHILOSOPHIETrois "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

Page 99: FORMATION DOCKER

COREOS : FONCTIONNALITÉS ORIENTÉESCONTENEURS

Page 100: FORMATION DOCKER

8 . 7

Inclus :DockerRktEtcd (base de données clé/valeur)Fleet (système d'init distribué)Flannel (overlay network)Kubernetes Kubelet

Permet nativement d'avoir un clustercomplet

Stable et éprouvé en production

Idéal pour faire tourner Kubernetes (Tectonic)

Page 101: FORMATION DOCKER

8 . 8

COREOS : ETCDSystème de stockage simple : clé =valeur

Hautement disponible (quorum)

Accessible via API

Page 102: FORMATION DOCKER

8 . 9

COREOS : FLEETSystème d'init distribué basé sur systemd

Orchestration de conteneurs entre différents hôtessupportant systemd

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

Page 103: FORMATION DOCKER

8 . 10

COREOS : FLANNELCommunication multi-hosts

UDP ou VXLAN

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

Page 104: FORMATION DOCKER

8 . 11

RANCHEROS : PHILOSOPHIEDocker et juste Docker : Docker est le process de PID 1)

Docker in Docker : Daemon User qui tourne dans le DaemonSystem

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

Encore en beta

Page 105: FORMATION DOCKER

8 . 12

FEDORA ATOMIC : PHILOSOPHIEÉquivalent à CoreOS mais basée sur Fedora

Utilise systemd

Update Atomic (incrémentielles pourrollback)

Page 106: FORMATION DOCKER

8 . 13

PROJECT PHOTONDéveloppé par VMware mais Open Source

Optimisé pour vSphere

Supporte Docker, Rkt et Pivotal Garden (Cloud Foundry)

Page 107: FORMATION DOCKER

8 . 14

DOCKER HOSTS : CONCLUSIONRépond à un besoin différent des distributions classiques

Fourni des outils et une logique adaptée aux environnementsfull conteneurs

Sécurité accrue (mise à jour)

Page 108: FORMATION DOCKER

9 . 1

DOCKER EN PRODUCTION

Page 109: FORMATION DOCKER

9 . 2

OÙ DÉPLOYER ?Cloud public:

GCEAWS

Cloud privé:OpenStack

Bare Metal

Page 110: FORMATION DOCKER

9 . 3

COMMENT ?Utilisation de COE (Container OrchestrationEngine)

Utilisation d'infrastructure as code

Utilisation d'un Discovery Service

Page 111: FORMATION DOCKER

9 . 4

CONTAINER ORCHESTRATION ENGINEGestion 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:Etcd/Fleet (CoreOS)Docker SwarmRancherMesos / Kubernetes (K8s)

Page 112: FORMATION DOCKER

9 . 5

INFRASTRUCTURE AS A CODEVersion Control System

Intégration / Déploiement Continue

Outils de templating (Heat, Terraform,Cloudformation)

Page 113: FORMATION DOCKER

9 . 6

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

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

Fournir un endpoint fixe à une application susceptible debouger au sein d'un cluster

Page 114: FORMATION DOCKER

9 . 7

ETCD/FLEET

Distributed key-Value store (KV store)Résilient de par sa construction, l'information estrépliquée et une défaillance du master n'impact pas lesdonnées

Clustering minimaliste d'hôtes supportant systemdPositionnement intelligent des units en fonction desbesoins

Etcd

Fleet

Page 115: FORMATION DOCKER

9 . 8

ETCD/FLEETExemple :

[Unit]Description=Apache-sidekickBindsTo=apache.serviceAfter=apache.service

[Service]ExecStart=/bin/sh -c "while true; do etcdctl set /services/website/apache '{\"host\": \"%H\", \"port\": 80}' --ttl 60; sleep 45;done"ExecStop=/usr/bin/etcdctl rm /services/website/apache

[X-Fleet]MachineOf=apache.service

Page 116: FORMATION DOCKER

9 . 9

CONSULCombinaison de plusieurs services : KV Store, DNS,HTTP

Failure detection

Datacenter aware

Github

Page 117: FORMATION DOCKER

9 . 10

CONSULExemple :

$ 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

Page 118: FORMATION DOCKER

9 . 11

CONSULL'enregistrement des nouveaux conteneurs peut êtreautomatisé

Registrator est un process écoutant le daemon Docker etenregistrant les évènements

Page 119: FORMATION DOCKER

9 . 12

RANCHERPermet de provisionner et mutualiser des hôtes Docker surdiffé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és comparé àMesos ou Kubernetes

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

Page 120: FORMATION DOCKER

9 . 13

APACHE MESOS / MARATHONMesos : Gestion et orchestration de systèmes distribué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é jusque 10000nodes

Page 121: FORMATION DOCKER

9 . 14

KUBERNETES (K8S)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

Page 122: FORMATION DOCKER

9 . 15

QUELQUES AUTRESHashicorp Nomad

Amazon Container Engine

Docker Cloud

Docker UCP (Universal ControlPlane)

Page 123: FORMATION DOCKER

9 . 16

DOCKER EN PRODUCTION : CONCLUSION

Page 124: FORMATION DOCKER

10 . 1

MONITORER UNE INFRASTRUCTURE DOCKER

Page 125: FORMATION DOCKER

10 . 2

QUOI MONITORER ?L'infrastructure

Les conteneurs

Page 126: FORMATION DOCKER

10 . 3

MONITORER SON INFRASTRUCTUREProblématique classique

Monitorer des serveur est une problématique résolu depuis denombreuses années par des outils devenus des standards :

Nagios

Shinken

Centreons

Icinga

Page 127: FORMATION DOCKER

10 . 4

INTÉRÊT ?Un des principes du cloud computing est d'abstraire lescouches basses

Docker accentue cette pratique

Est-ce intéressant de monitorer son infra ?

Page 128: FORMATION DOCKER

10 . 5

Oui bien sûr ;)

Page 129: FORMATION DOCKER

10 . 6

MONITORER SES CONTENEURSMonitorer les services fournis par lesconteneurs

Monitorer l'état d'un cluster

Monitorer un conteneur spécifique

Page 130: FORMATION DOCKER

10 . 7

PROBLÉMATIQUES DES CONTENEURSLes conteneurs sont des boîtes noires

Les conteneurs sont dynamiques

La scalabilité induite par les conteneurs devient unproblème

Page 131: FORMATION DOCKER

10 . 8

MONITORER LES SERVICESLa problématique est différente pour chaque service

Concernant les web services (grande majorité), le temps deréponse du service et la disponibilité du service sont de bonsindicatifs

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

Page 132: FORMATION DOCKER

10 . 9

MONITORER L'ÉTAT D'UN CLUSTERDépends grandement de la technologie employée

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

Page 133: FORMATION DOCKER

10 . 10

MONITORER, OK MAIS DEPUIS OÙ ?Commandes exécutées dans le container

Agents à l'intérieur du conteneur

Agents à l'extérieur du conteneur

Page 134: FORMATION DOCKER

10 . 11

LES OUTILS DE MONITORINGDocker stats

CAdvisor

Datadog

Sysdig

Prometheus

Page 135: FORMATION DOCKER

11 . 1

KUBERNETES : CONCEPTS ET OBJETS

Page 136: FORMATION DOCKER

11 . 2

KUBERNETES (K8S)COE développé par Google, devenu open source en 2014

Utilisé par Google pour la gestion de leurs conteneurs (basésur Borg)

Adapté à tout type d'environnements

Devenu populaire en très peu de temps

Page 137: FORMATION DOCKER

KUBERNETES : CONCEPTS

Page 138: FORMATION DOCKER

11 . 3

PODs

Networking

Volumes

Namespaces

Replication Controllers

Services

Providers : Load Balancer

Deployments / ReplicaSet

Ingress et Ingresscontroller

NetworkPolicy

Page 139: FORMATION DOCKER

11 . 4

KUBERNETES : PODEnsemble logique composé de un ou plusieurs conteneurs

Les conteneurs d'un pod fonctionnent ensemble(instanciation et destruction) et sont orchestrés sur un mêmehôte

Les conteneurs partagent certaines spécifications du POD :La stack IP (network namespace)Inter-process communication (PID namespace)Volumes

C'est la plus petite unité orchestrable dans Kubernetes

Page 140: FORMATION DOCKER

11 . 5

KUBERNETES : PODLes PODs sont définis en YAML comme les fichiersdocker-compose :

apiVersion: v1kind: Podmetadata: name: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80

Page 141: FORMATION DOCKER

11 . 6

KUBERNETES : NETWORKINGOverlay Network nécessaire (idem que ceux utilisables avecDocker) :

Cannal : Flannel + CalicoWeavesOpenShiftOpenContrailRomana

Les conteneurs peuvent communiquer sans NAT

Un nœuds peut accéder aux conteneurs des autres nœudssans NAT

Page 142: FORMATION DOCKER

11 . 7

KUBERNETES : VOLUMESFournir du stockage persistent aux PODs

Fonctionnent de la même façon que les volumes Docker pourles volumes hôte :

EmptyDir ~= volumes dockerHostPath ~= volumes hôte

Support de multiples backend de stockage :GCE : PDAWS : EBSglusterFS / NFSCephiSCSI

Page 143: FORMATION DOCKER

11 . 8

KUBERNETES : VOLUMESOn déclare d'abord le volume et on l'affecte à un service:

apiVersion: v1kind: Podmetadata: name: redisspec: containers: - name: redis image: redis volumeMounts: - name: redis-persistent-storage mountPath: /data/redis volumes: - name: redis-persistent-storage emptyDir: {}

Page 144: FORMATION DOCKER

11 . 9

KUBERNETES : NAMESPACESFournissent une séparation logique des ressources parexemple :

Par utilisateursPar projet / applicationsAutres...

Les objets existent uniquement au sein d'un namespacesdonné

Évitent la collision de nom d'objets

Page 145: FORMATION DOCKER

11 . 10

KUBERNETES : LABELSSystème de clé/valeur

Organiser les différents objets de Kubernetes (PODs, RC,Services, etc.) d'une manière cohérente qui reflète lastructure de l'application

Corréler des éléments de Kubernetes : par exemple unservice vers des PODs

Page 146: FORMATION DOCKER

11 . 11

KUBERNETES : LABELSExemple de label :

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

Page 147: FORMATION DOCKER

11 . 12

KUBERNETES : REPLICATION CONTROLLERSPermet de manager les PODs de manière homogène (versionde PODs, nombres, etc.)

Gère la durée de vie des PODs : création et destruction

Assure qu'un nombre minimum de PODs est présent àl'instant T sur l'infrastructure K8s (scaling)

Page 148: FORMATION DOCKER

11 . 13

KUBERNETES : REPLICATION CONTROLLERSapiVersion: v1kind: ReplicationControllermetadata: name: nginx-controllerspec: replicas: 2 selector: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80

Page 149: FORMATION DOCKER

11 . 14

KUBERNETES : SERVICESAbstraction des PODs et RCs, sous forme d'une VIP deservice

Rendre un ensemble de PODs accessibles depuis l'extérieur

Load Balancing entre les PODs d'un même service

Page 150: FORMATION DOCKER

11 . 15

KUBERNETES : SERVICESLoad Balancing : intégration avec des cloud provider :

AWS ELBGCE

Node Port forwarding : limitations

ClusterIP : IP dans le réseau privé Kubernetes (VIP)

IP Externes : le routage de l'IP publique vers le cluster estmanuel

Page 151: FORMATION DOCKER

11 . 16

KUBERNETES : SERVICESExemple de service (on remarque la selection sur lelabel):

{ "kind": "Service", "apiVersion": "v1", "metadata": { "name": "example-service" }, "spec": { "ports": [{ "port": 8765, "targetPort": 9376 }], "selector": { "app": "example" }, "type": "LoadBalancer" }}

Page 152: FORMATION DOCKER

11 . 17

KUBERNETES : DEPLOYMENTS ET REPLICASETSEvolution des ReplicationController

Permet de définir un ensemble de PODs ainsi qu'unReplicaSet

Version, Update et Rollback

Souvent combiné avec un objet de type service

Page 153: FORMATION DOCKER

11 . 18

KUBERNETES : DEPLOYMENTS ET REPLICASETSapiVersion: v1kind: Servicemetadata: name: my-nginx-svc labels: app: nginxspec: type: LoadBalancer ports: - port: 80 selector: app: nginx---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: my-nginxspec: replicas: 3 template: metadata: labels:

Page 154: FORMATION DOCKER

11 . 19

KUBERNETES : INGRESS RESOURCEDéfinition de règles de routage applicative (HTTP/HTTPS)

Traffic load balancing, SSL termination, name based virtualhosting

Définies dans l'API et ensuite implémentées par un IngressController

internet | internet | | | ------------ | [ Ingress ] [ Services ] | --|-----|-- | [ Services ]

Page 155: FORMATION DOCKER

11 . 20

KUBERNETES : INGRESS RESOURCEExemple :

apiVersion: extensions/v1beta1kind: Ingressmetadata: namespace: default name: traefik annotations: kubernetes.io/ingress.class: "traefik"spec: rules: - host: traefik.archifleks.net http: paths: - backend: serviceName: traefik-console servicePort: 8080

Page 156: FORMATION DOCKER

11 . 21

KUBERNETES : INGRESS CONTROLLERRouteur applicatif de bordure (L7 LoadBalancer)

Implémente les Ingress Resources

Plusieurs implémentations :Træfɪknginx

Page 157: FORMATION DOCKER

11 . 22

KUBERNETES : NETWORKPOLICYContrôle la communication entre les PODs au sein d'unnamespace

Pare-feu entre les éléments composant une application :

apiVersion: extensions/v1beta1kind: NetworkPolicymetadata: name: test-network-policy namespace: defaultspec: podSelector: matchLabels: role: db ingress: - from: - namespaceSelector: matchLabels: project: myproject - podSelector: matchLabels: role: frontend ports:

Page 158: FORMATION DOCKER

11 . 23

KUBERNETES : RUN ET ADMINISTRATIONWebUI (Kubernetes Dashboard)

Kubectl (Outil CLI)

Objets: Secret et ConfigMap : paramétrages, plus sécurisésque les variables d'environnements

Page 159: FORMATION DOCKER

11 . 24

KUBERNETES : AUJOURD'HUIVersion 1.4 : stable en production

Solution complète et une des plus utilisées

Éprouvée par Google

S'intègre parfaitement à CoreOS (support de rkt et Tectonic,la solution commerciale) et Atomic

Page 160: FORMATION DOCKER

12 . 1

KUBERNETES : ARCHITECTURE

Page 161: FORMATION DOCKER

12 . 2

KUBERNETES : COMPOSANTSKubernetes est écrit en Go, compilé statiquement.

Un ensemble de binaires sans dépendances

Faciles à conteneuriser et à packager

Peut se déployer uniquement avec des conteneurs sansdépendances d'OS

Page 162: FORMATION DOCKER

12 . 3

KUBERNETES : COMPOSANTS

Page 163: FORMATION DOCKER

kubelet : Service "agent" fonctionnant sur tous les nœuds etassure le fonctionnement des autres serviceskube-apiserver : API server qui permet la configurationd'objet Kubernetes (Pods, Service, Replication Controller,etc.)kube-proxy : Permet le forwarding TCP/UDP et le loadbalancing entre les services et les backend (Pods)kube-scheduler : Implémente les fonctionnalité deschedulingkube-controller-manager : Responsable de l'état du cluster,boucle infinie qui régule l'état du cluster afin d'atteindre unétat désiré(network-policy-controller) : Composant qui implémentel'objet NetworkPolicykubectl : Client qui permet de piloter un cluster Kubernetes

Page 164: FORMATION DOCKER

12 . 4

KUBERNETES : KUBELETService principal de Kubernetes

Permet à Kubernetes de s'auto configurer :Surveille un dossier contenant les manifests (fichiers YAMLdes différents composant de K8s).Applique les modifications si besoin (upgrade, rollback).

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

Dossier de manifest sur un noeud master :

ls /etc/kubernetes/manifests/kube-apiserver.yaml kube-controller-manager.yaml kube-proxy.yaml kube-scheduler.yaml policy-controller.yaml

Page 165: FORMATION DOCKER

12 . 5

KUBERNETES : KUBELETExemple du manifest kube-proxy:

apiVersion: v1kind: Podmetadata: name: kube-proxy namespace: kube-system annotations: rkt.alpha.kubernetes.io/stage1-name-override: coreos.com/rkt/stage1-flyspec: hostNetwork: true containers: - name: kube-proxy image: quay.io/coreos/hyperkube:v1.3.6_coreos.0 command: - /hyperkube - proxy - --master=http://127.0.0.1:8080 - --proxy-mode=iptables securityContext: privileged: true volumeMounts:

Page 166: FORMATION DOCKER

12 . 6

KUBERNTES : KUBE-APISERVERLes configuration d'objets (Pods, Service, RC, etc.) se font vial'API server

Un point d'accès à l'état du cluster aux autres composant viaune API REST

Tous les composant sont reliés à l'API server

Page 167: FORMATION DOCKER

12 . 7

KUBERNETES : KUBE-SCHEDULERPlanifie les ressources sur le cluster

En fonction de règles implicites (CPU, RAM, stockagedisponible, etc.)

En fonction de règles explicites (règles d'affinité et anti-affinité, labels, etc.)

Page 168: FORMATION DOCKER

12 . 8

KUBERNETES : KUBE-PROXYResponsable de la publication de services

Utilise iptables

Route les paquets a destination des PODs et réalise le loadbalancing TCP/UDP

Page 169: FORMATION DOCKER

12 . 9

KUBERNETES : KUBE-CONTROLLER-MANAGERBoucle infinie qui contrôle l'état d'un cluster

Effectue des opérations pour atteindre un état donné

De base dans Kubernetes : replication controller, endpointscontroller, namespace controller et serviceaccountscontroller

Page 170: FORMATION DOCKER

12 . 10

KUBERNETES : NETWORK-POLICY-CONTROLLERImplémente l'objet NetworkPolicy

Contrôle la communication entre les PODs

Externe à Kubernetes et implémenté par la solution deNetworking choisie :

OpenShiftOpenContrailRomanaCalico

Page 171: FORMATION DOCKER

12 . 11

KUBERNETES : CONCLUSION

Page 172: FORMATION DOCKER

13 . 1

OPENSHIFT : INTRODUCTION

Page 173: FORMATION DOCKER

13 . 2

OPENSHIFTSolution 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

Page 174: FORMATION DOCKER

13 . 3

OPENSHIFT VS KUBERNETES : DIFFÉRENCES ETAJOUTS

Pas d'Ingress : Router

Build et Images Stream : Création d'images et pipeline deCI/CD

Templates : Permet de definir et templatiser facilement unensemble d'Objet OpenShift

OpenShift SDN ou Nuage Network pour le réseau

Page 175: FORMATION DOCKER

13 . 4

OPENSHIFT : ROUTERQuasiment identique à Ingress mais implémentés avantKubernetes

Fournissent les même fonctionnalités

Deux implementations :HAProxyF5 Big IP

Page 176: FORMATION DOCKER

13 . 5

OPENSHIFT : BUILDPermet de construire et reproduire des images d'application

Docker builds : via Dockerfile

Source-to-Image (S2I) builds : système de build propre àOpenShift qui produit une image Docker d'une applicationdepuis les source

Pipeline builds : via Jenkins

Page 177: FORMATION DOCKER

13 . 6

OPENSHIFT : IMAGE STREAMSimilaires à un dépôt DockerHub

Rassemble des images similaires identifiées par destags

Permet de garder un historique des différentes versions

Page 178: FORMATION DOCKER

13 . 7

OPENSHIFT : CONCLUSION

Page 179: FORMATION DOCKER

14 . 1

CONCLUSION