Déploiement avec OpenTofu sur LINSTOR DRBD : le début des problèmes
Après avoir choisi LINSTOR DRBD comme solution de stockage distribué pour mon cluster Proxmox HA, il était temps de passer à l'automatisation du déploiement avec OpenTofu (fork open-source de Terraform). Spoiler : ça ne s'est pas passé comme prévu.
Rappel du contexte
Dans mon article précédent sur le choix d'une technologie de stockage distribué, j'avais opté pour LINSTOR DRBD plutôt que Ceph pour plusieurs raisons :
- Performance supérieure : LINSTOR DRBD utilise la réplication synchrone au niveau bloc via DRBD, offrant de meilleures performances que Ceph sur un réseau 1 Gbps
- Simplicité d'architecture : Pas besoin de monitors, managers et OSDs comme avec Ceph
- Consommation de ressources : Plus léger en RAM et CPU
Mon infrastructure se compose de :
- 3 nœuds Proxmox : acemagician (192.168.100.10), elitedesk (192.168.100.20), thinkpad (192.168.100.30)
- Configuration LINSTOR : thinkpad = contrôleur, acemagician/elitedesk = satellites
- Pools de stockage :
linstor_storage(répliqué DRBD),local-lvm(stockage local)
Le problème : LINSTOR ne peut pas provisionner dynamiquement les VM
Quand j'ai tenté de déployer mes VMs K3s avec OpenTofu en utilisant le provider Proxmox, j'ai rencontré une erreur systématique :
Error: error creating VM: error cloning vm: 500 Internal Server Error:
unable to create VM 1000 - lvcreate 'linstor_storage/vm-1000-disk-0' error:
Exited with error code 1: Resource definition 'vm-1000-disk-0' not found.
Ma configuration OpenTofu était pourtant classique :
resource "proxmox_vm_qemu" "k3s_server_1" {
name = "k3s-server-1"
target_node = "acemagician"
clone = "ubuntu-2404-cloudinit"
vmid = 1000
disk {
storage = "linstor_storage"
size = "100G"
}
}
Pourquoi ça échoue ?
LINSTOR utilise un modèle d'objets hiérarchique strict :
- Resource Definition : Template pour une ressource de stockage
- Volume Definition : Taille et propriétés du volume
- Resource : Instance réelle du stockage sur un nœud
Le workflow normal de LINSTOR nécessite de créer ces objets manuellement :
linstor resource-definition create mydata
linstor volume-definition create mydata 100G
linstor resource create node1 mydata --storage-pool linstor_storage
linstor resource create node2 mydata --storage-pool linstor_storage
Le problème : Quand Proxmox tente de cloner une VM vers LINSTOR :
- Proxmox appelle
lvcreatepour créer le nouveau disque - Le plugin LINSTOR cherche la resource definition
vm-XXX-disk-0 - La resource definition n'existe pas (Proxmox assume une création dynamique)
- L'opération échoue
LINSTOR ne peut pas créer dynamiquement des resource definitions pendant les opérations de clonage Proxmox. C'est une limitation fondamentale de l'architecture.
