Outils pour utilisateurs

Outils du site


documentation:technique:lxc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
doc:technique:lxc [2016/11/22 20:27] hoccaudocumentation:technique:lxc [2017/04/16 20:14] – [Installation] tyrben
Ligne 1: Ligne 1:
-====== Introduction ======+====== LXC ====== 
 + 
 +===== Introduction =====
  
 LXC est utilisé sur notre serveur dans le but de séparer les différents services que nous allons proposer. Cette documentation fait suite aux différents ateliers réalisés pour découvrir et se former sur LXC. LXC est utilisé sur notre serveur dans le but de séparer les différents services que nous allons proposer. Cette documentation fait suite aux différents ateliers réalisés pour découvrir et se former sur LXC.
Ligne 9: Ligne 11:
   * **cgroups(7)**   * **cgroups(7)**
  
-====== Installation ======+===== Installation =====
  
-Sous Debian, il suffit d'installer le paquet ''lxc''.+Sous Debian, il suffit d'installer le paquet ''lxc'' 
 + 
 +FIXME Il y a une version en particulier à installer ? Il me semble qu'on est allé la chercher dans des backports. 
 + 
 +''apt-get -t jessie-backports install lxc''
  
 D'autres paquets peuvent être nécessaire en fonction du //backend// choisi, ce qui correspond en gros au système de fichier qui contiendra les conteneurs, ou à la configuration réseau. D'autres paquets peuvent être nécessaire en fonction du //backend// choisi, ce qui correspond en gros au système de fichier qui contiendra les conteneurs, ou à la configuration réseau.
  
-===== Configuration par défaut =====+==== Configuration par défaut ====
  
 Il est possible de définir une configuration par défaut qui sera incluse dans chaque nouveau conteneur. Cela est particulièrement pratique pour la configuration réseau, souvent la même pour tous. Ce fichier en question est ''/etc/lxc/default.conf''. Il est possible de définir une configuration par défaut qui sera incluse dans chaque nouveau conteneur. Cela est particulièrement pratique pour la configuration réseau, souvent la même pour tous. Ce fichier en question est ''/etc/lxc/default.conf''.
 +
 ===== Configuration réseau ===== ===== Configuration réseau =====
  
 Il y a plusieurs façon de configurer le réseau au sein des conteneurs. Il y a plusieurs façon de configurer le réseau au sein des conteneurs.
  
-La plus classique étant de passer par un //bridge// (ou pont en français) créé sur l'hôte spécifiquement pour les conteneurs. Par cette méthode, on peut également différencier 2 façons de faire :+La plus classique étant de passer par un //[[https://wiki.debian.org/fr/BridgeNetworkConnections|bridge]]// (ou pont en français) créé sur l'hôte spécifiquement pour les conteneurs. Par cette méthode, on peut également différencier 2 façons de faire :
  
   * faire de la redirection de ports depuis l'hôte vers les conteneurs (plus communément appelé NAT),   * faire de la redirection de ports depuis l'hôte vers les conteneurs (plus communément appelé NAT),
Ligne 43: Ligne 50:
 Il faut tout d'abord activer l'//IP forward// sur l'hôte. Ceci permet d'activer la redirection d'une connexion, nécessaire pour la suite. Pour le faire de manière permanente (à noter que ce sera effectif qu'au rechargement de sysctl), on peut le faire avec la commande : Il faut tout d'abord activer l'//IP forward// sur l'hôte. Ceci permet d'activer la redirection d'une connexion, nécessaire pour la suite. Pour le faire de manière permanente (à noter que ce sera effectif qu'au rechargement de sysctl), on peut le faire avec la commande :
  
-  echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-local-ip-forward+  echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-local-ip-forward.conf
  
 Celle-ci va créer le fichier ''99-local-ip-forward'' dans le dossier ''/etc/sysctl.d'', une bonne pratique pour étendre les différentes configurations. On peut également l'activer immédiatement (à noter qu'au prochain redémarrage, la valeur par défaut sera réutilisé), avec la commande : Celle-ci va créer le fichier ''99-local-ip-forward'' dans le dossier ''/etc/sysctl.d'', une bonne pratique pour étendre les différentes configurations. On peut également l'activer immédiatement (à noter qu'au prochain redémarrage, la valeur par défaut sera réutilisé), avec la commande :
Ligne 75: Ligne 82:
 -> exemple de règle iptables NAT -> exemple de règle iptables NAT
  
-====== Utilisation ======+==== lxc-net ====
  
-===== Création d'un conteneur =====+''lxc-net'' est un script se présentant sous la forme d'un service, qui automatise la configuration réseau comme vu précédemment en offrant en plus du DHCP et un DNS pour les conteneurs, en se basant sur [[http://www.thekelleys.org.uk/dnsmasq/doc.html|dnsmasq]]. Il se charge donc de créer l'interface bridge, configurer son adresse, et en plus de configurer ''dnsmasq'' afin de faciliter l'adressage et l'accès aux conteneurs. Il n'y a cependant pas énormément de documentation là-dessus, voir par exemple le [[https://wiki.debian.org/LXC/SimpleBridge#Using_lxc-net|wiki Debian]].
  
-Pour créer un conteneur, cela se fait avec la commande ''lxc-create''. Un ''man lxc-create'' vous apportera toutes les informations nécessaires sur l'utilisation des différents paramètres et options.+=== Intérêt ===
  
-Si l'on veut créer un conteneur nommé //pouet//en Debian Jessie, et en utilisant le //backend// par défaut :+Même si on pourrait être tenté de n'utiliser que ''lxc-net'' vu ce que cela semble simplifier, son usage est néanmoins à modérer ! Il faut avoir conscience qu'avec ce script, on délègue un bon nombre de configurations réseaux vitales pour l'accès au conteneur. En d'autres termesil ne vaut mieux pas que ce script se casse la figure ou que son comportement change du jour au lendemainsinon on risque de perdre gros ! Pour relativiser ce qu'il semble simplifier, on se rend compte que créer son interface bridge avec une bonne documentation n'est pas si insurmontable. Cette étape est d'ailleurs à réaliser qu'une seule fois, et permets une plus grande maîtrise et souplesse.
  
-  lxc-create -n pouet -t debian -- -r jessie+Enfin, une fois de plus, il est bon de se questionner sur ce que l'on veut faire avant tout, afin de voir s'il est adapté et nécessaire. Pour une utilisation sur son poste personnel, orientée développement par exemple, ce script apporte un bon nombre d'avantages et de facilités, notamment en ce qui concerne le DHCP et le DNS (création et accès à des conteneur à la volée). Par contre, dans le cas d'un serveur en production, comme à Mycélium, le DHCP est inutile voir dangereux : on préférera donner à chaque conteneur une IP fixe, afin d'être sûr de l'atteindre !
  
-Le conteneur est désormais créé, il est stocké par défaut dans le dossier ''/var/lib/lxc/pouet''. On y trouve principalement un dossier ''rootfs'', contenant le système de fichier du conteneur (c'est à ça qu'on se rapproche du chroot), et un fichier ''config''. C'est ce dernier qu'il va faudra modifier pour adapter sa configuration, comme lui définir une adresse IP par exemple. Pour connaître l'ensemble des valeurs possibles, un ''man lxc.container.conf'' apportera encore beaucoup d'informations.+=== Mise en place ===
  
-==== Optimisations ====+1. Créer un fichier ''/etc/default/lxc-net'', contenant les variables suivantes adaptées à vos envies et besoins :
  
-Par défaut, le conteneur sera crée avec une interface réseau ''eth0'', configurée en DHCPSi la configuration réseau est définie de manière statique (dans le fichier de configuration du conteneur par exemple)il est bon de modifier la configuration de ''eth0'' pour éviter qu'il cherche inutilement du DHCP. Pour ce faireavant de démarrer le conteneuril faudra modifier le fichier ''/var/lib/lxc/pouet/rootfs/etc/network/interfaces'' et remplacer ''dhcp'' par ''manual'' dans la ligne définissant ''eth0''On devrait donc avoir au final :+<code bash> 
 +# Active l'utilisation de lxc-net 
 +USE_LXC_BRIDGE="true" 
 +# Nom de l'interface bridge qui sera créé 
 +LXC_BRIDGE="lxcbr0" 
 +# IP de l'interface bridge 
 +LXC_ADDR="10.0.3.1" 
 +# Masque de sous-réseau de l'interface bridge 
 +LXC_NETMASK="255.255.255.0" 
 +# Adresse du réseauutilisé pour les règles iptables 
 +LXC_NETWORK="10.0.3.0/24" 
 +# Plage d'IP servies par le DHCP 
 +LXC_DHCP_RANGE="10.0.3.11,10.0.3.254" 
 +# Nombre d'IP au sein de la plage définie ci-dessus 
 +LXC_DHCP_MAX="244" 
 +# Extension de la configuration de dnsmasq 
 +LXC_DHCP_CONFILE="" 
 +# Domaine des conteneurs sur le réseau 
 +LXC_DOMAIN= 
 +</code> 
 +     
 +Pour informationce fichier contient tous les paramètres offerts par ''lxc-net'' pour personnaliser ses fonctionnalités. Il est en cherché et //sourcé// s'il existe par ''/etc/default/lxc''
  
-  iface eth0 inet manual+2. Redémarrer le service ''lxc-net'' pour prendre en compte les modifications, ou juste créer l'interface si elle n'existait pas encore :
  
-===== Accès à un conteneur =====+    systemctl restart lxc-net.service
  
-Une fois le conteneur créé, il va falloir le démarrer avec la commande ''lxc-start''Dans l'exmple du conteneur //toto// :+... et l'activer si besoin, pour les futurs (re)démarrage :
  
-  lxc-create -n toto+    systemctl enable lxc-net.service
  
-Par défaut, à partir de LXC 2.0, le conteneur se lance en arrière plan. Si ce n'est pas le cas, il faudra passer l'option ''-d'', et au contraire, si vous voulez voir le démarrage au premier-plan, il faudra passer l'option ''-F'' (attention, vous allez atterrir sur une console).+3On peut désormais vérifier le bon fonctionnement du script et ce qu'il est censé configurer :
  
-L'un des façons rapides de s'attacher à un conteneur, sans avoir besoin de s'identifier, comme une sorte de chroot au final, se fait avec la commande ''lxc-attach':+  * est-ce que l'interface bridge a bien été créé ?
  
-  lxc-attach -n toto+    ip addr
  
-Attention, vous serez néanmoins dans un environnement restreint. Pour se connecter au conteneur, comme on le ferait pour n'importe quelle machine physique, il y toujours le SSH, s'il est configuré, ou alors la commande ''lxc-console'' :+  * est-ce que le serveur DNS bien été lancé et écoute sur la bonne interface ?
  
-  lxc-console -n toto +    ps aux | grep dnsmasq 
-   +    netstat -ntlp
-====== lxc-net ======+
  
-lxc-net est un service qui crée un bridge avec dnsmasq dedans, afin d'y connecter facilement ses conteneurs LXC. La doc debian : https://wiki.debian.org/LXC/SimpleBridge#Using_lxc-net+  * est-ce que le service s'est bien exécuté ?
  
 +    systemctl status lxc-net.service
  
-1Créer un fichier =/etc/default/lxc-net=+4Enfin, il reste à adapter la configuration par défaut des conteneurs (dans ''/etc/lxc/default.conf'') pour s'//attacher// à cette nouvelle interface bridge, avec au moins :
  
 +    lxc.network.type = veth
 +    lxc.network.link = lxcbr0
 +    lxc.network.flags = up
  
-    # Active l'utilisation de lxc-net +===== Utilisation =====
-    USE_LXC_BRIDGE="true" +
-    # Nom de l'interface bridge qui sera créé +
-    LXC_BRIDGE="lxcbr0" +
-    # IP de l'interface bridge +
-    LXC_ADDR="10.0.3.1" +
-    # Masque de sous-réseau de l'interface bridge +
-    LXC_NETMASK="255.255.255.0" +
-    # Utilisé pour les règles iptables +
-    LXC_NETWORK="10.0.3.0/24" +
-    # Plage d'IP servies par le DHCP +
-    LXC_DHCP_RANGE="10.0.3.11,10.0.3.254" +
-    # Nombre d'IP maximum au sein de la plage définie ci-dessus +
-    LXC_DHCP_MAX="244" +
-    # Extension de la configuration de dnsmasq +
-    LXC_DHCP_CONFILE="" +
-    # Domaine des conteneurs sur le réseau +
-    LXC_DOMAIN= +
-     +
-Ce fichier sera lu à la fin du fichier =/etc/default/lxc= par les différents scripts qui se servent de LXC.+
  
-2. (Re)démarrer le service lxc-net+==== Création d'un conteneur ====
  
-    systemctl restart lxc-net+Pour créer un conteneur, cela se fait avec la commande ''lxc-create''. Un ''man lxc-create'' vous apportera toutes les informations nécessaires sur l'utilisation des différents paramètres et options.
  
-Et l'activer si besoin :+Si l'on veut créer un conteneur nommé //pouet//, en Debian Jessie, et en utilisant le //backend// par défaut :
  
-    systemctl enable lxc-net+  lxc-create -n pouet -t debian -- -r jessie
  
-3Vérifier le bon fonctionnement...+Le conteneur est désormais créé, il est stocké par défaut dans le dossier ''/var/lib/lxc/pouet''On y trouve principalement un dossier ''rootfs'', contenant le système de fichier du conteneur (c'est à ça qu'on se rapproche du chroot), et un fichier ''config''. C'est ce dernier qu'il va faudra modifier pour adapter sa configuration, comme lui définir une adresse IP par exemple. Pour connaître l'ensemble des valeurs possibles, un ''man lxc.container.conf'' apportera encore beaucoup d'informations.
  
-Est-ce que l'interface bridge a bien été créé ?+=== Optimisations ===
  
-    ip addr+Par défaut, le conteneur sera crée avec une interface réseau ''eth0'', configurée en DHCP. Si la configuration réseau est définie de manière statique (dans le fichier de configuration du conteneur par exemple), il est bon de modifier la configuration de ''eth0'' pour éviter qu'il cherche inutilement du DHCP. Pour ce faire, avant de démarrer le conteneur, il faudra modifier le fichier ''/var/lib/lxc/pouet/rootfs/etc/network/interfaces'' et remplacer ''dhcp'' par ''manual'' dans la ligne définissant ''eth0''. On devrait donc avoir au final :
  
-Est-ce que le serveur DNS a bien été lancée et écoute sur la bonne interface ?+  iface eth0 inet manual
  
-    ps aux | grep dnsmasq +==== Accès à un conteneur ====
-    netstat -ntlp+
  
-Est-ce que le service s'est bien exécuté ?+Une fois le conteneur créé, il va falloir le démarrer avec la commande ''lxc-start''. Dans l'exmple du conteneur //toto// :
  
-    systemctl status lxc-net+  lxc-create -n toto
  
-4. Adapter la configuration par défaut des conteneurs (/etc/lxc/default.conf) pour s'attacher sur cette nouvelle interface bridgeavec au moins :+Par défaut, à partir de LXC 2.0, le conteneur se lance en arrière plan. Si ce n'est pas le casil faudra passer l'option ''-d'', et au contraire, si vous voulez voir le démarrage au premier-plan, il faudra passer l'option ''-F'' (attention, vous allez atterrir sur une console).
  
-    lxc.network.type = veth +L'un des façons rapides de s'attacher à un conteneur, sans avoir besoin de s'identifier, comme une sorte de chroot au final, se fait avec la commande ''lxc-attach'' :
-    lxc.network.link = lxcbr0 +
-    lxc.network.flags = up+
  
 +  lxc-attach -n toto
 +
 +Attention, vous serez néanmoins dans un environnement restreint. Pour se connecter au conteneur, comme on le ferait pour n'importe quelle machine physique, il y a toujours le SSH, s'il est configuré, ou alors la commande ''lxc-console'' :
 +
 +  lxc-console -n toto
documentation/technique/lxc.txt · Dernière modification : 2018/09/09 21:26 de cacatoes

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki