Les conteneurs LXC sur Proxmox VE
Guide d'utilisation des conteneurs LXC sur Proxmox VE
Au sommaire :
- 1-Qu'est-ce que LXC ?
- 2-Machine virtuelle vs conteneur
- 3-Avantages/inconvénients
- 4-Téléchargement des templates
- 5-Création d'un conteneur
1-Qu'est-ce que LXC ?
LXC (Linux Containers) est une méthode de virtualisation au niveau du système d'exploitation qui permet de créer plusieurs conteneurs isolés les uns des autres et qui dépend du noyau Linux.
Depuis Proxmox VE 4.0, LXC remplace OpenVZ. La raison est que LXC ne nécessite aucune modification du noyau contrairement à OpenVZ, ce qui fait qu'il évolue en parallèle avec lui à chaque mise à jour.
Pour la petite histoire, LXC était le runtime (environnement d’exécution) par défaut de Docker avant d'être remplacé par libcontainer.
LXC fonctionne sur le principe des cgroups (control groups) et namespaces (espaces de nom) qui sont des fonctionnalités du noyau Linux.
- Cgroups : permet de limiter et mesurer les ressources, prioriser certains groupes et isoler via les espaces de nom (namespaces),
- Namespaces : méthode d'isolation qu'on retrouve dans Kubernetes qui permet d'isoler un groupe de processus d'un autre groupe de processus en créant des partitions des ressources,
C'est bien beau tout ça mais concrètement, c'est quoi la différence avec les machines virtuelles ?
2-Machine virtuelle vs conteneur
Contrairement aux machines virtuelles, les conteneurs LXC ne disposent d'aucun noyau et sont donc dépendant de celui du système hôte.
C'est tout le contraire des machines virtuelles qui dépendent de la couche de virtualisation (l'hyperviseur) et qui disposent de leur propre noyau.
Nul besoin donc d'émuler des périphériques comme avec QEMU ou d'accéder au ressources matérielles comme avec KVM. Le système hôte attribue une carte réseau, du stockage, de la mémoire et des ressources processeur au conteneur qu'on peut modifier de manière dynamique.
3-Avantages/inconvénients
Avantages :
- Leur rapidité d’exécution,
- Leur faible taille sur le disque et donc des sauvegardes,
- Leur impact modéré en performance qui permet de réduire le nombre de machines virtuelles par serveur et d’exécuter plus de conteneurs applicatifs,
- Pouvoir éxecuter différentes distributions (Debian, Ubuntu, Centos, Rocky Linux, Alpine, Arch etc),
Inconvénients :
- Aucun support des migrations en direct contrairement à LXD, une surcouche de LXC développé par Canonical,
- Dépend du noyau du système hôte,
- Vous ne pourrez pas créer un conteneur Windows (est-ce un inconvénient ? je vous laisse juger),
Vous pouvez les reconnaître très facilement, ils sont identifié par un cube comme dans l'image ci-dessous :
Après cette présentation riche en informations, vous allez télécharger un template et créer un conteneur. C'est Dirty mon kiki!!!!!!
4-Téléchargement des templates
Contrairement aux machines virtuelles, les conteneurs LXC ne peuvent être crées à partir d'ISO mais à partir de templates qu'on peut trouver dans le dépôt Proxmox qui se trouve dans “Datacenter\nom du serveur\local\CT Templates\Templates”
Vous y trouverez également des conteneurs provenant du site Turnkey :
Pour mettre à jour le dépôt, tapez la commande suivant sur le CLI de votre serveur :
root@micro-srv-01:~# pveam update
update successful
root@micro-srv-01:~#
Les templates se trouve dans :
/mnt/pve/<storage>/template/cache
5-Création d'un conteneur
Nous allons regarder ensemble comment créer un conteneur et découvrir l'utilité des options.
Général
Tout d'abord, indiquez :
- Un nom,
- Un mot de passe
- La clé SSH de votre poste client (pour plus de confort).
On remarque deux options très intéressantes :
- Nesting : Il permet de créer des conteneurs LXC/LXD ou Docker dans le conteneur principal, un peu comme la virtualisation imbriqué avec les machines virtuelles,
- Unprivileged : Conteneur non privilégié, ce qui signifie qu'il aura des restrictions d’accès (pas de partage SMB/NFS, pas d’accès à certains modules du kernel). Ce qui signifie une meilleure isolation car si l'attaquant sort du conteneur, il ne se retrouvera pas en tant que root du serveur principal et aura des droits extrêmement limités. Un conteneur privilégié n'aura pas ces restrictions mais en cas de compromission de ce dernier, l'attaquant pourra remonter jusqu'à la racine du serveur et provoquer beaucoup de dégâts. À éviter donc en production.
Template
Sélectionnez votre template (Ubuntu 22.04 LTS pour l'exemple). La plupart pèsent une centaine de Mo et Alpine Linux pèse que 3 Mo.
Disks
Mettez la taille que vous voulez. 2 Go sont largement suffisants pour un simple service.
Je vous montre ce que ça donne sur mon conteneur proxwg (Wireguard) de 5 Go, le tout prend 647 Mo.
root@proxwg:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/pve-vm--102--disk--0 4.9G 647M 4.0G 14% /
On remarque également l'option ACL (Access Control Lists) que vous pouvez activer ou désactiver. Il permette une meilleure gestion des droits que les traditionnels utilisateur/groupe de Linux.
Vous pouvez également créer des quotas d'espace disque pour chaque utilisateur du conteneur. Fonctionne uniquement sur les conteneurs avec un système de fichier ext4 et ne fonctionne pas sur les conteneurs non privilégiés.
Vous avez également les options "Mount options" et "Skip replication". Pour le premier, il s'agit de monter un volume dans le conteneur tandis que le deuxième sert à indiquer si on inclus ou pas les volumes montés lors d'une sauvegarde.
Vous pouvez créer des conteneurs sur tout type de stockage à l'exception de Ceph RBD (système de fichier sous forme de bloc). Il faut activer KRBD (Kernel Rados Block Device) pour que ce soit compatible mais c'est pas l'objet de ce tutoriel (c'est toujours bon à savoir).
CPU
On remarque que seul les cores sont disponible. Pas de NUMA ou de socket dans un conteneur, n'oublions pas qu'un conteneur est UNIQUEMENT un processus et rien d'autre.
Memory
Dans l'onglet “Mémory”, allez y doucement et tester la consommation en mémoire de votre conteneur. Pour mon VPN Wireguard, 128 Mo sont largement suffisant avec un swap de 256 Mo mais la bonne pratique est d'avoir l'équivalent de la mémoire alloué en swap. Le swap appartient à celui de l'hôte.
Sur mon conteneur, il consomme seulement 39 Mo.
Network
Choisissez une adresse IP statique et la passerelle de votre réseau local en IPv4/IPv6.
On remarque qu'on peut :
- Changer le nom de l'interface réseau,
- Créer une adresse MAC bien précise (utile si l'authentification par adresse MAC),
- Indiquer le pont réseau (vmbr0 par défaut),
- Indiquer un VLAN,
- Limiter la bande passante par seconde (par défaut il n'y a aucune limite),
- Activer les réglés de pare-feu de Proxmox VE,
DNS
Vous pouvez soit utiliser les paramètres DNS du serveur, soit ajouter des spécifiques. Voir la liste ci-dessous :
Confirm
Confirmez la création du conteneur.
Pour éviter la redite, voici trois tutoriels sur la création de conteneurs LXC.