CentOS 7 : Installer et utiliser LXC
Table des matières
LXC, contraction de l’anglais LinuX Containers est un système de virtualisation, utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau et une plus ou moins grande partie du système hôte. Le conteneur apporte une virtualisation de l'environnement d'exécution (Processeur, Mémoire vive, réseau, système de fichier… et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de machine virtuelle.
Ce système est similaire aux autres systèmes de virtualisations au niveau du système d'exploitation comme openVZ.
Le système installé est une CentOS 7 64bits.
S'assurer que le système est à jour, et que les dépôts EPEL soient installés.
Ensuite, on installe LXC, les Modèles LXC (templates) et deux outils :
Une fois l'opération terminée, on vérifie l'environnement LXC :
Redémarer !
Créer un pont nommé virbr0
Bon, maintenant que tout est installé, on va installer notre premier conteneur LXC.
Pour voir les scripts de création de templates disponibles, exécuter :
Pour la suite, je vais utiliser une Gentoo.
Pour créer une machine virtuelle LXC avec le système Gentoo, nommée mavm :
Le téléchargement des fichiers requis débute, et la machine va se construire toute seule grâce au script LXC:
Pour lister les machines installées :
Deux lignes s'affichent : la première ligne affiche les machines disponibles, et la deuxième, les machines démarrées.
ici, la machine poum est démarrée.
Pour démarrer une machine :
Il est possible d'obtenir quelques informations sur une machine LXC lancée grâce à la commande :
Pour une machine LXC arrêtée :
Pour se connecter sur une machine LXC en cours d'exécution, on utilise la commande
Pour sortir de la console, saisir Ctrl+a q
l
Deux solution pour arrêter, se connecter sur celle-ci et l'arrêter avec la commande halt ou en dehors de la machine, saisir :
En cas d'arrêt du système hôte, les machines sont arrêtées.
Lorsque celui-ci se remet en service, toutes les machines LXC sont éteintes.
Pour lancer une machine au démarrage, créer simplement un script à lancer au démarrage avec la commande
Présentation LXC
LXC, contraction de l’anglais LinuX Containers est un système de virtualisation, utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau et une plus ou moins grande partie du système hôte. Le conteneur apporte une virtualisation de l'environnement d'exécution (Processeur, Mémoire vive, réseau, système de fichier… et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de machine virtuelle.
Ce système est similaire aux autres systèmes de virtualisations au niveau du système d'exploitation comme openVZ.
Installation des composants de base
Le système installé est une CentOS 7 64bits.
S'assurer que le système est à jour, et que les dépôts EPEL soient installés.
Ensuite, on installe LXC, les Modèles LXC (templates) et deux outils :
Code BASH :
yum install lxc lxc-templates bridge-utils debootstrap bzip2 tar gzip wget net-tools
Une fois l'opération terminée, on vérifie l'environnement LXC :
Code BASH :
lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-3.10.0-123.6.3.el7.x86_64 <h3 class="formatter-title wiki-paragraph-3" id="paragraph-namespaces">Namespaces</h3> Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled <h3 class="formatter-title wiki-paragraph-3" id="paragraph-control-groups">Control groups</h3> Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled <h3 class="formatter-title wiki-paragraph-3" id="paragraph-misc">Misc</h3> Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
Redémarer !
Créer un pont nommé virbr0
Utilisons LXC
Bon, maintenant que tout est installé, on va installer notre premier conteneur LXC.
Pour voir les scripts de création de templates disponibles, exécuter :
Code BASH :
ls /usr/share/lxc/templates/ lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-openmandriva lxc-oracle lxc-sshd lxc-ubuntu-cloud lxc-altlinux lxc-busybox lxc-cirros lxc-download lxc-gentoo lxc-opensuse lxc-plamo lxc-ubuntu
Pour la suite, je vais utiliser une Gentoo.
Pour créer une machine virtuelle LXC avec le système Gentoo, nommée mavm :
Code BASH :
lxc-create -t gentoo -n mawm
Le téléchargement des fichiers requis débute, et la machine va se construire toute seule grâce au script LXC:
Code BASH :
### set_default_arch: default arch/variant autodetect... => Got: arch=amd64 variant=amd64 Attempting to obtain an exclusive lock (timeout: 60 sec) named "cache-amd64-amd64"... => done. => Executing "do_all" ###### cache_setup(): doing cache preparation ### cache_precheck(): doing some pre-start checks ... ### cache_stage3(): stage3 cache deployment... Determining path to latest Gentoo amd64 (amd64) stage3 archive... => downloading and processing http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3-amd64.txt => Got: 20140807/stage3-amd64-20140807.tar.bz2 Downloading/untarring the actual stage3 tarball... --2014-08-14 18:22:44-- http://distfiles.gentoo.org/releases/amd64/autobuilds/20140807/stage3-amd64-20140807.tar.bz2 Résolution de distfiles.gentoo.org (distfiles.gentoo.org)... 156.56.247.195, 64.50.236.52, 140.211.166.134, ... Connexion vers distfiles.gentoo.org (distfiles.gentoo.org)|156.56.247.195|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 186320443 (178M) [application/x-tar] Sauvegarde en : «STDOUT» 100%[========================================================================================>] 186 320 443 520KB/s ds 9m 6s 2014-08-14 18:31:51 (333 KB/s) - envoi vers sortie standard [186320443/186320443] => extracted to: /var/cache/lxc/gentoo/partial-amd64-amd64 chroot test... OK => stage3 cache extracted in : /var/cache/lxc/gentoo/partial-amd64-amd64 ### cache_portage: caching portage tree tarball... Downloading Gentoo portage (software build database) snapshot... Attempting to obtain an exclusive lock (timeout: 60 sec) named "portage"... => done. => Executing "wget -O /var/cache/lxc/gentoo/portage.tbz http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2" --2014-08-14 18:31:51-- http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2 Résolution de distfiles.gentoo.org (distfiles.gentoo.org)... 64.50.233.100, 156.56.247.195, 216.165.129.135, ... Connexion vers distfiles.gentoo.org (distfiles.gentoo.org)|64.50.233.100|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 70569402 (67M) [application/x-bzip2] Sauvegarde en : «/var/cache/lxc/gentoo/portage.tbz» 100%[========================================================================================>] 70 569 402 436KB/s ds 2m 38s 2014-08-14 18:34:31 (436 KB/s) - «/var/cache/lxc/gentoo/portage.tbz» sauvegardé [70569402/70569402] => done. ### cache_inittab: tuning inittab... ### cache_net: doing some useful net tuning... ### cache_dev(): /dev tuning... ### cache_openrc(): doing openrc tuning ### cache_locale(): initiating minimale locale en_US.UTF-8 * Generating 1 locales (this might take a while) with 1 jobs * (1/1) Generating en_US.UTF-8 ... [ ok ] * Generation complete ###### cache_setup: Cache should be ready ##### container_setup(): starting container setup ### container_precheck(): doing some pre-start checks ... #### container_rootfs(): copying rootfs /var/lib/lxc/mawm/rootfs from cache /var/cache/lxc/gentoo/rootfs-amd64-amd64 ... chroot test... OK => done #### container_consoles(): setting container consoles ... => main console + 1 ttys => done #### container_tz(): setting container timezone ... => host localtime copyed to container #### container_portage(): setting container portage... Warnings are normal here, don't worry !!! Section 'gentoo' in repos.conf has location attribute set to nonexistent directory: '/usr/portage' !!! Section 'x-portage' in repos.conf has location attribute set to nonexistent directory: '/usr/portage' !!! Invalid Repository Location (not a dir): '/usr/portage' !!! Section 'gentoo' in repos.conf has location attribute set to nonexistent directory: '/usr/portage' !!! Section 'x-portage' in repos.conf has location attribute set to nonexistent directory: '/usr/portage' !!! Invalid Repository Location (not a dir): '/usr/portage' trying to guess portage_dir from host... => host portage detection failed (not gentoo host), fallback to private portage tree # untaring private portage to /var/lib/lxc/mawm/rootfs//usr/portage from /var/cache/lxc/gentoo/portage.tbz ... Attempting to obtain an exclusive lock (timeout: 60 sec) named "portage"... => done. => Executing "tar -xp --strip-components 1 -C /var/lib/lxc/mawm/rootfs//usr/portage -f /var/cache/lxc/gentoo/portage.tbz" => done container_net(): setting container network conf... * service net.eth0 added to runlevel default => network conf done. #### container_hostname(): setting hostname... => done. #### container_auth(): setting authentification... setting password for root ... BAD PASSWORD: it is too short BAD PASSWORD: is too simple => done. if you didn't specify , default is 'toor' => done. #### container_sshd(): enabling sshd... * service sshd added to runlevel sysinit => done. container_configuration(): making lxc configuration file... => done. ###### container_setup(): container should be ready to start! You could now use you container with: lxc-start -n mawm little things you should know about your container: => rootfs of container is : /var/lib/lxc/mawm/rootfs => config of container is : /var/lib/lxc/mawm/config => timezone was staticly copyed from host => container has its own portage tree at /usr/portage => Warning, these veth NIC don't have fixed hwaddr : eth0 see http://lists.linuxcontainers.org/pipermail/lxc-devel/2013-December/006736.html and man lxc.conf => Connection user is root => root has the default password 'toor', please change it ASAP
Lancer une machine virtuelle LXC
Pour lister les machines installées :
Code BASH :
lxc-ls mawm pam pim poum test1 poum
Deux lignes s'affichent : la première ligne affiche les machines disponibles, et la deuxième, les machines démarrées.
ici, la machine poum est démarrée.
Pour démarrer une machine :
Code BASH :
lxc-start -n $NOMDELAMACHINE -d
Avoir des infos sur la machine LXC
Il est possible d'obtenir quelques informations sur une machine LXC lancée grâce à la commande :
Code BASH :
lxc-info -n mawm Name: mawm State: RUNNING PID: 2336 CPU use: 0.35 seconds BlkIO use: 25.62 MiB Memory use: 14.73 MiB KMem use: 0 bytes Link: veth1KAV9N TX bytes: 1.53 KiB RX bytes: 870 bytes Total bytes: 2.37 KiB
Pour une machine LXC arrêtée :
Code BASH :
lxc-info -n pim
Name: pim
State: STOPPED
Se connecter à une machine LXC démarrée
Pour se connecter sur une machine LXC en cours d'exécution, on utilise la commande
Code BASH :
lxc-console -n $NOMDELAMACHINE
Pour sortir de la console, saisir Ctrl+a q
l
Code BASH :
xc-console -n mawm Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself mawm login: root Password: Last login: Thu Aug 14 19:51:09 CEST 2014 on tty1 mawm ~ # ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.122.128 netmask 255.255.255.0 broadcast 192.168.122.255 inet6 fe80::88d3:57ff:fed1:a091 prefixlen 64 scopeid 0x20<link> ether 8a:d3:57:d1:a0:91 txqueuelen 1000 (Ethernet) RX packets 184 bytes 10350 (10.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13 bytes 2014 (1.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 mawm ~ #
Arrêter une machine LXC
Deux solution pour arrêter, se connecter sur celle-ci et l'arrêter avec la commande halt ou en dehors de la machine, saisir :
Code BASH :
lxc-stop -n $NOMDELAMACHINE
Démarrer une machine au lancement du système hôte
En cas d'arrêt du système hôte, les machines sont arrêtées.
Lorsque celui-ci se remet en service, toutes les machines LXC sont éteintes.
Pour lancer une machine au démarrage, créer simplement un script à lancer au démarrage avec la commande
Code BASH :
lxc-start -n $NOMDELAMACHINE -d