4.9 KiB
\newpage
Utiliser LXC
Le but de cette première partie est d'appréhender la virtualisation légère au
travers d'un programme, lxc
, qui va mettre en place pour nous un
environnement distinct.
Lancer un conteneur
Avec le paquet LXC que vous avez installé, vous avez également récupéré un
certain nombre de modèles de système (souvent installés dans le dossier
/usr/share/lxc/templates/
).
La méthode la plus simple pour lancer un conteneur LXC est d'utiliser l'un de
ces modèles qui va installer tout un environnement pour vous. On utilise pour
cela la commande lxc-create
:
lxc-create --name toto_first --template ubuntu
Ce modèle va créer un dossier dans /var/lib/lxc/
portant le nom que vous avez
précisé. Ce dossier va contenir la configuration LXC du conteneur (config
),
la table des partitions (fstab
) s'il y a besoin de faire des montages
particuliers et enfin le dossier rootfs
contenant le système en lui-même.
Une fois l'installation terminée, on peut démarrer le conteneur :
lxc-start --name toto_first
LXC va appeler /sbin/init
et démarrer tous les services que l'on peut
s'attendre à trouver dans n'importe quelle machine virtuelle plus classique (la
seule différence réside donc dans le fait que le noyau est partagé avec
l'hôte).
Généralement on lance lxc-start
avec l'option --daemon
, car on ne s'attend
pas à ce que la machine s'arrête lorsque l'on va quitter notre terminal. Dans
ce cas, utiliser la commande lxc-console
pour vous attacher à votre
conteneur. À tout moment, vous pouvez vous détacher de la console (sans que
cela n'affecte l'état du conteneur) en pressant les touches : ^A q
.
Connectez-vous, lancez quelques commandes puis éteignez la machine avec sudo poweroff
dans le conteneur. Vous pouvez aussi lancer la commande lxc-stop --name toto_first
dans un autre terminal, depuis la machine hôte.
Le réseau
Le modèle ubuntu que vous avez utilisé initialise un fichier de configuration sans paramètres pour le réseau. Vous n'avez donc pas d'interface dans le conteneur pour le connecter au réseau.
Un excellent article détaillant les différents types de réseau est accessible à https://blog.flameeyes.eu/2010/09/linux-containers-and-networking.
N'ayant qu'une seule interface physique sur la machine et n'ayant pas accès à la configuration des VLAN de la pièce, il ne nous reste que deux méthodes pour obtenir du réseau dans nos conteneurs : Virtual Ethernet ou MACVLAN. Malheureusement, ces deux méthodes nécessitent de mettre en place un pont Ethernet sur votre machine :
Installation du pont réseau
Bridge interface
Port forwarding
Virtual Ethernet
Virtual Ethernet est la configuration la plus simple. On met en place un pont
sur la machine hôte, puis on crée une interface veth
par conteneur que l'on
veut lancer. On n'oubliera pas d'ajouter ces interfaces au pont.
Voici un extrait de configuration correspondant au paramétrage d'une interface
eth0
pour un conteneur donné :
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
Cette technique a pour inconvénient de laisser au noyau le soin de router les paquets selon leur adresse IP, ce qui peut être lent et coûteux étant donné que la carte est placé en mode de promiscuité.
MACVLAN
Ici, le noyau va orienter les paquets en fonction de leur adresse MAC de destination.
lxc.network.type = macvlan
lxc.network.macvlan.mode = bridge
lxc.network.flags = up
lxc.network.link = br0
Utilisation du conteneur
Redémarrage du conteneur
Installation de InFluxDB et Graphana
Test de l'installation
Rendu
Configuration du conteneur
En plus des modifications que vous avez effectuées durant le TP, modifiez la configuration du conteneur afin qu'il ne puisse pas utiliser plus que 256 MB de RAM et 512 MB de swap.
Limitez ensuite les capabilities(7)
de ce conteneur afin qu'il s'exécute avec
le strict minimum de droits, nécessaire au bon fonctionnement des programmes
installés.
Rendez le fichier config
de ce premier conteneur. N'hésitez pas à laisser
des commentaires justifiant vos éventuels choix.
Questions
-
Quel type de virtualisation réseau avez-vous utilisé ? pourquoi ?
-
Quels sont les autres types de virtualisation réseau existants ? Expliquez en chacun une phrase leurs particularités.
-
Dans quel langage InfluxDB a-t-il était écrit ? Quelle est la particularité des binaires générés par ce langage ?
-
Quels sont les avantages et les inconvénients associés au linkage statique et au linkage dynamique ? (pas forcément que dans le cadre de la virtualisation légère).
-
J'ai utilisé la méthode Virtual Ethernet pour relier mes conteneurs à Internet, via un PAT (
br0
). Quelle(s) règle(s)iptables
devrais-je écrire sur mon hôte afin de permettre l'accès à InfluxDB depuis une autre machine ?