« Lxc » : différence entre les versions
(Ajout de script d'automatisation.) |
m (→Lister) |
||
Ligne 106 : | Ligne 106 : | ||
Lister les conteneur dans un tableau | Lister les conteneur dans un tableau | ||
# lxc-ls --fancy | # lxc-ls --fancy | ||
ou | |||
# lxc-ls -f | |||
==Info== | ==Info== |
Version du 20 octobre 2017 à 16:06
Installation et utilisation de LXC (au plus simple)
Installation
Installation du paquet
# apt install lxc
Configuration du réseau
Réseau par pont
Ce mode est le plus adapté pour un usage "machine virtuelle" du conteneur (et donc mieux pour héberger sur un serveur). En effet, avec le pont réseau, le conteneur aura accès, tant en entrée que en sortie au même réseau que votre machine hôte (un par-feux sera peut être judicieux en fonction du cas). Le réseau n'est donc pas limité.
Installation du paquet
# apt install bridge-utils
Création d'une interface pour le mode bridge
# vim /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.1.161
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 5
bridge_fd 0
Réseau privé
Depuis la version 2.0 de LXC, le service lxc-net permet de créer automatiquement une interface bridge lxcbr0
qui servira à privatiser l'interface réseau du conteneur. On utilisera des redirections de ports iptables pour accéder à nos services ou ont routera les paquets provenant du réseau privé. L'intérêt principal du réseau privé face au mode bridge est qu'il est plus adapté à un usage sur machine bureautique. En effet, la création d'un bridge via le fichier interfaces fout la merde avec network-manager et ajoute une certaine lourdeur à l'usage quotidien (surtout avec un PC portable). De plus, aucun autre paquet que lxc n'est nécessaire. En outre, on peut également dire que l'accès au conteneur est plus limité (donc plus sécurisant) de par les la portée limité du réseau privé entre l'hôte et le conteneur (pas besoin de par-feux).
Création du fichier /etc/default/lxc-net
avec le paramètre suivant
# echo "USE_LXC_BRIDGE="true"" >> /etc/default/lxc-net
Relancer le service pour montée automatiquement l'interface lxcbr0
.
# service lxc-net restart
Création d'un conteneur et configuration
Création d'un conteneur sous Debian 8
# lxc-create -n <NOM_CONTENEUR> -t debian -- -r jessie
Ajout de la configuration réseau.
Attention, la directive lxc.network.ipv4
donne une IP au conteneur mais le fichier interfaces du Debian est réglé sur DHCP par défaut. Le conteneur récupère donc 2 IP. Soit on désactive cette directive, soit on vire le DHCP (je pense que mettre une IP fixe au conteneur est plus simple).
# vim /var/lib/lxc/<NOM_CONTENEUR>/config
Pour un bridge :
lxc.network.type = veth
lxc.network.hwaddr = 00:16:3e:62:91:94
lxc.network.name = eth0
#lxc.network.ipv4 = 192.168.1.163
lxc.network.link = br0
lxc.network.flags = up
Pour un réseau privé :
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 44:8a:5b:80:b8:3a
Commandes de gestion des conteneurs
Démarrage
Démarrage du conteneur en tache de fond
# lxc-start -n <NOM_CONTENEUR> -d
Démarrage du conteneur dans le terminal courant
# lxc-start -n <NOM_CONTENEUR> -F
ASTUCE
Pour changer le mot de passe root, on utilisera la commande suivante :# lxc-attach -n <NOM_CONTENEUR> passwd
Console
Entrer dans la console du conteur (attach). Pour sortir, tapez ctrl+a q
# lxc-console -n <NOM_CONTENEUR>
Arrêter
Arrêter le conteneur (-k pour forcer)
# lxc-stop -n <NOM_CONTENEUR> [-k]
Supprimer
Supprimer un conteneur (-f pour forcer)
# lxc-destroy -n <NOM_CONTENEUR> [-f]
À noter qu'il est préférable d'utiliser la commande suivante pour supprimer un conteneur (j'ai déjà eu des mauvaises surprises avec l'autre commandes)
# rm -rf /var/lib/lxc/<NOM_CONTENEUR>
Lister
Lister les conteurs démarrés ou arrétés
# lxc-ls [--active | --stopped]
Lister les conteneur dans un tableau
# lxc-ls --fancy
ou
# lxc-ls -f
Info
Savoir si un conteneur est allumé ou éteint
# lxc-info -n <NOM_CONTENEUR>
Sauvegarder et restaurer un conteneur
Sauvegarde
Sauvegarde (conserve automatiquement les permissions). Enlevez l'argument z pour ne pas compresser (archive tar au lieu de tar.gz) si vous voulez que ce soit (beaucoup) plus rapide.
Un seul conteneur
# ls /var/lib/lxc/ # tar czvf Nom_Conteneur_Date.tar.gz Nom_Conteneur
Tout les conteneurs démarrés
# list=`lxc-ls --active`;for i in $list; do tar czvf /répertoire/de/sauvegarde/${i}.tar.gz /var/lib/lxc/$i; done
Tout les conteneurs
# list=`lxc-ls`;for i in $list; do tar czvf /répertoire/de/sauvegarde/${i}.tar.gz /var/lib/lxc/$i; done
Restauration
Restaurer le conteneur (par défaut, l'option -p est activé et permet de conserver les permissions. Vérifiez si c'est le cas le première fois)
# ls /var/lib/lxc/ # tar xzvf[p| --preserve-permissions] Nom_Conteneur_Date.tar.gz
Mettre à jour tout les conteneurs
Il est assez facile d'imaginer la lourdeur occasionnée par une mise à jour de l'ensemble des conteneurs dans les cas où leur nombre devient important. Je vous propose les scripts que j'utilise pour effectuer cette opération dans cette section.
Arrêter tout les conteurs
Cette étape n'est pas obligatoire mais certain services risquent de ne pas utiliser les librairies mises à jours si on ne les redémarrent pas, ce qui peut représenter une faille de sécurité. Nous allons donc éteindre tout les conteneurs afin de garantir la bonne application des mises à jours.
#!/bin/bash
# Nom : lxc-stop.sh
# Fonction: Mettre à jour tout les conteneurs
# Auteur initial: Vivek Gite <www.cyberciti.biz>, under GPL v2+
# -------------------------------------------------------
# Obtenir la liste des conteneurs
vms="$(lxc-ls --active)"
# Éteindre tout les conteneurs de la liste
stop_lxc(){
local vm="$1"
echo -e "\\033[1;34m*** [VM: $vm [$(hostname) @ $(date)] ] ***"
echo -e "\\033[1;32m-----------------------------------------------------------------"
tput sgr0
/usr/bin/lxc-attach -n "$vm" init 0
# Pour RHEL/CentOS/Fedora Linux, remplacez la commande lxc-attach précédente par celle-ci :
# lxc-attach -n "$vm" poweroff
echo -e "\\033[1;32m-----------------------------------------------------------------"
tput sgr0
}
# Exécuter l'extinction
for v in $vms
do
stop_lxc "$v"
done
Ou cette ligne :
list=`lxc-ls --active`;for i in $list; do lxc-stop -n $i; done
Mettre à jour tout les conteneurs
#!/bin/bash
# Nom : lxc-maj.sh
# Fonction : Mettre à jour tout les conteneurs
# Auteur initial: Vivek Gite <www.cyberciti.biz>, under GPL v2+
# -------------------------------------------------------
# Obtenir la liste des conteneurs
vms="$(lxc-ls --active)"
# Mettre à jour tout les conteneurs de la liste
maj_lxc(){
local vm="$1"
echo -e "\\033[1;34m*** [VM: $vm [$(hostname) @ $(date)] ] ***"
echo -e "\\033[1;32m-----------------------------------------------------------------"
tput sgr0
/usr/bin/lxc-attach -n "$vm" apt -- -q update
/usr/bin/lxc-attach -n "$vm" apt -- -q -y upgrade
/usr/bin/lxc-attach -n "$vm" apt-get -- -qq -y clean
/usr/bin/lxc-attach -n "$vm" apt-get -- -qq -y autoclean
# Pour RHEL/CentOS/Fedora Linux, remplacez les commandes lxc-attach précédentes par celle-ci :
# lxc-attach -n "$vm" yum -y update
echo -e "\\033[1;32m-----------------------------------------------------------------"
tput sgr0
}
# Exécuter la mise à jour
for v in $vms
do
maj_lxc "$v"
done
Démarrer tout les conteneurs
list=`lxc-ls`;for i in $list; do lxc-start -n $i -d; done
Source de la section
Bonus
Script de génération d'adresse MAC
Voici un script de génération d'adresse MAC en fonction du nom du conteneur :
#!/bin/bash
if [ -n "$1" ]
then
OID="44:8a:5b"
RAND=$(echo $1 | md5sum | sed 's/\(..\)\(..\)\(..\).*/\1:\2:\3/')
echo "$OID:$RAND"
else
echo "ERREUR: Merci de soumettre un nom pour générer l'adresse MAC :"
echo " $FUNCNAME myhost"
fi
Activer la couleur dans le shell du conteneur
Par défaut, le shell Bash des conteneurs n'affichent pas de couleurs. Pour corriger ça il faut définir la variable TERM
à xterm-256color
On peut mettre cette linge dans /etc/environment
TERM=xterm-256color
Informations utiles
- Les conteneurs sont situés dans
/var/lib/lxc
- Les conteneurs étalons téléchargés sont stockés dans
/var/cache/lxc
- Le paquet contenant l'outil ping est
iputils-ping
- Pour fixer le DNS (qui est automatiquement récupéré par le DHCP) il faut installer le paquet
resolconf
et mettre une section dns-namerver <IP_DNS> dans le fichier/etc/network/interfaces
- Détails des arguments
lxc.network
du fichier de config : https://linuxcontainers.org/fr/lxc/manpages/man5/lxc.container.conf.5.html