Homelab/docs/LINSTOR_TEMPLATE_SETUP.md
Tellsanguis 89e48f6f5f
Some checks failed
CD - Deploy Infrastructure / Terraform Validation (push) Successful in 17s
CD - Deploy Infrastructure / Deploy on pve1 (push) Failing after 5s
CD - Deploy Infrastructure / Deploy on pve2 (push) Failing after 5s
CD - Deploy Infrastructure / Deploy on pve3 (push) Failing after 7s
CD - Deploy Infrastructure / Validate K3s Cluster (push) Has been skipped
CD - Deploy Infrastructure / Deployment Notification (push) Failing after 1s
feat(cicd): Ajouter gestion automatique des ressources DRBD Linstor
- Créer script Python pour gérer les ressources DRBD avant déploiement
  * Vérifie l'existence des ressources Linstor
  * Crée les ressources si nécessaire avec réplication
  * Augmente la taille si elle est insuffisante
  * Noms fixes: pm-a7f3c8e1 (VMID 1000) et pm-b4d2f9a3 (VMID 1001)

- Modifier workflow CI/CD pour intégrer le script Python
  * Ajouter étape de configuration SSH avec secret LINSTOR_SSH_PRIVATE_KEY
  * Exécuter le script avant tofu apply sur pve1 et pve2

- Corriger configuration Terraform des VMs
  * Ajouter vga { type = "std" } pour Standard VGA sur toutes les VMs
  * Ajouter cpu { type = "host" } pour meilleure performance
  * Ajouter replace_triggered_by pour détecter les changements de config
  * Ajouter force_create = true sur pve3 pour gérer VM existante

- Résoudre problèmes identifiés
  * "No Bootable Device" - Résolu avec Standard VGA et CPU host
  * "vmId already in use" - Résolu avec force_create sur etcd-witness
  * Détection des modifications de VM - Résolu avec replace_triggered_by

Documentation SSH créée dans cicd_backup/SETUP_SSH_LINSTOR.md
2025-11-27 18:02:58 +01:00

4.6 KiB

Configuration des Templates LINSTOR pour Proxmox

Problème résolu

Lorsqu'on clone un template vers un storage LINSTOR dans Proxmox, les ressources LINSTOR doivent être créées automatiquement. Pour que cela fonctionne correctement, le template source doit également être sur LINSTOR.

Solution : Templates sur LINSTOR

Les templates ont été créés sur chaque nœud avec LINSTOR storage pour les nœuds avec HA, et local-lvm pour le témoin.

Templates créés

Nœud VMID Nom Template Storage
acemagician 9000 ubuntu-2404-cloudinit linstor_storage
elitedesk 9001 ubuntu-2404-cloudinit linstor_storage
thinkpad 9002 ubuntu-2404-cloudinit local-lvm

Commandes de création

Sur acemagician (LINSTOR)

qm create 9000 --name ubuntu-2404-cloudinit --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0

echo "Import du disque Linstor..."
IMPORT_OUTPUT=$(qm importdisk 9000 /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img linstor_storage 2>&1)
DISK_NAME=$(echo "$IMPORT_OUTPUT" | grep -oP "linstor_storage:\K[^']+")

if [ -z "$DISK_NAME" ]; then
    echo "ERREUR: Impossible de récupérer le nom du disque."
    exit 1
fi

echo "Disque détecté : $DISK_NAME"

qm set 9000 --scsihw virtio-scsi-pci --scsi0 linstor_storage:$DISK_NAME
qm set 9000 --ide2 linstor_storage:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1

qm template 9000
echo "✓ Template 9000 créé avec succès sur acemagician"

Sur elitedesk (LINSTOR)

qm create 9001 --name ubuntu-2404-cloudinit --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0

echo "Import du disque Linstor..."
IMPORT_OUTPUT=$(qm importdisk 9001 /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img linstor_storage 2>&1)
DISK_NAME=$(echo "$IMPORT_OUTPUT" | grep -oP "linstor_storage:\K[^']+")

if [ -z "$DISK_NAME" ]; then
    echo "ERREUR: Impossible de récupérer le nom du disque."
    exit 1
fi

echo "Disque détecté : $DISK_NAME"

qm set 9001 --scsihw virtio-scsi-pci --scsi0 linstor_storage:$DISK_NAME
qm set 9001 --ide2 linstor_storage:cloudinit
qm set 9001 --boot c --bootdisk scsi0
qm set 9001 --serial0 socket --vga serial0
qm set 9001 --agent enabled=1

qm template 9001
echo "✓ Template 9001 créé avec succès sur elitedesk"

Sur thinkpad (local-lvm)

qm create 9002 --name ubuntu-2404-cloudinit --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0

echo "Import du disque local-lvm..."
IMPORT_OUTPUT=$(qm importdisk 9002 /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img local-lvm 2>&1)
DISK_NAME=$(echo "$IMPORT_OUTPUT" | grep -oP "local-lvm:\K[^']+")

if [ -z "$DISK_NAME" ]; then
    echo "ERREUR: Impossible de récupérer le nom du disque."
    exit 1
fi

echo "Disque détecté : $DISK_NAME"

qm set 9002 --scsihw virtio-scsi-pci --scsi0 local-lvm:$DISK_NAME
qm set 9002 --ide2 local-lvm:cloudinit
qm set 9002 --boot c --bootdisk scsi0
qm set 9002 --serial0 socket --vga serial0
qm set 9002 --agent enabled=1

qm template 9002
echo "✓ Template 9002 créé avec succès sur thinkpad"

Pré-requis

L'image cloud Ubuntu 24.04 doit être téléchargée sur chaque nœud :

# Sur chaque nœud
cd /var/lib/vz/template/iso
wget https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img

Configuration Terraform

Les fichiers Terraform utilisent le template via la variable ubuntu_template :

resource "proxmox_vm_qemu" "k3s_server_1" {
  clone       = var.ubuntu_template  # "ubuntu-2404-cloudinit"
  full_clone  = true
  storage     = var.k3s_server_1_storage_pool  # "linstor_storage"
  # ...
}

Avantages de cette approche

  1. Création automatique des ressources LINSTOR : Proxmox gère automatiquement la création des ressources LINSTOR lors du clonage
  2. Pas de script Python nécessaire : Plus simple et plus natif
  3. Compatible avec le workflow GitOps : Terraform peut créer les VMs sans intervention manuelle
  4. Réutilisable : Les templates peuvent être utilisés pour créer plusieurs VMs

Dépannage

Erreur "Resource definition not found"

Si vous obtenez cette erreur, cela signifie que le template n'est pas sur LINSTOR. Recréez-le avec les commandes ci-dessus.

Le disque n'est pas détecté

Vérifiez que la regex capture bien le nom du disque après qm importdisk. Le format attendu est :

unused0: successfully imported disk 'linstor_storage:pm-XXXXX_VMID'