Ça bouge du côté de la virtualisation chez FreeBSD

49
1
juil.
2014
FreeBSD

La gestion de machines virtuelles et de conteneurs met en œuvre de nombreux sous-systèmes (hyperviseur, émulateur, réseau, système de fichier, gestion des ressources, politique de sécurité et haute disponibilité) qu'il faut faire fonctionner ensemble et maintenir.

Par exemple sous FreeBSD, on pourra utiliser jail, bhyve, qemu, vnet, dummynet, hast, zfs, geom, racct, MAC, audit, ipfw, pf, virtio, carp, devd, devfs, pkg…

Pour simplifier cela, il existe un certain nombre de logiciels offrant à l'administrateur une logique uniforme au-dessus de ces divers éléments. C'est le cas d'une certaine façon de Docker sous Linux mais aussi de Proxmox, CloudStack ou plus simplement de la libvirt.

Faisons un petit tour des différents projets qui avancent dans ce sens sous FreeBSD.

Sommaire

La virtualisation sous FreeBSD

Des conteneurs

Les jails sont apparus dans FreeBSD le 28 avril 1999 suite à un commit de Poul-Henning Kamp. Ils étaient initialement utilisés par l'hébergeur servetheweb.com pour gérer différentes configurations d'Apache sur une même machine.

Il s'agit d'un moyen de cloisonner l'exécution de différentes applications au sein d'un même système. On parlera donc de partition, ou de conteneur (container). Il serait par contre abusif de parler de machines virtuelles du fait du partage du noyau. Il est également délicat d'évoquer un mécanisme de sécurité. Car si les jails sont des objets pratiques pour appliquer une politique de sécurité, ils ne la portent pas en eux-mêmes. On parle de chroot sécurisé car ils renforcent la sécurité du chroot et non parce qu'ils améliorent la sécurité du système. C'est toute la nuance entre cloisonner et sécuriser.

Au fil de l'histoire de FreeBSD les jails se sont étoffés avec en particulier une réécriture complète et de nombreux outils satellites tels que vnet qui permet de créer des interfaces réseaux virtuels, racct pour la limitation des ressources.

La configuration des jails est centralisée dans le fichier /etc/jail.conf

     # Valeurs par défaut:
     # utiliser /etc/rc, monter /dev ...
     exec.start = "/bin/sh /etc/rc";
     exec.stop = "/bin/sh /etc/rc.shutdown";
     exec.clean;
     mount.devfs;

     # Il est possible de définir des paramètres dynamiques
     path = "/var/jail/$name";

     # Une jail typique
     foo {
             host.hostname = "foo.com";
             ip4.addr = 10.1.1.1, 10.1.1.2, 10.1.1.3;
     }

     # On surcharge les valeurs par défaut
     bar {
             exec.start = '';
             exec.stop = '';
             path = /;
             mount.nodevfs;
             persist;        // dans cette jail, il n'y a aucun processus
     }


La mise en oeuvre des jails est détaillée dans cette page du Handbook.

Du GNU ou du Linux ou du vieux FreeBSD

Grâce à Debian GNU/kFreeBSD et Gentoo FreeBSD, il est tout à fait possible de déployer un espace utilisateur basé sur la glibc et les outils GNU dans une jail.

Par exemple, pour déployer une jail sous Debian/kFreeBSD, il suffit d'installer le package debootstrap :

pkg install debootstrap
debootstrap wheezy /jails/debian-wheezy

Une autre caractéristique intéressante concernant FreeBSD est l'aspect polymorphique du noyau. En effet celui-ci peut se faire passer pour un noyau Linux ou encore pour un FreeBSD d'une version antérieure. Cela permet toutes les combinaisons de jails possibles, sous Linux, sous FreeBSD 5. C'est fort utile pour virtualiser d'anciens serveurs impossibles à migrer sans l'overhead d'une émulation complète du hardware (FreeBSD 5.5 qui ne connaît pas le PCI-Express par exemple).

De véritables VM

Bhyve est un projet d'hyperviseur de type 1 (comme Xen ou KVM) se basant sur les instructions de virtualisation des processeurs Intel et sur Virtio introduit dans FreeBSD 10.

Fonctionnement de bhyve

Aujourd'hui, il est possible de lancer des machines virtuelles sous FreeBSD (9+), OpenBSD et Linux (Centos, Ubuntu et Debian) et de faire sous certaines conditions du PCI-passthru.

Quelques projets intéressants

Ezjail (l’ancêtre)

Pour gérer des jails, l'outil de référence reste ezjail. Il s'agit d'une collection de scripts facilitant le déploiements de conteneurs.

pkg install ezjail
ezjail-admin install
ezjail-admin create example.com 'em0|10.0.0.2'
ezjail-admin start example.com 
ezjail-admin console example.com

Il gère entre autres zfs, le chiffrement, ainsi que la création de flavor pour déployer rapidement des machines pré-configurées.

iocage

iocage est un tout jeune projet. Il s'agit également d'un script shell. Contrairement à ezjail qui se veut plus exhaustif, il se base exclusivement sur vnet (pile réseau virtuelle), racct (limitation des ressources) et ZFS.

iocage fetch
iocage create -c name=test
iocage list 
iocage limts $uuid vmemoryuse:deny=1g

CBSD

On parle beaucoup de Docker sous Linux depuis quelques temps. Une alternative pour FreeBSD pourrait monter en puissance : CBSD (sous licence BSD donc). Il s'agit là encore principalement de scripts shells, même si la prise en compte de l'aspect cluster (réplication, migration) a donné lieu à du développement en C.

Cette application qui permet de créer et gérer des conteneurs mais propose aussi de nombreuses fonctionnalités comme l'intégration de bhyve ou de qemu.

CBSD prend en charge différents modes de virtualisation et beaucoup de fonctionnalités :

  • déploiement rapide de jails from scratch ;
  • import / export d'images ;
  • clones et migrations (y compris sur des noeuds distants) ;
  • snapshots ;
  • accounting au niveau réseau et ressources ;
  • priorités, limite de ressources, quotas ;
  • réplication distante ;
  • jails avec Xorg ;
  • Bhyve ;
  • réseau virtuel pour les jails (VIMAGE) ;
  • prise en charge des architectures non natives via qemu (arm ou mips64) ;
  • dépôt d'images déjà prêtes.

CBSD propose par ailleurs une interface en mode web pour gérer les VM :

L'interface en mode web

Pilote bhyve pour la libvirt

Enfin pour terminer ce panorama, il est à noter qu'il existe désormais un pilote byhve pour la libvirt. Ce qui vous permettra d'introduire de façon indolore un peu de diversité dans votre parc d'hyperviseurs.

virsh connect bhyve:///

Ceci est bien sûr hautement expérimental. Pour l'heure par exemple, vous ne pourrez configurer qu'un seul réseau et qu'un seul disque pour vos VM. Mais les choses avancent à grands pas…

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.