Accueil / Morpheus / HPE Morpheus Enterprise + HVM : créer un template Ubuntu 24.04 avec Cloud-Init

HPE Morpheus Enterprise + HVM : créer un template Ubuntu 24.04 avec Cloud-Init

Dans cet article, je m’appuie sur mon lab HPE Morpheus Enterprise Community Edition pour vous proposer un pas-à-pas concret autour du provisioning de machines virtuelles sur HVM (HPE VM Essentials).

L’objectif est de construire une image Ubuntu 24.04 de référence, puis de l’utiliser dans Morpheus pour déployer de nouvelles VM de manière simple et reproductible grâce à Cloud-Init et QEMU Guest Agent.

Nous partirons d’une VM Ubuntu classique pour créer une image réutilisable, prête à être intégrée dans le catalogue de provisioning Morpheus.

Lors de la création d’une instance, l’administrateur choisira les ressources, le réseau et renseignera une adresse IP statique. Morpheus transmettra ensuite les paramètres nécessaires à Cloud-Init afin de personnaliser automatiquement la VM : hostname, configuration réseau, gateway, DNS et accès utilisateur/SSH.

Dans mon environnement de lab, j’utilise :

VM de préparation : tpl-ubuntu-001
Virtual Image      : tpl-ubuntu-2404-hvm
VM de validation   : hvm-ubuntu-001

L’architecture logique est la suivante :

L’objectif final est d’obtenir une VM entièrement provisionnée sans correction manuelle après son démarrage.


1. Les prérequis

Pour cette mise en œuvre, nous avons besoin :

  • d’une plateforme HPE Morpheus Enterprise Community Edition opérationnelle ;
  • d’un cluster HVM ;
  • d’un datastore accessible par le cluster ;
  • d’un réseau déclaré dans Morpheus ;
  • d’un partage NFS destiné au stockage des images ;
  • d’une VM Ubuntu 24.04 qui servira à fabriquer l’image ;
  • de Cloud-Init ;
  • de QEMU Guest Agent.

Dans mon cas, le partage NFS est un prérequis de l’architecture, car je l’utilise pour centraliser le stockage des Virtual Images.


2. Préparer le stockage NFS pour les images

Avant de créer notre image Ubuntu, nous allons commencer par le stockage qui accueillera les images.

Dans Morpheus, rendez-vous dans :

Infrastructure → Storage → File Shares

Puis :

+ Add File Share

Sélectionnez le type NFS et renseignez votre serveur.

Par exemple :

Name        : FS-NFS-MORPHEUS-IMG-01
Host        : <IP_SERVEUR_NFS>
Export      : /volume1/HVM
NFS Version : 3


3. Définir le stockage des Virtual Images

Une fois le File Share créé, il peut être utilisé comme stockage des images Morpheus.

Rendez-vous dans :

Administration → Settings → Provisioning

Recherchez le paramètre :

Default Virtual Image Store

Sélectionnez votre File Share NFS :

FS-NFS-MORPHEUS-IMG-01

On obtient ainsi :

              Morpheus
                 │
                 ▼
        Virtual Image Store
                 │
                 ▼
        Partage NFS centralisé
                 │
                 ▼
         /volume1/HVM

Cela évite notamment de stocker les images sur le filesystem local de l’appliance Morpheus.


4. Préparer le Network Morpheus

Avant de travailler sur Cloud-Init, il est également important de préparer correctement le réseau.

Dans Morpheus :

Infrastructure → Network → Networks

Ouvrez le réseau destiné aux VM puis Edit.

Dans notre exemple :

Name          : NET-PROD-SRV
CIDR          : 10.10.20.0/24
Gateway       : 10.10.20.1
Primary DNS   : 10.10.10.10
Secondary DNS : 10.10.10.11

Ces adresses sont uniquement des exemples.

Les informations importantes sont :

CIDR
Gateway
Primary DNS
Secondary DNS

Dans notre configuration, nous n’utilisons pas d’IP Pool.

L’adresse IP de la VM sera saisie manuellement lors de Add Instance.

Le fonctionnement sera donc :

Add Instance
     │
     ├── Network
     │
     └── Static IP
             │
             ▼
          Morpheus
             │
     Network configuration
       ├── CIDR
       ├── Gateway
       └── DNS
             │
             ▼
       Cloud-Init
             │
             ▼
          Ubuntu

C’est un point à ne pas négliger : si Gateway ou DNS ne sont pas renseignés dans le Network Morpheus, Cloud-Init ne pourra pas les intégrer correctement à la configuration de la VM.


5. Créer la VM de préparation

Nous allons maintenant créer une VM Ubuntu 24.04 classique sur HVM.

Dans mon environnement, je l’ai appelée :

tpl-ubuntu-001

Cette VM ne sera pas utilisée en production. Elle sert uniquement à construire notre image de référence.

La séquence est :


6. Mettre Ubuntu à jour

Sur tpl-ubuntu-001 :

sudo apt update
sudo apt upgrade -y

Puis :

sudo apt autoremove -y
sudo apt clean

Je préfère réaliser cette mise à jour avant la capture afin de partir sur une image aussi propre que possible.


7. Installer Cloud-Init

Installez Cloud-Init :

sudo apt install -y cloud-init

Vérifiez :

cloud-init --version

Puis :

systemctl status cloud-init

Cloud-Init repose notamment sur les composants :

cloud-init-local
cloud-init
cloud-config
cloud-final

8. Configurer la datasource NoCloud

Pour HVM, nous allons utiliser la datasource NoCloud.

Regardez d’abord la configuration :

ls -la /etc/cloud/cloud.cfg.d/

Puis :

grep -R "datasource_list" /etc/cloud/cloud.cfg.d/

Configurez si nécessaire :

sudo vi /etc/cloud/cloud.cfg.d/90_dpkg.cfg

avec :

datasource_list: [ NoCloud, None ]

Vérifiez :

grep -R "datasource_list" /etc/cloud/cloud.cfg.d/

Nous voulons retrouver :

datasource_list: [ NoCloud, None ]

Lors du provisioning, Cloud-Init pourra ainsi exploiter les données fournies à la VM pour appliquer la personnalisation du système.


9. Installer QEMU Guest Agent

Il faut également installer QEMU Guest Agent dans notre image Ubuntu HVM.

sudo apt install -y qemu-guest-agent

Sur Ubuntu 24.04, ne soyez pas surpris si :

sudo systemctl enable qemu-guest-agent

indique que l’unité est static.

Il n’est pas nécessaire de forcer son activation de cette manière.

Vérifiez plutôt :

systemctl status qemu-guest-agent --no-pager

Nous voulons obtenir :

Active: active (running)

10. Vérifier le canal VirtIO

Le QEMU Guest Agent communique avec l’hyperviseur à travers un canal VirtIO.

Vérifiez :

ls -la /dev/virtio-ports/

Vous devez retrouver :

org.qemu.guest_agent.0

Par exemple :

org.qemu.guest_agent.0 -> ../vport2p1

Le fonctionnement est donc :

             HVM / QEMU
                  │
             VirtIO Serial
                  │
                  ▼
 /dev/virtio-ports/org.qemu.guest_agent.0
                  │
                  ▼
          qemu-guest-agent
                  │
                  ▼
                Ubuntu

Cette vérification est particulièrement utile si Morpheus affiche :

Guest Ready Status Failed..
Is QEMU Guest Tools Installed?

11. Vérifier Cloud-Init

Avant de généraliser la machine :

cloud-init status --long

Nous voulons :

status: done

En cas de problème, les deux fichiers à consulter en priorité sont :

sudo less /var/log/cloud-init.log

et :

sudo less /var/log/cloud-init-output.log

12. Vérifier les paramètres Cloud-Init de Morpheus

Morpheus possède également des paramètres Cloud-Init globaux.

Rendez-vous dans :

Administration → Settings → Provisioning

Puis recherchez la section concernant Cloud-Init.

Selon votre configuration, vous pouvez notamment y définir les paramètres utilisés pour la création des utilisateurs et l’accès aux VM.

Pour une infrastructure industrialisée, je privilégie un compte d’administration dédié et une authentification par clé SSH, plutôt qu’un mot de passe intégré à l’image.


13. Généraliser tpl-ubuntu-001

À ce stade, tpl-ubuntu-001 fonctionne, mais elle contient encore des éléments propres à cette machine.

Nous devons les supprimer avant de fabriquer notre image.

Nettoyer Cloud-Init

sudo cloud-init clean --logs

Le prochain clone pourra ainsi exécuter une nouvelle initialisation Cloud-Init.

Nettoyer machine-id

sudo truncate -s 0 /etc/machine-id

Puis :

sudo rm -f /var/lib/dbus/machine-id

Chaque nouvelle VM générera sa propre identité.

Supprimer les clés SSH hôte

sudo rm -f /etc/ssh/ssh_host_*

Chaque VM créée depuis l’image générera ainsi ses propres clés SSH hôte.

On évite donc que :

hvm-ubuntu-001
hvm-ubuntu-002
hvm-ubuntu-003

partagent toutes la même identité SSH.


14. Nettoyer Netplan

C’est particulièrement important puisque nous utilisons des IP statiques différentes pour chaque VM.

Vérifiez :

ls -la /etc/netplan/

Puis :

cat /etc/netplan/*.yaml

L’image ne doit pas conserver l’adresse IP utilisée par tpl-ubuntu-001.

Si le fichier généré pour cette VM est :

/etc/netplan/50-cloud-init.yaml

et qu’il contient sa configuration réseau spécifique, supprimez-le :

sudo rm -f /etc/netplan/50-cloud-init.yaml

Le principe est :

tpl-ubuntu-001
10.10.20.100
      │
      │ nettoyage
      ▼
tpl-ubuntu-2404-hvm
Aucune IP propre au template
      │
      │ nouveau provisioning
      ▼
hvm-ubuntu-001
10.10.20.150

Les adresses ci-dessus ne sont que des exemples.


15. Dernières vérifications

Avant d’arrêter tpl-ubuntu-001, vérifiez les packages :

dpkg -l | grep -E 'cloud-init|qemu-guest-agent'

Vérifiez la datasource :

grep -R "datasource_list" /etc/cloud/cloud.cfg.d/

Vous devez retrouver :

datasource_list: [ NoCloud, None ]

Et vérifiez une dernière fois Netplan :

ls -la /etc/netplan/

Aucune adresse IP propre à tpl-ubuntu-001 ne doit rester dans l’image.


16. Arrêter le template

Arrêtez maintenant la VM :

sudo shutdown -h now

À partir de ce moment, ne redémarrez plus tpl-ubuntu-001 avant sa capture.

Un redémarrage pourrait recréer certains éléments que nous venons volontairement de nettoyer.


17. Créer l’image tpl-ubuntu-2404-hvm

Dans Morpheus, la gestion des images se trouve dans :

Library → Virtual Images

À partir de tpl-ubuntu-001, créez/importez votre image de référence.

Dans mon cas, elle s’appelle :

tpl-ubuntu-2404-hvm

La nomenclature permet immédiatement d’identifier :

tpl
 │
 ├── ubuntu
 │
 ├── 2404
 │
 └── hvm

On pourra ensuite facilement avoir :

tpl-ubuntu-2404-hvm
tpl-ubuntu-2604-hvm
tpl-rocky-10-hvm
tpl-debian-13-hvm

18. Configurer la Virtual Image

Dans :

Library → Virtual Images → tpl-ubuntu-2404-hvm

puis Edit.

Vérifiez les propriétés de l’image.

En particulier :

Operating System
Ubuntu 24.04

Cloud Init Enabled?
YES

VirtIO Drivers Loaded?
YES

L’image étant destinée à HVM/KVM, les pilotes VirtIO doivent être disponibles.

Cloud-Init User Data

Vous trouverez également :

Cloud-Init User Data

Pour cette première image :

laissez ce champ vide.

Nous n’avons pas besoin d’ajouter de runcmd ou de configuration Cloud-Init personnalisée.

Notre objectif est d’abord d’obtenir une image générique et fiable.


19. VM Tools / Guest Tools

Selon votre version de Morpheus, vous pouvez également rencontrer un paramètre relatif aux VM Tools dans les propriétés de l’image.

Dans notre cas, le point essentiel est que qemu-guest-agent soit installé dans Ubuntu et que le canal :

/dev/virtio-ports/org.qemu.guest_agent.0

soit disponible.

Cela permet à HVM/Morpheus de récupérer correctement l’état du guest.


20. Vérifier le stockage de l’image

Puisque nous avons configuré le partage NFS comme stockage des Virtual Images, vérifiez que tpl-ubuntu-2404-hvm est correctement stockée et disponible depuis ce Storage Provider.

Notre architecture est maintenant :

                 Morpheus
                    │
                    ▼
            Library / Virtual Images
                    │
                    ▼
          tpl-ubuntu-2404-hvm
                    │
                    ▼
             NFS Image Store
                    │
                    ▼
                Cluster HVM

Le stockage NFS constitue donc bien un prérequis de cette implémentation.


21. Préparer les Service Plans

Le Service Plan permet de proposer des tailles de VM standardisées.

Je préfère proposer quelques tailles simples plutôt que de laisser les utilisateurs choisir n’importe quelle combinaison CPU/RAM.

Par exemple :

PlanvCPURAM
PLN-XS24 Go
PLN-S28 Go
PLN-M416 Go
PLN-L832 Go
PLN-XL1664 Go

Cela devient également très pratique lorsqu’on utilise les quotas Morpheus au niveau des tenants.


22. Déployer hvm-ubuntu-001

Nous pouvons maintenant faire le véritable test de notre image.

Dans Morpheus :

Provisioning → Instances

Cliquez sur :

+ Add

Sélectionnez l’Instance Type HVM proposé par votre environnement.

Dans l’assistant, sélectionnez votre contexte :

Group       : <GROUP>
Cloud       : <CLOUD-HVM>
Environment : <ENVIRONMENT>

Name
hvm-ubuntu-001

23. Sélectionner l’image

Dans la partie configuration de l’instance, sélectionnez :

Virtual Image
tpl-ubuntu-2404-hvm

Puis le Service Plan souhaité.

Par exemple :

Plan
PLN-S

CPU
2 vCPU

RAM
8 Go

Configurez également la taille du disque si nécessaire.


24. Sélectionner le réseau

Dans la section Networks, sélectionnez le Network Morpheus précédemment configuré :

NET-PROD-SRV

Morpheus connaît déjà :

CIDR
Gateway
Primary DNS
Secondary DNS

25. Renseigner l’adresse IP statique

Pour cette implémentation, l’adresse est saisie directement lors du Add Instance.

Par exemple :

Network
NET-PROD-SRV

IP Address
10.10.20.150

Encore une fois, cette adresse est fictive.

Il n’y a volontairement aucun IP Pool dans notre architecture.

L’administrateur fournit :

hvm-ubuntu-001
      │
      ├── Plan
      ├── Network
      └── Static IP
             │
             ▼
          Morpheus
             │
             ├── IP saisie
             ├── CIDR
             ├── Gateway
             └── DNS
                  │
                  ▼
            Cloud-Init
                  │
                  ▼
               Ubuntu

26. Lancer le provisioning

Cliquez sur :

Provision

Morpheus utilise alors tpl-ubuntu-2404-hvm pour construire :

hvm-ubuntu-001

Cloud-Init reçoit les informations nécessaires à la personnalisation de la VM.

Pour le premier déploiement de validation, je recommande de ne rien modifier manuellement dans Ubuntu.

Le but est précisément de vérifier que le provisioning est entièrement fonctionnel.


27. Vérifier Cloud-Init sur hvm-ubuntu-001

Une fois la VM démarrée :

cloud-init status --long

Résultat attendu :

status: done

28. Vérifier le hostname

hostnamectl

Vous devez retrouver :

hvm-ubuntu-001

29. Vérifier l’adresse IP

ip addr

L’adresse doit correspondre exactement à celle saisie dans Add Instance.


30. Vérifier la gateway

ip route

Vous devez retrouver une route par défaut :

default via <GATEWAY>

Cette gateway doit correspondre à celle définie dans :

Infrastructure → Network → Networks → NET-PROD-SRV


31. Vérifier les DNS

resolvectl status

Vous devez retrouver les DNS configurés dans le Network Morpheus.

Par exemple :

DNS Servers:
10.10.10.10
10.10.10.11

Ces valeurs sont fictives.


32. Vérifier QEMU Guest Agent

Sur hvm-ubuntu-001 :

systemctl status qemu-guest-agent --no-pager

Résultat attendu :

Active: active (running)

Puis :

ls -la /dev/virtio-ports/

Nous devons retrouver :

org.qemu.guest_agent.0

33. Vérifier le provisioning dans Morpheus

Retournez dans :

Provisioning → Instances → hvm-ubuntu-001

La VM doit être :

Running

Consultez également :

Provisioning → Instances → hvm-ubuntu-001 → History

Le provisioning doit s’être terminé correctement.

Le résultat attendu est donc :

Morpheus
   │
   ▼
hvm-ubuntu-001
   │
   ├── Running
   ├── Cloud-Init OK
   ├── Network OK
   ├── QEMU Guest Agent OK
   └── Guest Ready OK

34. Checklist de validation

Voici la checklist que je conserve pour valider une nouvelle image :

ÉlémentCommande / emplacementRésultat attendu
Cloud-Initcloud-init status --longdone
Hostnamehostnamectlhvm-ubuntu-001
Adresse IPip addrIP saisie dans Morpheus
Gatewayip routeGateway du Network
DNSresolvectl statusDNS du Network
QEMU Agentsystemctl status qemu-guest-agentactive (running)
VirtIO/dev/virtio-ports/org.qemu.guest_agent.0
MorpheusInstanceRunning
ProvisioningHistorySuccess
Guest ReadyInstanceOK

Si tous ces contrôles sont bons, tpl-ubuntu-2404-hvm peut être considérée comme une image de référence validée.


35. Diagnostic Cloud-Init

En cas de problème :

cloud-init status --long

Puis :

sudo less /var/log/cloud-init.log

et :

sudo less /var/log/cloud-init-output.log

Pour examiner les informations connues de Cloud-Init :

sudo cloud-init query --all

36. Diagnostic réseau

Si la VM récupère son IP mais pas sa gateway ou ses DNS :

ip addr
ip route
resolvectl status

Puis :

cat /etc/netplan/*.yaml

Avant de modifier Ubuntu, vérifiez surtout dans Morpheus :

Infrastructure → Network → Networks → NET-PROD-SRV → Edit

et contrôlez :

CIDR
Gateway
Primary DNS
Secondary DNS

Cloud-Init ne pourra transmettre que les informations correctement définies dans Morpheus.


37. Diagnostic QEMU Guest Agent

Si Morpheus indique :

Guest Ready Status Failed..
Is QEMU Guest Tools Installed?

vérifiez :

systemctl status qemu-guest-agent --no-pager

Puis :

ls -la /dev/virtio-ports/

Enfin :

journalctl -u qemu-guest-agent --no-pager -n 50

Nous voulons :

qemu-guest-agent
└── active (running)

/dev/virtio-ports/
└── org.qemu.guest_agent.0

Si l’agent est installé mais que org.qemu.guest_agent.0 n’existe pas, le diagnostic doit alors se poursuivre côté HVM/présentation du canal VirtIO.


38. Diagnostic du stockage NFS

Si Morpheus rencontre un problème lors de l’utilisation d’une image, vérifiez également le stockage NFS.

Depuis l’appliance :

showmount -e <IP_SERVEUR_NFS>

Puis, si nécessaire :

sudo mount -v -t nfs \
  -o vers=3 \
  <IP_SERVEUR_NFS>:/volume1/HVM \
  /mnt/test-hvm

Testez ensuite l’écriture :

touch /mnt/test-hvm/test-morpheus
rm /mnt/test-hvm/test-morpheus

Un problème de stockage d’image peut être totalement indépendant de Cloud-Init. Il faut donc bien séparer :

Stockage NFS
     │
     └── disponibilité de l’image

Cloud-Init
     │
     └── personnalisation de la VM

QEMU Guest Agent
     │
     └── communication HVM ↔ Guest

Cette séparation facilite énormément le diagnostic.


Architecture finale

Au terme de cette configuration, nous obtenons :

Conclusion

Avec cette configuration, nous disposons maintenant d’une chaîne de provisioning Ubuntu reproductible sur HPE Morpheus Enterprise Community Edition + HVM.

La VM tpl-ubuntu-001 sert uniquement à construire et maintenir notre image de référence :

tpl-ubuntu-001
        │
        ▼
tpl-ubuntu-2404-hvm
        │
        ▼
   Morpheus / HVM
        │
        ▼
hvm-ubuntu-001

L’image reste volontairement générique : aucune IP, gateway, DNS ou identité machine propre à la VM de préparation n’est conservée.

Au moment du Add Instance, l’administrateur fournit l’adresse IP statique et choisit le Network. Morpheus connaît le CIDR, la gateway et les DNS et transmet ces informations à Ubuntu via Cloud-Init.

Enfin, QEMU Guest Agent permet à HVM de communiquer correctement avec le système invité et d’obtenir le Guest Ready Status.

Cette première image validée fournit une bonne base pour construire progressivement une bibliothèque standardisée :

tpl-ubuntu-2404-hvm
tpl-ubuntu-2604-hvm
tpl-rocky-10-hvm
tpl-debian-13-hvm

On pourra ensuite aller plus loin avec les Service Plans, Instance Types, permissions par tenant, quotas, workflows de post-provisioning et cycle de maintenance/versioning des images.

Sources et documentation HPE

  • Préparation d’une image Linux Ubuntu 24.04 pour un cluster HVM — C’est probablement la source la plus importante pour ton article : HPE y décrit spécifiquement la préparation d’Ubuntu 24.04 pour HVM, l’import dans Library → Virtual Images et le provisioning.
    HPE — Configuring Linux images for use with HVM Clusters
  • Provisioning d’une VM sur HVM — Explique le workflow Provisioning → Instances, le choix du Plan, du cluster HVM, du stockage, du réseau et de l’image.
    HPE — Provisioning a Workload on HVM
  • Création détaillée d’une Instance HVM — Très utile pour les menus de ton tuto : Provisioning → Instances → + ADD → HVM, puis Group, Cloud, Layout, Plan, Resource Pool, Volumes, Network, Image et Host.
    HPE — Create Instance
  • Fonctionnement interne du provisioning — Explique les différentes étapes : recherche de la Virtual Image, clone, redimensionnement, Cloud-Init, ISO de metadata, attente du réseau et finalisation. C’est également cette page qui confirme que les informations Network, Machine et User peuvent être fournies via l’ISO Cloud-Init.
    HPE — VM Provision Steps
  • Configuration des Virtual Images — Documente notamment Cloud Init Enabled?, Storage Provider, Cloud-Init User Data, les credentials et les paramètres des images. Il confirme aussi que des Storage Providers supplémentaires peuvent être configurés dans Infrastructure → Storage.
    HPE — Virtual Images configuration
  • Virtual Images et Cloud-Init — Autre page HPE utile pour comprendre l’intégration Cloud-Init et les paramètres globaux configurables dans Administration → Settings → Provisioning.
    HPE — Virtual Images / Blueprints

Étiquetté :