Pour cette nouvelle version de mon homelab, je suis parti sur une architecture simple, sans automatisation à outrance. Allons-y.
Ci-dessous quelques rappels des faits et l'évolution du homelab :
- Mon homelab en 2024
- Homelab partie 1 : installation de Proxmox et Ceph
- Homelab partie 2 : Création des VM pour k3s
- Homelab partie 3 : installation de k3s et mise en cluster
- Homelab partie 4 : finalement, on repart de zéro… ou presque
Maintenant, repartons sur un nouvel environnement. J'ai repris la configuration de ma tour pour m'en servir d'hyperviseur. Le matériel à disposition se compose d'un Ryzen 7 2700, 32 Go de mémoire vive en DDR4-2666 MHz, quatre disques durs mécaniques de 1 To en SATA 3, un disque flash M.2 d'1 To et un disque flash NVMe d'1 To. Fini les multiples machines physiques, il n'y a plus qu'une seule tour.
Proxmox est le système d'exploitation utilisé pour cet essai. Les quatre disques durs mécaniques seront exploités au travers de ZFS, le disque NVMe sera utilisé pour faire un cache L2ARC et les logs ZIL, et enfin le disque M.2 sera le support sur lequel sera installé l'OS.
L'installation de Proxmox VE 8.2 s'est effectuée via l'image ISO officielle, en sélectionnant le type de système de fichiers "XFS" pour le système.
Le choix de ZFS, son impact et ses capacités
Proxmox VE 8.2 met à disposition plusieurs solutions de stockage, et avec le matériel qui est à ma disposition, j'ai sélectionné ZFS.
Création du pool de stockage
Pour que les quatre disques puissent fonctionner sans trop de perte de performance, j'ai décidé d'avoir un "stripped mirror". Dans l'idée, il s'agit d'une sorte de RAID-10, un miroir de deux grappes de deux disques en série. Il y avait aussi les options RAIDZ et RAIDZ2, cependant mes disques ne sont ni des disques d'entreprises et ne sont pas reliés à un contrôleur SAS. Les débits seront réduits et je souhaite garder un minimum d'IOPS.
Plutôt que d'utiliser l'interface web de Proxmox, je me suis connecté en SSH à la machine pour lancer quelques commandes. Les disques sont aux emplacements /dev/sda
, /dev/sdb
, /dev/sdc
et /dev/sdd
. Vous pouvez obtenir leurs noms et leurs ID en tapant la commande lsblk
. Pour avoir une base saine, je les ai remis à zéro, puis ai lancé la création d'un pool ZFS :
$ wipefs -a /dev/sda /dev/sdb /dev/sdc /dev/sdd
$ zpool create stoZFS mirror /dev/sda /dev/sdc mirror /dev/sdb /dev/sdd
Quelques explications :
wipefs
supprime toutes les partitions des disques, y compris les "superblocks" ;zpool create stoZFS
: le nom du stockage s'intitule "stoZFS", à changer selon votre environnement ;mirror /dev/... /dev/... mirror /dev/... /dev/...
: la fin de la commandezpool
initie deux groupes de deux disques, en miroir. Les groupes sont dans le même stockage, correspondant au "stripped mirror" voulu.
En faisant la commande zpool status
, l'état du pool sera affiché, y compris l'état de chaque disque.
Configuration du pool ZFS
Pour gagner un peu d'espace disque et exploiter un peu le processeur qui s'ennuie, activons la compression, via la commande zfs set compression=lz4 stoZFS
.
Ne disposant que de 32 Go de mémoire, j'ai volontairement bridé la fonctionnalité ARC de ZFS à 8 Go de mémoire. Un fichier de configuration est à créer dans le dossier /etc/modprobe.d
, comportant la ligne suivante : echo "options zfs zfs_arc_max=8589934592" >> /etc/modprobe.d/zfs.conf
.
Maintenant, passons à la création d'un stockage L2ARC. Pour de plus amples informations quant à ZFS et ses différents outils, je vous suggère l'article de 45 Drives (en anglais) : https://www.45drives.com/community/articles/zfs-caching/ .
sudo cfdisk /dev/nvme0n1
# Créez deux partitions de type Linux FS (8300), 128G pour les logs, 64G pour L2ARC
sudo mkfs.ext4 /dev/nvme0n1p2 # For SLOG
sudo mkfs.ext4 /dev/nvme0n1p1 # For L2ARC
Enfin, ajoutez les partitions selon leur usage avec la commande zpool
:
sudo zpool add stoZFS log /dev/nvme0n1p1 -f
sudo zpool add stoZFS cache /dev/nvme0n1p2 -f
N'oubliez pas de remplacer stoZFS
et les /dev/nvme..
selon votre environnement. Désormais, votre stockage ZFS est prêt à l'emploi.
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
stoZFS 1.08G 1.76T 1.08G /stoZFS
$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
stoZFS 1.81T 1.08G 1.81T - - 0% 0% 1.00x ONLINE -
Ajouter ce stockage ZFS pour Proxmox
Côté ZFS, nous en avons terminé. Proxmox, au travers de son interface web, est capable de vous présenter les pools et leurs détails. Ajoutons des dossiers dans ce stockage ZFS pour y stocker nos fichiers de conteneurs et machines virtuelles.
Dirigez-vous dans l'onglet "Datacenter", puis sur "Storage", cliquez sur le bouton "Add" et enfin sur "ZFS". Sélectionnez le nom du pool ZFS créé précédemment « /stoZFS » et saisissez le nom du stockage souhaité. Dans le type de contenu, vous avez le choix entre les machines virtuelles (VM images) ou les conteneurs, à sélectionner à votre guise. Il est tout à fait possible de créer plusieurs placements dans le même pool de stockage ZFS. L'ID correspond au nom du stockage dans Proxmox (par exemple "zfsVM").
À cet instant, l'hôte Proxmox est prêt à l'emploi. Maintenant, créons les rôles et clés d'API pour qu'Open Tofu puisse créer les machines virtuelles, conteneurs et autres ressources.