Introduction
- LXD est une amélioration de LXC réalisé par Canonical.
- LXD est un cousin de Docker, les deux logiciels reposent sur LXC, l'utilisation est toutefois totalement différente.
- LXD est pré-installé sur les machines Ubuntu 16.04, 32 et 64 bits. Si vous voulez utiliser LXD, utilisez Ubuntu !
- Il ne faut pas utiliser les anciennes commandes "lxc-xxxx" sur un serveur qui utilise lxd. La commande unique "lxc" remplace toutes les anciennes commandes.
Initialisation du serveur LXD
- Installez complètement une Ubuntu 16.04. Pensez à la mettre à jour avec : apt-upgrade
- Eventuellement, lancez : apt-get install lxd
- Lancez la commande : lxd init
- Répondre ensuite aux questions (normalement tout est par défaut) :
- Do you want to configure a new storage pool : YES
- Name of the storage backend to use : DIR
- Would you like LXD to be available over the network : NO
- Do you want to configure the LXD bridge : YES
- Bridge interface name : lxdbr0
- Do you want to setup an IPv4 subnet : YES
- Ipv4 address : 192.168.222.1
- Ipv4 CIDR mask : 24
- First DHCP address : 192.168.222.2
- Last DHCP address : 192.168.222.254
- Max number of DHCP clients : 252
- Do you want to NAT the IPv4 traffic : YES
- Do you want to setup an IPv6 subnet : NO
- NB : Je préfère utiliser le réseau en classe C 192.168.222.0/24 à la place du réseau qui est proposé par LXD 10.0.0.0/24
Commandes de gestion
- NB : LXD utilise le dépôt d'images https://us.lxd.images.canonical.com
Utilisation du dépôt officiel " images: "
- lxc image list images: Liste de toutes les images du dépôt images
- lxc image list images: debian amd64 Liste des images debian en 64 bits
- lxc init images:debian/7 foo Création d'un container "foo" basé sur une image de debian7
- lxc init local:foo_v1 foo Création d'un container "foo" basé sur une image locale foo_v1
Commandes de gestion des containers
- lxc list Voir la liste des containers
- lxc start foo Lancer le container "foo"
- lxc stop foo Arrêter le container "foo"
- lxc info foo Informations sur le container "foo"
- lxc delete foo Effacer le container "foo"
- lxc exec foo -- apt-get update Lance une commande sur "foo"
- lxc exec foo -- /bin/bash Pour avoir la main sur "foo"
Utilisation du dépôt local "local:"
- lxc image list local: Liste de toutes les images locales
- lxc publish foo --alias foo_v1 Création de l'image "foo_v1" à partir du container "foo"
- lxc image export foo_v1 /root/foo_v1 Création d'une archive foo_v1.tar.gz à partir de "foo_v1"
- lxc image import foo_v1.tar.gz --alias foo_v1 Création d'une image "foo_v1" à partir de foo_v1.tar.gz
-
lxc init local:foo_v1 foo Création d'un container "foo" basé sur foo_v1
Options des containers
- lxc config set foo boot.autostart true
- lxc config set foo limits.memory 512MB
- lxc config set foo limits.memory.swap false
- lxc config set foo limits.memory.swap.priority 0
- lxc config set foo limits.memory.enforce soft
Manipulation de fichiers
- lxc file pull foo/etc/passwd /root/
- lxc file push truc.tgz foo/root/
Configuration du Firewall
Dans /etc/rc.local, j'utilise le script suivant :
#!/bin/bash sleep 3 # Nettoyage iptables -t nat -F iptables -t nat -X iptables -t nat -P INPUT ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT # Règle SNAT REP=$(iptables -t nat -L|grep "MASQUERADE") if [ -z "$REP" ] then iptables -t nat -A POSTROUTING -s 192.168.222.0/24 ! -d 192.168.222.0/24 -j MASQUERADE fi # Exemple de règles DNAT iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 80 -j DNAT --to-destination 192.168.222.2:80
Configuration du réseau virtuel (facultatif)
- Sur la version 2.0 de LXD (Ubuntu 16.04), il faut modifier le fichier "/etc/default/lxd-bridge" : LXD-CONFILE="/etc/default/lxd-dhcp"
- Puis créer un nouveau fichier "/etc/default/lxd-dhcp" avec :
dhcp-host=nginx,192.168.222.10 dhcp-host=srv2,192.168.222.11
- Attention, les adresses IP doivent être dans la plage du DHCP !
- Pour que les modifications soient prises en compte : service lxd-bridge restart