Aller au contenu principal

API Reference

API Reference – Machines Virtuelles

Cette référence décrit de manière exhaustive les APIs VMInstance et VMDisk d’Hikube : paramètres disponibles, valeurs par défaut, exemples d’utilisation et bonnes pratiques recommandées.

Les champs documentés ci-dessous correspondent au schéma réellement exposé par la plateforme (apps.cozystack.io/v1alpha1).


VMInstance

Vue d’ensemble

L’API VMInstance permet de créer, configurer et gérer des machines virtuelles dans Hikube. Une VM s’appuie sur un ou plusieurs disques décrits séparément via la ressource VMDisk.

vm-instance.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: VMInstance
metadata:
name: example-vm
spec:
# Configuration détaillée ci-dessous
Kind correct

La ressource s’appelle VMInstance (et non VirtualMachine). Le disque n’est pas un champ systemDisk intégré : il faut créer une ressource VMDisk distincte et la référencer dans disks.


Spécification complète

ParamètreTypeDescriptionDéfautRequis
externalbooleanActive l’exposition réseau depuis l’extérieur du clusterfalsenon
externalMethodstringMéthode d’exposition : PortList ou WholeIPPortListnon
externalPorts[]integerPorts à transférer depuis l’extérieur (utilisé avec PortList)[22]non
runStrategystringÉtat d’exécution souhaité (voir runStrategy)Alwaysnon
instanceTypestringGabarit CPU / mémoire (voir types d’instances)u1.mediumnon
instanceProfilestringProfil OS / préférences (drivers, kernel) — voir profilsubuntunon
disks[]objectListe des VMDisk à attacher (voir disks)[]non
subnets[]objectSous-réseaux additionnels (VPC) — voir subnets[]non
gpus[]objectGPU à attacher en passthrough (voir gpus)[]non
resourcesobjectSurcharge explicite CPU / mémoire / sockets (voir resources){}non
cpuModelstringModèle de CPU exposé à la VM (ex : host-passthrough)""non
sshKeys[]stringClés SSH publiques injectées[]non
cloudInitstringConfiguration cloud-init (user-data YAML)""non
cloudInitSeedstringSeed servant à générer un UUID SMBIOS stable""non
remarque

Tous les champs sont optionnels : une VM minimale ne nécessite qu’un disque amorçable référencé dans disks. Les valeurs par défaut ci-dessus sont celles appliquées par la plateforme.


runStrategy

runStrategy contrôle l’état d’exécution de la VM. Il remplace l’ancien champ booléen running.

ValeurComportement
AlwaysLa VM est maintenue démarrée (redémarre automatiquement si elle s’arrête)
HaltedLa VM est arrêtée
ManualL’état est piloté manuellement (virtctl start / stop)
RerunOnFailureRedémarre uniquement après un échec
OnceDémarre une seule fois, sans redémarrage automatique
spec:
runStrategy: Always

Pour arrêter/redémarrer une VM existante :

kubectl patch vminstance my-vm --type='merge' -p '{"spec":{"runStrategy":"Halted"}}'
kubectl patch vminstance my-vm --type='merge' -p '{"spec":{"runStrategy":"Always"}}'

Configuration réseau

spec:
external: true
externalMethod: PortList
externalPorts:
- 22
- 80
- 443

Voir Méthodes d’exposition réseau.


Types d’instances

instanceType référence un VirtualMachineClusterInstancetype. Hikube expose plusieurs séries, chacune avec les tailles nano8xlarge :

SérieUsage
s1Standard — CPU partagés/burstables, ratio vCPU:RAM 1:2
u1Universal — usage général, ratio 1:4 (par défaut)
m1Memory optimized — ratio 1:8
# Exemples de la série Universal (ratio 1:4)
instanceType: u1.medium # 1 vCPU, 4 Go RAM
instanceType: u1.large # 2 vCPU, 8 Go RAM
instanceType: u1.xlarge # 4 vCPU, 16 Go RAM
instanceType: u1.2xlarge # 8 vCPU, 32 Go RAM
instanceType: u1.4xlarge # 16 vCPU, 64 Go RAM
instanceType: u1.8xlarge # 32 vCPU, 128 Go RAM
# Série Standard (ratio 1:2)
instanceType: s1.small # 1 vCPU, 2 Go RAM
instanceType: s1.medium # 2 vCPU, 4 Go RAM
instanceType: s1.large # 4 vCPU, 8 Go RAM
instanceType: s1.xlarge # 8 vCPU, 16 Go RAM
instanceType: s1.2xlarge # 16 vCPU, 32 Go RAM
# Série Memory optimized (ratio 1:8)
instanceType: m1.large # 2 vCPU, 16 Go RAM
instanceType: m1.xlarge # 4 vCPU, 32 Go RAM
instanceType: m1.2xlarge # 8 vCPU, 64 Go RAM
instanceType: m1.4xlarge # 16 vCPU, 128 Go RAM
instanceType: m1.8xlarge # 32 vCPU, 256 Go RAM
GPU et instanceType

Pour attacher un GPU, choisissez une série généraliste (u1, s1…) et déclarez le GPU via le champ gpus. Le pilote NVIDIA requiert au moins 4 Gio de RAM.


Profils d’OS

instanceProfile charge les préférences KubeVirt (drivers, modèle de machine, kernel) adaptées à l’OS. Il ne définit pas l’image — celle-ci est portée par le VMDisk. C’est surtout déterminant pour Windows (drivers virtio).

Valeurs disponibles (extrait) :

FamilleProfils
Ubuntuubuntu
RHELrhel.7, rhel.8, rhel.9, rhel.10 (+ variantes .desktop, .arm64, .dpdk, .realtime)
CentOScentos.7, centos.stream8, centos.stream9, centos.stream10 (+ .desktop, .dpdk)
Fedorafedora, fedora.arm64
openSUSEopensuse.leap, opensuse.tumbleweed
SLESsles
Autresalpine, cirros
Windowswindows.2k22.virtio, windows.2k25.virtio, windows.10.virtio, windows.11.virtio (variantes .virtio recommandées) ; variantes sans virtio également disponibles (windows.2k22…)
remarque

Il n’existe pas de profil debian ni rocky/almalinux dédié. Pour ces distributions, utilisez ubuntu (base Debian) ou laissez instanceProfile: "". Pour Windows, utilisez toujours une variante .virtio (ex : windows.2k25.virtio) afin de charger les drivers virtio.


Disques

disks est une liste d’objets référençant des ressources VMDisk par leur nom. Le premier disque listé est généralement le disque amorçable.

ChampTypeDescription
disks[].namestringNom du VMDisk à attacher
disks[].busstringType de bus (virtio, sata, scsi) — optionnel
spec:
disks:
- name: vm-system-disk
- name: vm-data-disk
bus: scsi
attention

La VM ne prend pas en compte un nouveau disque tant qu’elle n’est pas redémarrée (virtctl restart ou bascule runStrategy).


GPU

gpus attache un ou plusieurs GPU NVIDIA en passthrough PCI.

ChampTypeDescription
gpus[].namestringNom de la ressource GPU (nvidia.com/...)
spec:
instanceType: u1.2xlarge
gpus:
- name: nvidia.com/AD102GL_L40S

Les modèles disponibles sur Hikube sont détaillés dans la référence API GPU. Un GPU est attribué de façon exclusive à une VM.


Sous-réseaux

subnets rattache la VM à des sous-réseaux additionnels d’un VPC.

ChampTypeDescription
subnets[].namestringNom du sous-réseau
spec:
subnets:
- name: subnet-ab2c3e47

Ressources

Par défaut, le dimensionnement CPU/mémoire est porté par instanceType. Le bloc resources permet de surcharger explicitement ces valeurs (et de définir une topologie de sockets).

ChampTypeDescription
resources.cpuint/stringNombre de cœurs CPU alloués
resources.memoryint/stringQuantité de mémoire allouée
resources.socketsint/stringNombre de sockets CPU (topologie)
spec:
resources:
cpu: "4"
memory: 8Gi
sockets: "2"

Configuration SSH

spec:
sshKeys:
- ssh-rsa AAAA... user@host
- ssh-ed25519 AAAA... user2@host

Cloud-init

spec:
cloudInit: |
#cloud-config
users:
- name: admin
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa AAAA...
packages:
- htop
- docker.io
# Seed optionnel pour fixer l’UUID SMBIOS (licences, identité machine)
cloudInitSeed: ""

Exemple complet VMInstance

production-vm.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: VMInstance
metadata:
name: vm-example
spec:
external: true
externalMethod: PortList
externalPorts:
- 22
runStrategy: Always
instanceType: u1.2xlarge
instanceProfile: ubuntu
disks:
- name: vm-system-disk
sshKeys:
- ssh-rsa AAAA...

VMDisk

Vue d’ensemble

L’API VMDisk gère les disques virtuels attachés aux VMs. Elle supporte plusieurs sources d’image : HTTP, Golden Image préchargée, ou disque vide.

disk-example.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: VMDisk
metadata:
name: disk-example
spec:
source:
image:
name: ubuntu-2404
optical: false
storage: 30Gi
storageClass: replicated

Paramètres principaux

ParamètreTypeDescriptionDéfautRequis
storageint/stringTaille du disque5Gi
storageClassstringClasse de stockagereplicated
sourceobjectSource de l’image disque (voir ci-dessous){}non
opticalbooleanDisque optique / ISO (installeur)falsenon

Sources d’images

Source HTTP / HTTPS

spec:
source:
http:
url: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

Golden Images (images préchargées Hikube)

Les Golden Images sont des images système maintenues et préchargées dans Hikube, pour un provisionnement rapide et sans dépendance externe.

spec:
source:
image:
name: ubuntu-2404

Images disponibles

NomSystème d'exploitationTypeStockage min.
almalinux-8AlmaLinux 8Cloud11 Gi
almalinux-9AlmaLinux 9Cloud11 Gi
almalinux-10AlmaLinux 10Cloud11 Gi
rocky-8Rocky Linux 8Cloud11 Gi
rocky-9Rocky Linux 9Cloud11 Gi
rocky-10Rocky Linux 10Cloud11 Gi
debian-11Debian 11 (Bullseye)Cloud4 Gi
debian-12Debian 12 (Bookworm)Cloud4 Gi
debian-13Debian 13 (Trixie)Cloud4 Gi
ubuntu-2204Ubuntu 22.04 LTS (Jammy)Cloud4 Gi
ubuntu-2404Ubuntu 24.04 LTS (Noble)Cloud4 Gi
centos-stream-9CentOS Stream 9Cloud11 Gi
centos-stream-10CentOS Stream 10Cloud11 Gi
oracle-8Oracle Linux 8Cloud40 Gi
oracle-9Oracle Linux 9Cloud40 Gi
oracle-10Oracle Linux 10Cloud40 Gi
opensuse-156openSUSE Leap 15.6Cloud1 Gi
opensuse-160openSUSE Leap 16.0Cloud2 Gi
cloudlinux-8CloudLinux 8Cloud8 Gi
cloudlinux-9CloudLinux 9Cloud9 Gi
windows-server-2022Windows Server 2022ISO28 Gi
windows-server-2025Windows Server 2025ISO28 Gi
proxmox-8Proxmox VE 8ISO2 Gi
proxmox-9Proxmox VE 9ISO2 Gi
talos-112Talos Linux 1.12Cloud8 Gi
Images ISO

Les images de type ISO (Windows, Proxmox) sont des installeurs et non des images cloud prêtes à l’emploi. Prévoyez une installation initiale via la console VNC. Pour Windows, voir le guide Installer une VM Windows.

Disque vide

spec:
source: {}

Un disque vide est utile pour les volumes de données additionnels.


Exemple VMDisk via Golden Image

ubuntu-golden-disk.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: VMDisk
metadata:
name: ubuntu-system
spec:
source:
image:
name: ubuntu-2404
optical: false
storage: 20Gi
storageClass: replicated

Classes de stockage

Hikube expose plusieurs storageClass basées sur LINSTOR. Pour une VM, replicated est recommandé.

ClasseRéplicationChiffrementNotes
localStockage local au nœud (défaut), non résilient
local-encrypted✅ (LUKS)Local + chiffré
replicatedRépliqué synchrone — recommandé pour les VMs
replicated-encrypted✅ (LUKS)Répliqué + chiffré
replicated-async✅ (async)Réplication asynchrone
replicated-async-encrypted✅ (async)✅ (LUKS)Réplication asynchrone + chiffré
replicated-async-windows✅ (async)Variante adaptée aux disques Windows
replicated-async-windows-encrypted✅ (async)✅ (LUKS)Variante Windows + chiffré
remarque

Les variantes -windows sont optimisées pour les disques de VMs Windows. Le chiffrement (-encrypted) s’appuie sur LUKS au niveau du volume.


Méthodes d’exposition réseau

PortList

  • Pare-feu automatique
  • Seuls les ports listés dans externalPorts sont accessibles
  • Recommandé en production

WholeIP

  • Une IP publique dédiée, tous les ports exposés
  • Aucun filtrage réseau côté plateforme
  • Réserver au développement ou aux passerelles maîtrisées
Sécurité

Avec WholeIP, la VM est entièrement exposée sur Internet. Un pare-feu OS est indispensable.


Bonnes pratiques

Sécurité

  • Authentification par clés SSH uniquement
  • Pare-feu OS actif, PortList plutôt que WholeIP

Stockage

  • replicated (ou variantes chiffrées/Windows) en production
  • Séparer disque système et disques de données

Performance

  • Adapter instanceType au workload, ou surcharger via resources
  • Pour les GPU, prévoir ≥ 4 Gio de RAM et un ratio CPU/RAM adapté
Architecture recommandée

En production, utilisez au minimum 2 disques (système + données) en stockage répliqué.