Some checks failed
CD - Deploy Infrastructure / Terraform Validation (push) Successful in 16s
CD - Deploy Infrastructure / Deploy on pve1 (push) Failing after 8s
CD - Deploy Infrastructure / Deploy on pve2 (push) Failing after 7s
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
- 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
135 lines
4.6 KiB
Markdown
135 lines
4.6 KiB
Markdown
# 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)
|
|
```bash
|
|
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)
|
|
```bash
|
|
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)
|
|
```bash
|
|
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 :
|
|
|
|
```bash
|
|
# 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` :
|
|
|
|
```hcl
|
|
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'
|
|
```
|