Les conteneurs LXC sur Proxmox VE

Guide d'utilisation des conteneurs LXC sur Proxmox VE

Les conteneurs LXC sur Proxmox VE
pve proxmox proxmoxve

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,
Cgroups — Wikipédia

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 :

TurnKey GNU/Linux | 100+ free ready-to-use system images for virtual machines, the cloud and bare metal

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 :

Les 17 Meilleurs Serveurs DNS Gratuits et Publiques (Testés en Juin 2022)
Changer votre Domain Name Server (DNS – Nom de Domaine du Serveur) est un moyen facile d’améliorer les vitesses d’internet et la sécurité. Même s’il existe de nombreuses options payantes, vous trouverez également de très bons fournisseurs de serveurs DNS gratuits. Assurez-vous de choisir soigneuseme…

Confirm

Confirmez la création du conteneur.

Pour éviter la redite, voici trois tutoriels sur la création de conteneurs LXC.

Installer RetroNAS avec LXC
Au sommaire : * 1-Qu’est-ce que RetroNAS ? * 2-Prérequis * 3-Création d’un conteneur LXC privilégié * 4-Créer un compte utilisateur * 5-Configurer OpenSSH * 6-Créer un partage NFS * 7-Monter un partage NFS * 8-Installation de RetroNAS * 9-Chemin des scripts Ansible 1-Qu’est-ce que RetroNAS ? RetroNAS est une suite d’outils conçu par Dan Mons qui vous simplifiera la vie dans
Installer Wireguard avec LXC
Guide d’installation de Wireguard dans un conteneur LXC
Installer Pi-hole avec LXC
Gui d’installation de pi-hole dans un conteneur LXC