Slide 1

Slide 1 text

LES CONTENEURS SOUS LINUX LES CONTENEURS SOUS LINUX UN ÉTAT DE L'ART UN ÉTAT DE L'ART Grégory Colpart & Jérémy Lecour – VVT 2018

Slide 2

Slide 2 text

VISION SUBJECTIVE VISION SUBJECTIVE

Slide 3

Slide 3 text

$ who Jérémy Lecour Grégory Colpart $ whois Evolix EVOLIX-AS : AS 197696 $ man Evolix Open Source managed hosting provider $ uptime up 14 years, 20 users $ whereis Evolix /fr/Marseille, /fr/Aix, /fr/Paris, /ca/Montréal $ top Linux/BSD servers: 800, customers: 120

Slide 4

Slide 4 text

Infogérance / Hébergement dédié et cloud / Conseil et Formation Sysadmins à Marseille et Montréal = 24/7 Linux, infra web, HA, virtualisation, conteneurs, Ansible Clients : agences web, SaaS, médias

Slide 5

Slide 5 text

CONTEXTE / HISTORIQUE CONTEXTE / HISTORIQUE

Slide 6

Slide 6 text

VIRTUALISATION VIRTUALISATION VMWare, KVM, Xen, Virtualbox… émulation du matériel indépendance de l'OS virtualisé para-virtualisation

Slide 7

Slide 7 text

ISOLATION DE PROCESSUS ISOLATION DE PROCESSUS enfermer le processus dans une prison (chroot) accès limité au lesystem technique ancienne OS/noyau homogène

Slide 8

Slide 8 text

CONTENEURS CONTENEURS utilisent les "namespaces" partitionnement des ressources du Kernel

Slide 9

Slide 9 text

CARACTÉRISTIQUES ET TECHNOLOGIES CARACTÉRISTIQUES ET TECHNOLOGIES

Slide 10

Slide 10 text

RÉSEAU RÉSEAU NAT ou bridge partage avec l'hôte redirection de ports

Slide 11

Slide 11 text

STOCKAGE STOCKAGE montages classiques accès au lesystem de l'hôte

Slide 12

Slide 12 text

CGROUPS CGROUPS limites de ressources priorisation mesure d'usage contrôle d'exécution

Slide 13

Slide 13 text

CONTENEURS PRIVILÉGIÉS, OU NON CONTENEURS PRIVILÉGIÉS, OU NON privilégié : accès total non privilégié : accès limité

Slide 14

Slide 14 text

TYPES DE CONTENEURS TYPES DE CONTENEURS système : init et arbre de processus applicatif : un seul processus

Slide 15

Slide 15 text

LXC LXC LinuX Container utilise les cgroups et namespaces très facile à manipuler

Slide 16

Slide 16 text

CRÉATION D'UN CONTENEUR CRÉATION D'UN CONTENEUR # apt-get install lxc # lxc-create --template download --name foo Setting up the GPG keyring Downloading the image index […] Distribution: debian Release: stretch Architecture: amd64 Downloading the image index Downloading the rootfs Downloading the metadata The image cache is now ready Unpacking the rootfs --- You just created an Debian stretch amd64 (20180611_05:25) container. To enable SSH, run: apt install openssh-server No default root or user password are set by LXC.

Slide 17

Slide 17 text

LISTER, DÉMARRER, S'ATTACHER À UN CONTENEUR LISTER, DÉMARRER, S'ATTACHER À UN CONTENEUR # lxc-ls foo # lxc-start --name foo # lxc-info --name foo # lxc-attach --name foo

Slide 18

Slide 18 text

UNE VRAIE CONSOLE, SI BESOIN UNE VRAIE CONSOLE, SI BESOIN # lxc-console --name foo Connected to tty 1 Type to exit the console, to enter Ctrl+a itself Debian GNU/Linux buster/sid foo pts/0 foo login:

Slide 19

Slide 19 text

UTILISATION DE SNAPSHOTS UTILISATION DE SNAPSHOTS # lxc-stop --name foo # lxc-snapshot --name foo # du -sch /var/lib/lxc/foo/snaps/snap0/ 354M /var/lib/lxc/foo/snaps/snap0/ # lxc-snapshot --name foo --list snap0 (/var/lib/lxc/foo/snaps) 2018:06:12 03:24:48 snap1 (/var/lib/lxc/foo/snaps) 2018:06:12 03:26:24 # lxc-snapshot --name foo --restore snap1

Slide 20

Slide 20 text

LIMITER LES RESSOURCES ALLOUÉES (À CHAUD) LIMITER LES RESSOURCES ALLOUÉES (À CHAUD) # lxc-cgroup --name foo cpuset.cpus 0 # lxc-cgroup --name foo memory.limit_in_bytes 4G

Slide 21

Slide 21 text

CHACUN SES PROCESSUS CHACUN SES PROCESSUS # ps auwx root 1 […] /sbin/init root 5310 […] /sbin/init root 2658 […] /lib/systemd/systemd-journald root 389 […] /lib/systemd/systemd-journald root 1039 […] /lib/systemd/systemd-logind root 2704 […] /lib/systemd/systemd-logind systemd+ 2664 […] /lib/systemd/systemd-networkd systemd+ 2712 […] /lib/systemd/systemd-resolved systemd+ 719 […] /lib/systemd/systemd-timesyncd root 420 […] /lib/systemd/systemd-udevd message+ 1045 […] /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile message+ 2698 […] /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile

Slide 22

Slide 22 text

STOCKAGE STOCKAGE dir – stockage au sein d'un dossier classique lvm – un volume logique par conteneur btrfs, zfs – exploite les fonctionnalités natives loop – une partition dédiée rbd – un block-device Ceph

Slide 23

Slide 23 text

LXD LXD s'appuie sur LXC (liblxc) simpli e l'interface et les outils fonctionnalités plus avancées

Slide 24

Slide 24 text

FONCTIONNALITÉS MARQUANTES FONCTIONNALITÉS MARQUANTES Démon en Go avec API REST Sécurisé par défaut permet une gestion de cluster https://linuxcontainers.org/lxd/try-it/

Slide 25

Slide 25 text

DÉMO LXD DÉMO LXD # lxc list +------+---------+-----------------------+----------------------------------------------+ | NAME | STATE | IPV4 | IPV6 +------+---------+-----------------------+----------------------------------------------+ | toto | RUNNING | 10.219.150.156 (eth0) | 2001:470:b368:1070:216:3eff:fe96:da14 (eth0) +------+---------+-----------------------+----------------------------------------------+ # free -m total used free shared buff/cache available Mem: 256 26 70 189 158 229 # lxc config set toto limits.memory 128MB # lxc exec toto -- free -m total used free shared buff/cache available Mem: 128 5 89 189 33 122

Slide 26

Slide 26 text

DOCKER DOCKER Initialement basé sur LXC Orienté conteneurs applicatifs fonctionnalités beaucoup plus avancées

Slide 27

Slide 27 text

FONCTIONNALITÉS MARQUANTES FONCTIONNALITÉS MARQUANTES Démon en Go avec API REST Gestion des images

Slide 28

Slide 28 text

GESTION DES IMAGES GESTION DES IMAGES Docker le registry / Dockerhub Orchestration

Slide 29

Slide 29 text

DOCKERFILE DOCKERFILE FROM debian:stretch MAINTAINER Evolix ENV DEBIAN_FRONTEND noninteractive RUN apt-get update \ && apt-get install -y --no-install-recommends apache2 \ && rm -rf /var/lib/apt/lists/* ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Slide 30

Slide 30 text

# docker run debian:stretch Unable to find image 'debian:stretch' locally stretch: Pulling from library/debian cc1a78bfd46b: Pull complete Digest: sha256:de3eac... Status: Downloaded newer image for debian:stretch # docker images REPOSITORY TAG IMAGE ID CREATED SIZE debian stretch 8626492fecd3 7 weeks ago 101 MB # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f302ad884767 debian:stretch "bash" 5 minutes ago Exited (0) 5 minutes ago quirky_l

Slide 31

Slide 31 text

DOCKERS DOCKERS docker compose Orchestration avec Swarm / Kubernetes K8S… futur standard ?

Slide 32

Slide 32 text

SURCOUCHES SURCOUCHES

Slide 33

Slide 33 text

LIBVIRT LIBVIRT démon de gestion d'hyperviseurs KVM, Xen, VMWare, QEMU, LXC… nombreux bindings (Python, Ruby, Perl…) interfaces graphiques ou CLI

Slide 34

Slide 34 text

VAGRANT VAGRANT automate de gestion de VM VirtualBox, VMWare, LXC, libvirt… orienté "développeur" facilite le provisionnement (Ansible…)

Slide 35

Slide 35 text

SÉCURITÉ SÉCURITÉ séparation imparfaite garder le contrôle des images limiter les privilèges au maximum

Slide 36

Slide 36 text

AU FINAL, LES CONTENEURS AU FINAL, LES CONTENEURS plus légers, performants, simples que des VM de l'usage très basique à la plateforme complète une histoire ancienne qui continue de s'écrire

Slide 37

Slide 37 text

MERCI MERCI