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.
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 :
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…
Aller plus loin
- Projet CBSD (271 clics)
- ezjail (112 clics)
- iocage (107 clics)
- Dirver bhyve pour la libvirt (96 clics)
# Debian GNU/kFreeBSD Wheezy dans une jail FreeBSD
Posté par Sytoka Modon (site web personnel) . Évalué à 6.
Ça viens de tomber sur mon flux RSS planet libre : http://maniatux.fr/index.php?article490/debian-wheezy-kfreebsd-dans-une-jail-freebsd10
[^] # Re: Debian GNU/kFreeBSD Wheezy dans une jail FreeBSD
Posté par David Demelier (site web personnel) . Évalué à 4.
Oui c'est basé sur un billet plus vieux http://www.demelierdavid.fr/index.php/debian-dans-une-jail-freebsd/
git is great because linus did it, mercurial is better because he didn't
[^] # Re: Debian GNU/kFreeBSD Wheezy dans une jail FreeBSD
Posté par MTux . Évalué à 7.
En effet on trouve des howto depuis 2011 voire même avant, mais même les plus récents ne sont pas à jour notamment pour le point de montage de tmpfs et la bidouille à faire sur le /etc/passwd pour que la jail accepte de démarrer. Donc j'ai bataillé un peu pour arriver à faire fonctionner le tout et rédiger l'article :)
# Des retours sur Bhyve ?
Posté par MTux . Évalué à 5.
Bhyve est là depuis FreeBSD 10 mais je n'ai encore vu aucun retour d'expérience. Quelqu'un l'a déjà testé ?
Moi je peux pas, mon serveur @home n'est pas compatible VT-x.
# Merci de continuer ce genre de dépêche.
Posté par Kwiknclean . Évalué à 4. Dernière modification le 02 juillet 2014 à 17:04.
Sympa de nous tenir informé de la virtu côté BSD, continuez comme ça.
J'aime beaucoup les jails notamment avec ezjail que je trouve bien,bien plus mature que LxC, bien qu'il manque quand même quelques fonctionnalités je trouve (notamment sur la gestion de la RAM, du CPU … qu'il n'est pas possible de définir je crois).
Avec l'intégration casi native de ZFS on "/root_fs" ça rend simplement les machines et la data hypermodulable.
Cela fait pas mal de temps que je me tate à dégager ma Ubuntu Server vers une FreeBSD Jail/ZFS … je ne sais pas ce qui me retient …
[^] # Re: Merci de continuer ce genre de dépêche.
Posté par Bapt (site web personnel) . Évalué à 3.
cpuset te permet de gérer les cpu dans les jails et rctl de gérer les autres ressources.
# ezjail ancêtre ?
Posté par Joff54 . Évalué à 2.
Serait-il possible de savoir pourquoi ezjail est qualifié d'ancêtre ?
Cet outil est toujours fonctionnel et très largement utilisé.
iocage n'est pas dans les ports et CBSD peut être considéré comme 'plus lourd' que ezjail.
Sinon, y'a qjail (que je ne connais que de nom) pour la gestion des jails.
[^] # Re: ezjail ancêtre ?
Posté par Benoît Sibaud (site web personnel) . Évalué à 5.
Ancêtre, ça ne veut pas dire dépassé ou disparu, mais « ce qui a précédé quelque chose d’autre dans l’histoire » pour citer Wiktionary.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.