Introduction à la virtualisation Sébastien Douche @sdouche https://github.com/sdouche/presentation-virtualisation; 1 / 77
Qui suis je? 39 ans. Pas trés intelligent mais j'aime comprendre. Geek depuis 1984 Fan de Logiciels Libres depuis 1995 CTO chez un éditeur logiciel depuis 2007 Développeur (Python, Go, Dart, Rust) Sysadmin (Linux / BSD) Speaker (Git, Python, Go, organisation, management...) Adore les jeux de sociétés modernes Motard (Honda CBR RR) Aime l'humour noir et les blagues pourries 2 / 77
Objectif de cette soirée 3 / 77
Vous donnez un peu de culture admin et montrez l'utilité des outils de virtualisation pour le développemment 4 / 77
Je ne suis pas un spécialiste de la virtualisation, juste un grand utilisateur 5 / 77
je n'ai rien à vous vendre 6 / 77
Culture 7 / 77
2 anectodes 8 / 77
9 / 77
Déclic 10 / 77
Pattern et anti-pattern 11 / 77
On pense avec des mots 12 / 77
Multiplier les cultures donne une vision plus cohérente 13 / 77
Lean, Agile, Devops sont avant tout une question de culture 14 / 77
Valeur Principe Pratique 15 / 77
Intérets 16 / 77
La virtualisation offre plusieurs opportunités Coté ops : Meilleure utilisation des ressources (serveur, place, électricité, etc) Installation, déploiement et migration facilités Isolation (sécurité, modification locale, etc) Coté dev : Disposer de plusieurs envionnements de développement Tester son code dans un environnent normalisé Simuler la production Éviter le «ça marche chez moi»! 17 / 77
Et surtout, éliminer un goulet d'étranglement et ainsi réduire le temps de cycle (cycle time) 18 / 77
Histoire 19 / 77
Les premiers travaux proviennent du centre scientifique de Cambridge d'ibm pour le développement expérimental de CP/CMS (1967 1972). Il permet de simuler un environnement mono-utilisateur (CMS) par dessus la gestion des VM (VM-CP). Les versions actuelles sont z/os et z/vm. 20 / 77
Vocabulaire 21 / 77
Émulation / virtualisation 22 / 77
Hôte (host) / invité (guest) 23 / 77
Bare-metal 24 / 77
VM (Virtual Machine ou Machine virtuelle) 25 / 77
VE (Virtual Environment ou Environnement) 26 / 77
Techniques 27 / 77
Hyperviseur de type 1 28 / 77
Hyperviseur léger et optimisé pour gérer les accés aux matériels qui tourne en bare-metal 29 / 77
30 / 77
Hyperviseur de type 1 Avantages : OS complet (avec son noyau) OS non modifié isolation complète Inconvénients : lourdeur de mise en oeuvre lourdeur de gestion overhead moyen (peut être fortement réduit) 31 / 77
Hyperviseur de type 2 32 / 77
Hyperviseur qui fonctionne sur un OS et qui émule le matériel 33 / 77
34 / 77
Hyperviseur type 2 Avantages : OS complet (avec son noyau) OS non modifié isolation complète Inconvénients : lourdeur de mise en oeuvre lourdeur de gestion overhead monstreux 35 / 77
Virtualisation (VM) vs Para-virtualisation (PV) Que ce soit en hyperviseur de type 1 ou 2, on peut ajouter des drivers pour indiquer au noyau qu'il est un invité. On parle alors de para-virtualisation. Cela diminue l'overhead et améliore les performances. 36 / 77
Accélération matérielle (HVM, HPV) 37 / 77
Virtualisation assisté par le processeur Intel (2005+) : VT-x VT-d (I/O MMU virtualization) VT-c AMD (2006+) : AMD-V AMD-Vi (I/O MMU virtualization) 38 / 77
conteneur 39 / 77
Permet d'isoler l'exécution des applications dans une VE 40 / 77
41 / 77
Conteneur Avantages : simplicité rapidité de mise en oeuvre grande densité peu d'overhead cache commun (page sharing) meilleur gestion des ressources (cpu. disque...) Inconvénients : un seul noyau nécessite une couche sécurité (SELinux / Apparmor) 42 / 77
Isolation Sous Linux, c'est le service noyau Namespace qui gère l'isolation : PID namespace : isolation des ID de process Net namespace : isolation du réseau IPC namespace : isolation des ressources IPC UTS namespace : isolation des identifiants de nom et de domaine Mount namespace : isolation des points de montage du système 43 / 77
Limitation des ressources Sous Linux, c'est le service noyau Control Groups (cgroups) aui gère la limitation : # root@srv1:/sys/fs/cgroup# ls -1 blkio cpu cpuacct cpuset devices freezer hugetlb memory perf_event 44 / 77
Processus sans privilège Sous Linux, c'est le service noyau capabilities qui gère les droits. 45 / 77
Technologies 46 / 77
QEMU Type : émulateur http://wiki.qemu.org Avantages : Licence Libre mature (2003) project actif Utilisé par VirtualBox, Xen et KVM Émule les architectures IA-32 (x86) / x86-64, MIPS R4000, Sun SPARC sun4m / sun4u, ARM development boards, SH4 SHIX board, PowerPC, ETRAX CRIS, MicroBlaze... KQEMU pour les vieux matériels Inconvénients : trés lent! 47 / 77
Xen Type : hyperviseur de type 1 http://www.xenproject.org Avantages : Licence Libre mature (2003) projet actif géré par la Xen Project Governance projet upstream depuis Linux 3.0 hyperviseur x86, x86_64, Itanium, ARM PV / HVM / Pv-on-HVM distribution AlpineLinux XenServer libéré écosystême riches (2k partenaires certifiés) nombreuses fonctionnalités(live Migration, Save & Restore, sécurité...) Inconvénients : pas dans toutes les distributions Linux / *BSD bien adapté a Red Hat 48 / 77
KVM Type : hyperviseur de type 1 http://www.linux-kvm.org/ Avantages : Licence Libre mature (2007) hyperviseur x86, x86_64, ARM (en dev) projet actif financé par Red Hat projet upstream depuis Linux 2.6.20 ré-intégré dans QEMU maintenu par les distributions Linux / *BSD HVM / Pv-on-HVM utilisé par Red Hat comme offre de virtualisation Inconvénients : pas de ml utilisateur manque de documentation écosytème financé par Red Hat demande un admin Linux plus confirmé pas de PV 49 / 77
VMware vsphere Hypervisor (ESXi) Type : hyperviseur de type 1 http://vmware.com Avantages : gratuit mature (2007) projet actif financé par VMware offre la plus complète (vcenter, NSX...) Inconvénients : licence propriétaire écosysteme propriétaire outillage sous Windows offre complète très cher 50 / 77
Oracle VM VirtualBox Type : hyperviseur de type 2 http://virtualbox.org Avantages : Licence Libre mature (2007) projet actif financé par Oracle IHM / CLI Linux, Windows, Mac OS X, Solaris packages pour toutes les distributions simple d'utilisation Documentation (manuel utilisateur 455 pages, FAQ, ml...) Inconvénients : instabilité occasionnelle performance (http://bit.ly/1h9odf3) 51 / 77
chroot / FreeBSD Jail Type : conteneur Par défaut sur toutes les distributions Linux / BSD Avantages : Licence Libre facilité de mise en oeuvre Inconvénients : ne gère que l'isolation FS 52 / 77
Linux-VServer Type : conteneur http://linux-vserver.org Avantages : Licence Libre maturité (2001) fonctionne à partir du noyau 2.4 sécurité? Inconvénients : demande un noyau Linux patché se synchronise avec les noyaux RHEL QOS basic (ulimit, rlimit...) plus trop utilisé 53 / 77
OpenVZ Type : conteneur http://openvz.org Avantages : Licence Libre mature (2005) Projet très actif (sponsorisé par Parallels) beaucoup de fonctionnalité documenté (quick start de 119 pages) QOS / quota isolation user, process, FS, réseau, device fonctionnalités (snapshot, dump / restore, etc) sécurisé Inconvénients : demande un noyau Linux patché se synchronise avec les noyaux RHEL pas de support des distributions Linux 54 / 77
LXC Type : conteneur http://linuxcontainers.org Avantages : Licence Libre intégré upstream utilise des technos standards bindings python3, ruby, lua and Go Inconvénients : manque d'outillage nécessite Apparmor ou SELinux 55 / 77
Autres : Bochs Solaris Zone DOSEMU VMware Player VMware Workstation VMware Fusion Oracle VM Microsoft Hyper-V Server Microsoft VirtualPC Microsoft Virtual Server Parallels Server Bare Metal Parallels Desktop Parallels Parallels Server IBM z/vm 56 / 77
Formats 57 / 77
Plusieurs format existent : IMG / RAW VDI VHD Qcow2 (standard Logiciel Libre) VMDK (Standard, Fixed, Split2G, Stream Optimized, ESX) Note : Il est plus effiace d'utiliser des partitions LVM / ZFS / BTRFS 58 / 77
OVF 59 / 77
OVF Format normalisé de description d'une VM. Chaque logiciel posséde son namespace (vbx, vmdk...) Malheureusement, il est incomplet. 60 / 77
OVF Exemple :?xml version="1.0"?> <Envelope ovf:version="1.0" xml:lang="en-us" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> <References> <File ovf:id="file1" ovf:href="spv-sysdisk.vmdk" ovf:size="430392832" /> </References> <DiskSection> <Info>List of the virtual disks used in the package</info> <Disk ovf:diskid="sysdisk" ovf:fileref="file1" vbox:uuid="8583a587-88c1-45c3-9365-033899064841" ovf:capacity="16106127360" ovf:populatedsize="430392832"... /> 61 / 77
Le format OVA embarque la VM + le fichier OVF 62 / 77
Sélections d'outils Libres 63 / 77
Petites sélections personnelles : Libvirt (OpenVZ, LXC, KVM, Xen, VMWare) http://libvirt.org ProxMox VE (OpenVZ, KVM) https://www.proxmox.com Docker (LXC) http://docker.io Vagrant (VirtualBox) http://www.vagrantup.com ovirt (KVM, Xen, VirtualBox) http://www.ovirt.org virt-manager (KVM, Xen, LXC) http://virt-manager.org Libguestfs (KVM) http://libguestfs.org virt-tools (KVM) http://virt-tools.org Kimchi (KVM) https://github.com/kimchi-project/kimchi Ganeti (KVM, Xen) https://code.google.com/p/ganeti ConVirt Open Source (KVM, Xen) http://www.convirture.com/products_opensource.php xen-tools (Xen) http://www.xen-tools.org Zentific (Xen) http://www.zentific.com Xen Orchestra (Xen) http://xen-orchestra.com Xen Server (Xen) http://www.xenserver.org 64 / 77
Cloud Computing 65 / 77
Architecture OpenStack Folsom 66 / 77
Principales technologies Libres Cloud : OpenStack http://www.openstack.org Apache CloudStack http://cloudstack.apache.org OpenNebula http://opennebula.org Eucalyptus https://www.eucalyptus.com 67 / 77
Software Configuration Management (SCM) 68 / 77
Les outils SCM sont un gros pas en avant en simplifiant grandement le travail d'administration 69 / 77
Qualités configuration as Code documente parfaitement les changements utilisation d'outils communs avec les dev (outil, langage, etc) langage commun (dev / op) rapidité de déploiement flexible idempotence 70 / 77
Principaux outils Libres CFEngine (C) http://cfengine.com Puppet (Ruby) http://puppetlabs.com Chef (Ruby, Erlang) http://www.getchef.com SaltStack (Python) http://www.saltstack.com Ansible (Python) http://www.ansible.com 71 / 77
Démo 72 / 77
KVM KVM seul qemu-system-x86_64 -nodefaults \ -drive file=debian7.qcow2,if=none,media=disk,id=hd0 \ -device driver=virtio-blk-pci,drive=hd0 \ -boot order=c \ -enable-kvm \ -vga cirrus présentation rapide de virt-manager / virsh manipulation de VM avec libguestfs 73 / 77
VirtualBox présentation rapide de VirtualBox IHM / CLI démo avec une VM format OVF / import OVF + VMDK présentation rapide de Vagrant http://docs.vagrantup.com/v2/ 74 / 77
LXC présentation rapide de LXC (template, commandes) lancement conteneur Ubuntu présentation rapie de Docker http://douche.name/presentation-docker) 75 / 77
Salt démo shell distribué exemple simple de template SLS exemple de modules Salt maison 76 / 77
That's all folks! 77 / 77