Bring Your Own Image (BYOI)

Voir en Markdown

Découvrez comment déployer facilement vos propres images sur des serveurs dédiés

Objectif

La fonctionnalité Bring Your Own Image (BYOI) vous permet de déployer des images cloudready directement sur votre serveur dédié. Vous pouvez ainsi utiliser le service bare metal comme ressource pour vos déploiements.

Que signifie cloudready ?

La norme cloudready signifie généralement être agnostique de l’infrastructure sur laquelle l’image est déployée. En plus des prérequis et limitations mentionnés ci-dessous, vous devez vous assurer que l'image (téléchargée ou générée) répond correctement à la définition des attentes techniques d'une image cloudready.

Ce guide vous explique comment utiliser Bring Your Own Image (BYOI) sur votre serveur dédié OVHcloud.

Prérequis

Info

Pour appliquer les personnalisations OVHcloud au premier démarrage, votre image doit inclure cloud-init ou une alternative compatible (par exemple nuageinit sur FreeBSD).


Accès à l'espace client OVHcloud

  • Lien direct :
  • Pour accéder à vos services : Bare Metal Cloud > Serveurs dédiés > Sélectionnez votre serveur

Warning

Tout comme une installation OS classique, une nouvelle installation par BYOI effacera l'intégralité des données présentes sur le serveur.

En pratique

Limites techniques :

Certaines limites techniques sont liées à l’utilisation de produits physiques comme les serveurs dédiés. Voici une liste non exhaustive à garder à l'esprit lors de la préparation de votre déploiement :

  • Type de démarrage : uefi ou legacy
  • Type de partition : MBR ou GPT
  • Format de l'image : qcow2 ou raw
Warning

À propos du RAID :

  • Bring Your Own Image (BYOI) ne prend pas en charge la configuration RAID logicielle au moment de l'installation, mais vous pouvez utiliser le service Bring Your Own Linux (BYOLinux) pour le faire. Choisissez le type d'installation personnalisée le plus adapté : Comparaison entre Bring Your Own Image (BYOI) et Bring Your Own Linux (BYOLinux).

  • BYOI déploie l'image sur un seul disque : le premier disque du groupe de disques cible.

  • Le RAID matériel fonctionne sur les serveurs équipés d'un contrôleur RAID, car il présente la matrice au système d'exploitation comme un seul disque virtuel.

Méthodes de déploiement :

  • Déploiement via l'espace client : vous permet de déployer simplement votre image depuis l'espace client OVHcloud.
  • Déploiement via API : vous pouvez utiliser l’API OVHcloud pour intégrer des images dans vos propres scripts afin d’automatiser les déploiements.

Déploiement de votre image via l’espace client

Dans l'onglet Informations générales, cliquez sur le bouton ... à côté de « Système (OS) » puis cliquez sur Installer.

BringYourOwnImage Control Panel 01

À l'étape suivante, sélectionnez Personnalisé dans le menu puis Bring Your Own Image - byoi et cliquez sur Suivant.

BringYourOwnImage Control Panel 03

Vous allez être redirigé vers la page de configuration. Assurez-vous que l'URL de votre image est au bon format. Remplissez le reste des champs obligatoires de cette page. Une fois que vous avez confirmé que les informations sont correctes, cliquez sur Confirmer.

Vous trouverez plus de détails sur les options dans la section « options de déploiement » ci-dessous.

BringYourOwnImage Control Panel 04

Déploiement de votre image via l'API

Connectez-vous sur https://api.ovh.com/ puis rendez-vous dans la section /dedicated/server.

Le contenu de la requête API de Bring Your Own Image (BYOI) doit être similaire au fichier JSON suivant :

Warning

Dans la section customizations, seuls les champs imageURL, imageType et efiBootloaderPath sont obligatoires.

{
  "operatingSystem": "byoi_64",
  "customizations": {
    "hostname": "mon-tux",
    "imageURL": "https://cdimage.debian.org/cdimage/cloud/bullseye/20230124-1270/debian-11-generic-amd64-20230124-1270.raw",
    "imageType": "raw",
    "sshKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC9xPpdqP3sx2H+gcBm65tJEaUbuifQ1uGkgrWtNY0PRKNNPdy+3yoVOtxk6Vjo4YZ0EU/JhmQfnrK7X7Q5vhqYxmozi0LiTRt0BxgqHJ+4hWTWMIOgr+C2jLx7ZsCReRk+fy5AHr6h0PHQEuXVLXeUy/TDyuY2JPtUZ5jcqvLYgQ== my-nuclear-power-plant",
    "efiBootloaderPath": "\\efi\\debian\\grubx64.efi",
    "imageCheckSum": "2cbd3dd5606ef95a5cfa47943b3ad453fcc43522915be7f559a296a71395f82f88e621e558df7aa5f3d2e62c20043f9430ad18c900e565a1c070066e8d008aaa",
    "httpHeaders": {
      "Authorization": "Basic bG9naW46cGFzc3dvcmQ="
    },
    "imageCheckSumType": "sha512",
    "configDriveUserData": "I2Nsb3VkLWNvbmZpZwpzc2hfYXV0aG9yaXplZF9rZXlzOgogIC0gc3NoLXJzYSBBQUFBQjhkallpdz09IG15c2VsZkBteWRvbWFpbi5uZXQKCnVzZXJzOgogIC0gbmFtZTogcGF0aWVudDAKICAgIHN1ZG86IEFMTD0oQUxMKSBOT1BBU1NXRDpBTEwKICAgIGdyb3VwczogdXNlcnMsIHN1ZG8KICAgIHNoZWxsOiAvYmluL2Jhc2gKICAgIGxvY2tfcGFzc3dkOiBmYWxzZQogICAgc3NoX2F1dGhvcml6ZWRfa2V5czoKICAgICAgLSBzc2gtcnNhIEFBQUFCOGRqWWl3PT0gbXlzZWxmQG15ZG9tYWluLm5ldApkaXNhYmxlX3Jvb3Q6IGZhbHNlCnBhY2thZ2VzOgogIC0gdmltCiAgLSB0cmVlCmZpbmFsX21lc3NhZ2U6IFRoZSBzeXN0ZW0gaXMgZmluYWxseSB1cCwgYWZ0ZXIgJFVQVElNRSBzZWNvbmRzCg=="
  }
}

Même si configDriveUserData peut être envoyé à l'API directement en clair en échappant les bons caractères, il est recommandé d'envoyer à l'API le script encodé en base64 en utilisant par exemple la commande UNIX/Linux suivante :

cat my-data.yaml | base64 -w0

Voici la version en clair de configDriveUserData de l'exemple ci-dessus :

#cloud-config
ssh_authorized_keys:
  - ssh-rsa AAAAB8djYiw== myself@mydomain.net

users:
  - name: patient0
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, sudo
    shell: /bin/bash
    lock_passwd: false
    ssh_authorized_keys:
      - ssh-rsa AAAAB8djYiw== myself@mydomain.net
disable_root: false
packages:
  - vim
  - tree
final_message: The system is finally up, after $UPTIME seconds

Une fois les champs complétés, démarrez le déploiement en cliquant sur Execute.

Options de déploiement

ChampDescriptionObligatoire
customizations/hostnameHostname
customizations/sshKeyClé publique SSH
customizations/imageURLURL de l'image
customizations/imageTypeType/format de l'image (qcow2, raw)
customizations/imageCheckSumChecksum de l'image
customizations/imageCheckSumTypeType de checksum de l'image (md5, sha1, sha256, sha512)❌ (sauf si checksum fourni)
customizations/configDriveUserDataDonnées utilisateur (user-data) cloud-init¹
customizations/configDriveMetadataMétadonnées cloud-init personnalisées, exposées sous la clé meta de meta_data.json
customizations/httpHeaders?KeyClé des en-têtes HTTP❌²
customizations/httpHeaders?ValueValeur des en-têtes HTTP❌²
userMetadata/efiBootloaderPathChemin du bootloader EFI✅³

¹ Données utilisateur cloud-init standard — généralement un document #cloud-config ou un script (voir les exemples officiels de cloud-init). Équivalent à server create --user-data <fichier> chez OpenStack. Sa représentation JSON doit être sur une seule ligne avec \n pour les retours à la ligne, car les chaînes JSON ne peuvent pas contenir de retours à la ligne littéraux.
² À utiliser uniquement si vous avez besoin d'en-têtes HTTP, tels que Basic Auth
³ Le chemin du bootloader EFI est utilisé par iPXE pour démarrer votre système d'exploitation. Pour plus d'informations, consultez notre guide « Comprendre le processus de démarrage des serveurs dédiés ». Exemples :

Info

Les chemins ci-dessous utilisent l'échappement JSON : \\ représente un seul antislash. Par exemple, \\efi\\debian\\grubx64.efi correspond au chemin \efi\debian\grubx64.efi.

Système d'exploitationefiBootloaderPath
Debian\\efi\\debian\\grubx64.efi
Ubuntu\\efi\\ubuntu\\grubx64.efi
Windows\\efi\\microsoft\\boot\\bootmgfw.efi
FreeBSD\\efi\\FreeBSD\\loader.efi
Alma\\efi\\almalinux\\shimx64.efi
Arch Linux\\efi\\arch\\grubx64.efi
Gentoo\\efi\\boot\\bootx64.efi

⁴ Objet JSON de couples clé/valeur arbitraires, équivalent à server create --property clé=valeur chez OpenStack. Les couples sont écrits dans le meta_data.json du config drive sous la clé meta, où cloud-init peut les lire. Exemple : "configDriveMetadata": {"role": "webserver", "env": "prod"} devient "meta": {"role": "webserver", "env": "prod"} dans meta_data.json. Voir la documentation du service de métadonnées OpenStack pour le schéma complet.

Info

Lorsque vous renseignez l'une des personnalisations de cette page, OVHcloud ajoute une petite partition de config drive lors de l'installation ; sinon, aucun config drive n'est créé. Cloud-init la lit au premier démarrage. Renseignez configDriveUserData pour ajouter vos propres données utilisateur (user-data) cloud-init.

Les erreurs clients fréquentes

Le tableau suivant donne un aperçu des erreurs clients les plus connues et de la manière de les corriger.

Message d'erreurDétailsSolution(s)
Please provide checkSum AND checkSumType or none of themVous avez précisé l'un des 2 champs parmi : imageCheckSum et imageCheckSumType.Précisez les 2 valeurs ou aucune d'entre elles.
image provided format is x which does not match expected qcow2 formatPeu importe l'extension du fichier, son format réel doit être qcow2.- Changer la valeur de imageType à raw.
- Convertissez votre image au format qcow2.
image provided has a size of n bytes which is larger than device of m bytesL'image spécifiée a une taille supérieure à celle du disque choisi pour l'installation.- Si votre serveur possède plusieurs grappes de disques, vous pouvez réessayer une installation sur une autre grappe de disques à l'aide de l'argument diskgroupid.
- Vous devez réduire la taille de votre image.
Can't write t on diskImpossible d'écrire l'image qcow2/raw sur le disque.Modifier votre image de telle sorte que la commande qemu-img convert -f "$imageType" -O raw $pathToImageFile "$device" fonctionne.
Could not download, t image is too big to download in memory.Il n'y a pas assez d'espace en RAM pour télécharger l'image.Réduisez la taille de votre image.
Could not download image: <message d'erreur>Impossible de télécharger l'image depuis imageURL.Vérifiez qu'un téléchargement avec curl depuis votre serveur en rescue fonctionne. Si des en-têtes HTTP sont requis, vous devez les spécifier à l'aide des paramètres httpHeaders.
image provided format is not of type raw because no partition table was found. It seems to contain: xUne image de type raw doit contenir une table de partitionsVérifiez que votre image contient bien une table de partitions.
Bad checkSumType for downloaded file, got : n while expecting m.Le checksum est incorrect.- Assurez-vous de spécifier le bon checksum
- Vérifiez qu'un téléchargement avec curl depuis votre serveur en rescue fonctionne.

Aller plus loin

API OVHcloud et installation d'un OS

Bring Your Own Linux (BYOLinux)

Comparaison entre Bring Your Own Image (BYOI) et Bring Your Own Linux (BYOLinux)

Comprendre le processus de démarrage des serveurs dédiés

Échangez avec notre communauté d'utilisateurs.

Cette page vous a-t-elle aidé ?