Pour re-internaliser mes services et continuer la découverte d'outil, j'ai décidé de créer un homelab. Le cluster de serveurs Proxmox est en place, de même que le stockage, c'est donc le moment de créer les machines qui vont contenir le cluster k3s.

Rappels :

Création d'un modèle de machine virtuelle

Grâce à l'outil Packer (article dédié à ce sujet), j'ai créé deux modèles de machine virtuelle, un sous Debian 12.4 et l'autre sous Ubuntu 22.04. Le modèle généré comporte de base quelques paquets communs, le noyau 6.x, WireGuard, sudo et les outils pour XFS. Naturellement, le paquet "qemu-guest-agent" est installé pour une intégration optimale avec QEMU/KVM.

Pour les distributions, je pars sur le partitionnement suivant :

  • partition "boot"+EFI
  • utilisation de LVM pour toutes les partitions
    • un volume logique "system" formaté en XFS (avec l'option discard)
    • un volume logique "home" formaté en EXT4 (avec les options "nodev,nosuid,noexec")
    • un volume logique "tmp" formaté en EXT4 (avec les options "nodev,nosuid,noexec")
    • un volume logique "swap", pour la swap.

Toutes les sources quant aux modèles sont disponibles sur le dépôt GitHub à cette adresse : https://github.com/julienhmmt/homelab/tree/main/packer. Les quelques commandes Packer à lancer sont les suivantes :

$ packer init -upgrade debian12.pkr.hcl
$ packer fmt -recursive -diff .
$ packer validate .
$ packer build -on-error=ask -force -var-file=customdeb12.pkrvars.hcl debian12.pkr.hcl

Le modèle se génère en une dizaine de minutes, me permettant d'avoir une image prête à l'emploi.

Création des machines virtuelles pour k3s

Le modèle est utilisé par OpenTofu (ou Terraform) pour créer trois machines virtuelles, une par hôte Proxmox. Chaque machine dispose de la même configuration matérielle et logicielle.

Au travers d'OpenTofu, j'effectue un clone "complet" du modèle, en spécifiant des paramètres tels que les tags, les cartes réseaux, la quantité de RAM, CPU, espace disque et l'adresse IP des machines.

Le code OpenTofu créé a été variabilisé pour permettre le maximum de personnalisation sans toucher au socle de base. Les sources créées se trouvent à cette adresse, sur GitHub : https://github.com/julienhmmt/homelab/tree/main/terraform/30vm-k3s.

Comme vu précédemment, il y a trois machines virtuelles pour construire le cluster k3s, une par hôte physique. Chacune dispose de la configuration suivante :

  • 1 socket, 2 vCPU ;
  • 8 Go de RAM ;
  • 1 carte réseau connectée au pont réseau "public" ;
  • un disque dur virtuel de 64 Go (c'est faible, pour l'instant ce n'est que du test donc pas besoin d'avoir plus de place).

En cinq commandes, j'initialise le dépôt, je corrige les erreurs de syntaxe (non bloquant), je valide le fichier, je planifie et lance le déploiement.

$ tofu init -upgrade
$ tofu fmt -recursive -diff .
$ tofu validate
$ tofu plan -out tfplan
$ tofu apply tfplan

En moins de 10 minutes, les machines sont générées et démarrées, en plus d'être prêtes à l'emploi. Avec ce code, je peux reproduire à foison les machines si je décèle le moindre problème. J'ai testé des dizaines de fois le code (et donc la création des machines) avec succès - un gain de temps appréciable lors des phases de tests.

Maintenant que les machines sont générées, installons k3s sur les machines virtuelles et créons le cluster Kubernetes.

Partager l'article