Après plusieurs essais avec des machines virtuelles en faisant de la virtualisation imbriquée, je suis arrivé à définir proprement l'installation de mes machines.

Version Date Commentaire
1 12/2023 Création de l'article
1.1 01/2024 Remplacement BTRFS vers XFS, réseau de classe B plutôt que C, mise à jour des images, reformulations

Les choix techniques

Après plusieurs semaines, voire des mois, de réflexion approfondie et de tests (coucou les collègues et copains du web), j'ai abouti à une solution technique qui répond pleinement à mes exigences. Cette solution a été déployée avec succès sur de multiples hôtes, supportant des charges de travail substantielles. Ce type d'architecture est aussi souvent plébiscité outre atlantique auprès des passionnés. L'idée générale du homelab est d'avoir un cluster de machines Proxmox et d'un stockage unifié entre elles. L'hyper convergence est poussée au maximum des capacités à disposition. Voici les caractéristiques :

  • OS de base : Debian 12.x
  • Hyperviseur : Proxmox VE 8.x
  • Stockage de base : démarrage via EFI, partitions LVM+XFS pour le système, home et tmp.
  • Stockage des VM : Ceph. N'ayant qu'un disque dur, je veux et dois utiliser Ceph sur l'unique disque à ma disposition.
  • Réseau : sous-réseau en /16. Un VLAN a été tagué pour Ceph uniquement (description plus bas dans l'article). En entreprise, préférez a minima un réseau 10 Gbit/s, avec des cartes réseaux dédiées et du LAG.
💡
La configuration suggérée ici est fonctionnelle et représente le strict minimum requis pour mettre en place le cluster Proxmox avec Ceph. Cependant, il est important de noter que les performances de Ceph pourraient être impactées, principalement en raison de l'utilisation d'un réseau 1 Gbit et du déploiement d'un seul OSD par machine.

Mon processus a débuté avec l'installation de l'image ISO officielle "netinst" de Debian 12.4. Cette étape était indispensable pour établir la fondation nécessaire à l'installation ultérieure de Proxmox. Pour ce projet, je dispose de trois machines identiques, des Chuwi LarkBox X 2024. Chaque machine est équipée d'un disque SSD NVMe de 512 Go et est pourvue de deux cartes réseau : une Intel 1 Gbit/s et une Realtek 2,5 Gbit/s.

Le défi consiste à faire reposer sur un même disque le système ainsi que le stockage pour Ceph. Pour ce faire, j'ai entrepris le partitionnement suivant :

  • Partition 1 : EFI - 512 Mb, dédié au démarrage
  • Partition 2 : LVM "system" - 96 Go
    • lv "root", 48 Go, monté sur /, formaté en XFS
    • lv "home", 12 Go, monté sur /home, formaté en EXT4, options "rw,nodev,nosuid"
    • lv "tmp", 8 Go, monté sur /tmp, formaté en EXT4, options "rw,nodev,nosuid,noexec"
    • lv "swap", 8 Go, pour la swap.
  • Partition 3 : 350 Go, réservée à Ceph OSD. Il est important de ne pas créer cette partition lors de l'installation initiale de Debian. Je reviendrai ultérieurement pour sa configuration dans la mise en place de l'environnement.

La partition root (/) abritera le système d'exploitation, entre autres éléments. Étant donné que Proxmox et Ceph génèrent un volume considérable de données (à cause des logs), j'ai préféré éviter toute restriction potentielle due au nombre limité d'inodes. Bien qu'une partition de type EXT4 puisse suffire pour des homelabs de petite taille sans atteindre les limites, je préfère anticiper le problème.

Les partitions /home et /tmp bénéficieront de configurations renforcées pour minimiser la surface d'attaque et limiter les utilisations abusives.

Installation et configuration de Proxmox et Ceph

Partie Proxmox

Pour l'installation de Proxmox, j'ai suivi rigoureusement les instructions détaillées dans l'article disponible à cette adresse : https://j.hommet.net/installer-proxmox-sur-debian/. Toutes les étapes décrites ont été scrupuleusement reproduites pour obtenir une installation fonctionnelle et prête à l'emploi.

Une fois Proxmox installé et opérationnel, la création des ponts réseau se fait dans la section "Network". Pour chaque carte réseau, j'ai initialisé un pont dédié, comme illustré dans l'exemple ci-dessous :

La carte "enp1s0" correspond à mon lan, et la carte "enp2s0" est dédiée à Ceph. Pour cette dernière, j'ai créé un VLAN tagué dans mon commutateur, puis dans Proxmox, j'ai créé un "Linux VLAN" avec le même ID de VLAN tag. Le pont "vmbr15" sera utilisé plus tard par les machines virtuelles pour accéder au stockage CephFS.

Effectuez les mêmes manipulations sur chaque hôte afin d'assurer une configuration uniforme, un élément crucial pour l'homogénéité de l'infrastructure. Il est impératif de garantir une synchronisation NTP identique entre les hôtes, car Ceph ne fonctionnera pas correctement sans cette synchronisation.

De plus, assurez-vous de contrôler et de mettre à jour le fichier "hosts" pour refléter l'adresse IP et le nom de chaque hôte Proxmox. Bien que le serveur DNS effectue cette opération, considérez cette étape de saisie comme une sauvegarde, qui pourrait s'avérer vitale pour la cohésion du cluster.

À ce stade, vous devriez être prêt à créer un cluster et à connecter vos hôtes Proxmox. Je passe volontairement les étapes de configuration SSH, d'échange de clés et autres subtilités techniques similaires. Pour la création d'un cluster Proxmox, je vous recommande de consulter la vidéo réalisée par mon papa :

Partie Ceph

Passons maintenant à la phase qui s'annonçait comme la plus complexe : la configuration de Ceph. Pour tirer pleinement parti des capacités de Ceph, il est recommandé d'avoir au moins 3 disques dédiés par machine et de connecter ces machines via un réseau à 10 Gbit/s minimum. Dans mon homelab, j'ai opté pour une configuration fonctionnelle et minimale.

💡
Après contrôle, la création d'un Ceph OSD sur un disque dur déjà utilisé par le système, utilise LVM, pour créer un nouveau volume group et un logical volume pour Ceph.

Je suis revenu sur mon disque système à l'aide de l'utilitaire cfdisk pour créer la partition destinée à l'OSD de Ceph. Vous pouvez également utiliser d'autres outils de gestion de disque tels que fdisk, selon votre préférence.

Étant donné que mon disque est de type NVMe, j'ai utilisé la commande $ cfdisk /dev/nvme0n1. J'ai créé une nouvelle partition de taille fixe (la taille doit être identique sur tous les disques des autres machines) et de type "Ceph OSD". Ensuite, j'ai enregistré les modifications (bouton "Write") et quitté l'outil. Cette procédure doit être répétée sur chaque machine.

Dans l'interface web de Proxmox, accédez à la section "Ceph" et installez les outils Ceph. Naviguez vers l'onglet "Ceph", puis dans la rubrique "OSD", et cliquez sur "Create OSD". Sélectionnez la partition que vous avez précédemment créée, et répétez cette opération sur tous les hôtes Proxmox.

Après avoir validé ces changements, Ceph est désormais opérationnel sur le même disque que votre système. Il est important de rappeler que cette solution fonctionne, mais ne garantit pas des performances optimales si vous visez un haut niveau de performance.

Pour permettre à Ceph de fonctionner, vous devez créer des Monitors, des MDS (pour CephFS, facultatif si vous n'avez pas l'intention d'utiliser CephFS) et des Managers. Je ne vais pas entrer dans les détails ici. Sur mes trois machines, j'ai configuré deux Monitors sur l'hôte n°1 et l'hôte n°3. De plus, j'ai mis en place trois Managers (un par hôte, ils se mettent en veille tant qu'au moins un est actif) et un MDS sur l'hôte n°2. Cette configuration attribue à chaque hôte un rôle spécifique et un service à exécuter.

Grâce à cette configuration, vous disposez désormais d'un stockage unifié et centralisé pour vos machines virtuelles. Il est envisageable de créer un stockage CephFS sur ces mêmes OSD, par exemple pour stocker vos images ISO et les rendre accessibles depuis n'importe quel hôte du cluster. Pour ce faire, commencez par créer un "MDS" dans l'onglet "CephFS", puis configurez le stockage CephFS. J'ai personnellement créé un CephFS avec un pg de 128 (configuration par défaut, à ajuster après des tests si nécessaire).

Et voilà !

Maintenant, vous avez un cluster Proxmox avec un stockage Ceph hyper convergé pour pas cher. À vous les joies du debugging de Ceph lorsque celui-ci commencera à être utilisé ;-)

Résultat final :

Visualisation de la page pour Ceph en particulier :

Lors de la saisie de cet article, cette configuration et ce cluster ont une vie d'une journée, sans charge dessus. RAS, aucune erreur après contrôle dans les différents fichiers de log.

Partager l'article