Je ne vais pas me faire des amis, mais j'ai un problème avec Docker et je vais l'illustrer en le comparant avec ezjail qui permet de gérer les jails sous FreeBSD.
Pour afficher la liste des containers dans Docker :
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c516f8fcbc57 httpd:v5 "/bin/bash" 9 minutes ago Up 2 seconds 80/tcp tender_mirzakhani
Attendez, c'est pas fini ! Cette commande ne va afficher que les containers en cours d'exécution. Si on veut tout :
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c516f8fcbc57 httpd:v5 "/bin/bash" 9 minutes ago Up 22 seconds 80/tcp tender_mirzakhani
974607db9cb7 httpd:v5 "apache2-foreground" 18 minutes ago Exited (0) 8 minutes ago gigantic_engelbart
Ok. Maintenant voyons comment on fait pour lister des containers avec ezjail sous FreeBSD :
ezjail-admin list
STA JID IP Hostname Root Directory
--- ---- --------------- ------------------------------ ------------------------
DR 1 127.0.1.1 jls-web-10 /usr/jails/jls-web-10
1 em0|192.168.0.50
DS N/A 127.0.1.2 jls-mail-01 /usr/jails/jls-mail-01
N/A em0|192.168.0.60
Et pour entrer dans un container avec ezjail :
ezjail-admin console jls-web-10
FreeBSD 10.3-RELEASE (GENERIC) #0 r297264: Fri Mar 25 02:10:02 UTC 2016
root@jls-web-10:~ #
Voilà, une seule commande simple à retenir et pas d'options superflues.
Pourquoi les commandes Docker sont-elles aussi imbuvables ? C'est un problème courrant dans l'environnement des logiciel sous Linux, on ne sait pas faire de choses simples. git est un autre exemple symptomatique, nous sommes obligés d'avoir sous la main une anti-sèche pour ne pas nous tromper dans les commandes.
Docker étant relativement récent, pourquoi ne s'est-il pas inspiré des commandes ezjail, iohyve, iocage ou lxc qui sont beaucoup plus simples et intuitives ?
J'adore FreeNAS parce que c'est du FreeBSD bien exploité (zfs + jails) et mis en forme proprement au travers d'un webui. J'en parle un peu plus dans cet article et vous encourage toujours à mettre votre NAS propriétaire synlogy et compagnie à la décharge pour vous acheter un vrai serveur digne de ce nom.
FreeNAS 9.10 est disponible depuis peu et se base sur FreeBSD 10.3 ce qui nous amène bhyve, l'hyperviseur concurrent à qemu-kvm très prometteur qui nous permet de faire tourner des VM Linux (entre autres) en plus des jails. Même si cette feature est encore considérée comme expérimentale par FreeNAS, elle est tout même documentée.
FreeNAS fournit l'outil iohyve qui s'inspire de iocage et s'appuie fortement sur zfs. iohyve est génial parce qu'il est non seulement simple à utiliser mais en plus très intuitif car on retient rapidement les commandes. Notez que dans FreeNAS 10 bhyve sera présent dans le webui, pour le moment il faut encore y aller à la main ;)
/!\ Avertissement /!\
Il ne faut pas modifier les fichiers système de FreeNAS, car non seulement ils seront écrasés lors de la prochaine mise à jour, mais en plus ils risquent d'interférer avec le webui. Par exemple au lieu de modifier le /etc/rc.conf on va plutôt aller dans la section tunables qui est prévue à cet effet. On installe pas non plus de paquets avec pkg. Toutes les manipulations du paragraphe suivant font appel à des outils déjà présents qui travaillent dans le zpool contenant les données.
Installation d'une VM ubuntu-server-16.04
La première chose à faire est de configurer iohyve, il va créer ses dataset ainsi que le bridge si celui-ci n'existe pas déjà. Notez que la manipulation n'écrase pas vos dataset ou votre zpool, ne vous embêtez pas à en faire un autre. Dans l'exemple suivant, mon zpool est data et mon interface réseau bge1 :
[root@freenas] ~# iohyve setup pool=data kmod=1 net=bge1
Setting up iohyve pool...
On FreeNAS installation.
Checking for symbolic link to /iohyve from /mnt/iohyve...
Symbolic link to /iohyve from /mnt/iohyve successfully created.
Loading kernel modules...
bridge0 is already enabled on this machine...
Setting up correct sysctl value...
net.link.tap.up_on_open: 0 -> 1
Le dataset Firmware sert pour démarrer des guest en UEFI mais nous ne l'utiliserons pas. Si vous voulez en savoir plus, vous pouvez consulter cette page de wiki détaillant l'installation de Windows avec iohyve.
Pour que iohyve et les modules kernel soient chargés au démarrage, on les ajoute dans la section General > Réglages dans le webui de FreeNAS :
On demande à iohyve de télécharger pour nous l'ISO (il est possible de les renommer, ce que je ne fais pas dans l'exemple) :
Les paramètres ont l'air évidents, mais trois d'entre eux méritent un petit complément :
loader=grub-bhyve : Par défaut iohyve ne va pas charger de bios ou uefi dans bhyve donc il doit utiliser un bootloader externe, ici c'est grub2-bhyve.
ram=1G : pour ubuntu, ne pas mettre moins, j'ai essayé avec 256M et j'ai eu ce bug. Une fois l'installation terminée par contre, on peut baisser.
os=d8lvm : je n'ai pas trouvé beaucoup de détails mais cela indique à iohyve le type de système invité. d8lvm correspond à Debian 8 avec stockage lvm (ce que ubuntu propose par défaut). Sans lvm on peut utiliser os=debian.
Maintenant, on ouvre une seconde console (CTRL+ALT+F2) ou une seconde connexion SSH, puis on se connecte à la console de la VM (il n'y a rien pour le moment, c'est normal, elle ne fonctionne pas) :
[root@freenas] ~# iohyve console vm-ubuntu
On revient sur le premier terminal / SSH, puis on lance l'installation de la VM :
On retourne dans votre second terminal et là on voit enfin des choses apparaître :)
On fait une installation normale de Ubuntu avec le réseau qui s'auto configure via DHCP. Lorsque c'est terminé, le reboot risque de ne pas fonctionner, il faut donc le faire à la main :
[root@freenas] ~# iohyve stop vm-ubuntu
Stopping vm-ubuntu...
[root@freenas] ~# iohyve list
Guest VMM? Running rcboot? Description
vm-ubuntu YES NO NO Tue Jul 12 22:38:55 CEST 2016
[root@freenas] ~# iohyve start vm-ubuntu
Starting vm-ubuntu... (Takes 15 seconds for FreeBSD guests)
Et la console confirme que ça fonctionne :)
La VM a même accès au réseau, on peut donc se logguer en SSH !
Conclusion
Encore une fois FreeNAS envoie du lourd et exploite les capacités de FreeBSD. iohyve permet d'utiliser bhyve + zfs tout en étant bien pensé et intuitif, et c'est une qualité rare (regard inquisiteur pointé vers lxd chez Canonical). Il est désormais possible d'avoir des VMs Linux sous FreeNAS ce qui conforte une fois de plus le fait que vous devriez jeter votre NAS propriétaire pour acheter un vrai serveur x86.