Retour à l’aperçu de l’actualité

Incus 6.6 est maintenant disponible

3 oct. 2024

Introduction

L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.6 !

C’est une version un peu moins chargée cette fois, principalement en raison du voyage à la Linux Plumbers Conference et des événement associés il y a quelques semaines.

Mais c’est loin d’être une version ennuyeuse. En plus des corrections habituelles de bugs et de l’amélioration des performances, nous avons un certain nombre de nouveautés intéressantes pour les machines virtuelles, un meilleur support des clusters LVM, des améliorations pour incus-migrate, et de nouvelles fonctionnalités réseau !

image|597x346

Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/

Nouvelles fonctionnalités

Informations sur l’OS des machines virtuelles

L’agent des VM Incus a été étendu pour obtenir des informations supplémentaires sur chaque machine virtuelle.

stgraber@dakara:~$ incus info v1
Name: v1
Status: RUNNING
Type: virtual-machine
Architecture: x86_64
PID: 3753543
Created: 2024/09/24 10:02 EDT
Last Used: 2024/10/03 11:29 EDT
Started: 2024/10/03 11:29 EDT

Operating System:
  OS: Ubuntu
  OS Version: 24.04.1 LTS (Noble Numbat)
  Kernel Version: 6.10.11-zabbly+
  Hostname: v1
  FQDN: v1

Resources:
  Processes: 35
  Disk usage:
    root: 1.02GiB
  CPU usage:
    CPU usage (in seconds): 4
  Memory usage:
    Memory (current): 374.78MiB
  Network usage:
    enp5s0:
      Type: broadcast
      State: UP
      Host interface: tap84ebf5ff
      MAC address: 00:16:3e:75:89:6e
      MTU: 1500
      Bytes received: 3.13kB
      Bytes sent: 1.30kB
      Packets received: 27
      Packets sent: 12
      IP addresses:
        inet:  172.17.250.94/24 (global)
        inet6: 2602:fc62:c:250:216:3eff:fe75:896e/64 (global)
        inet6: fe80::216:3eff:fe75:896e/64 (link)
    lo:
      Type: loopback
      State: UP
      MTU: 65536
      Bytes received: 5.92kB
      Bytes sent: 5.92kB
      Packets received: 80
      Packets sent: 80
      IP addresses:
        inet:  127.0.0.1/8 (local)
        inet6: ::1/128 (local)

Pour l’instant, ces informations ne sont disponibles que pour les machines virtuelles, car les conteneurs n’exécutent pas d’agent, et que récupérer ces informations depuis le système de fichiers du conteneur peut être risqué.

Historique de la console des machines virtuelles

L’accès à la console des conteneurs a toujours été assez flexible, avec à la fois un accès interactif (incus console) et un journal textuel non interactif (incus console --show-log).

Pour les machines virtuelles cependant, les choses étaient un peu plus limitées, car QEMU ne permettait pas de simultanément envoyer les informations de la console à un périphérique interactif et enregistrer les données dans un tampon circulaire.

Mais nous avons depuis trouvé un moyen de faire fonctionner cela, en faisant basculer QEMU entre un backend interactif et un tampon circulaire, selon que quelqu’un est connecté ou non à la console.

En conséquence, incus console --show-log fonctionne désormais aussi pour les machines virtuelles !

stgraber@dakara:~$ incus console --show-log v1
BdsDxe: loading Boot0006 "Ubuntu" from HD(1,GPT,B7DD04C0-15CE-482C-A6AC-7278FDA10CF6,0x800,0x32000)/\EFI\ubuntu\shimx64.efi
BdsDxe: starting Boot0006 "Ubuntu" from HD(1,GPT,B7DD04C0-15CE-482C-A6AC-7278FDA10CF6,0x800,0x32000)/\EFI\ubuntu\shimx64.efi
rootfs: clean, 58918/6393600 files, 1074908/13081339 blocks

Ubuntu 24.04.1 LTS v1 ttyS0

v1 login:

Possibilité de créer des groupes de volumes LVM en cluster

Incus supporte les clusters LVM depuis plusieurs versions, mais jusqu’à présent, le groupe de volumes partagé devait être créé en amont par les utilisateurs.

Désormais, Incus permet de spécifier directement le périphérique partagé de stockage par bloc, et il créera automatiquement le groupe de volumes.

root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server01
Storage pool demo-lvm pending on member server01
root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server02
Storage pool demo-lvm pending on member server02
root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server03
Storage pool demo-lvm pending on member server03
root@server01:~# incus storage create demo-lvm lvmcluster source=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_incus_demo--shared --target server04
Storage pool demo-lvm pending on member server04
root@server01:~# incus storage create demo-lvm lvmcluster
Storage pool demo-lvm created

Support de QCOW2 et VMDK dans incus-migrate

L’outil incus-migrate peut désormais importer des images de machines virtuelles QCOW2 et VMDK. Pour cela, il faut que l’outil qemu-img soit disponible sur le système, afin de gérer la conversion.

root@dakara:~# incus-migrate 
The local Incus server is the target [default=yes]: 
Would you like to create a container (1) or virtual-machine (2)?: 2
Project to create the instance in [default=default]: 
Name of the new instance: foo
Please provide the path to a disk, partition, or qcow2/raw/vmdk image file: /home/stgraber/demo/rhel9.qcow2
Does the VM support UEFI booting? [default=yes]: 
Does the VM support UEFI Secure Boot? [default=yes]:

Instance to be created:
  Name: foo
  Project: default
  Type: virtual-machine
  Source: /home/stgraber/demo/rhel9.qcow2
  Source format: qcow2

Additional overrides can be applied at this stage:
1) Begin the migration with the above configuration
2) Override profile list
3) Set additional configuration options
4) Change instance storage pool or volume size
5) Change instance network

Please pick one of the options above [default=1]:  
Converting image "/home/stgraber/demo/rhel9.qcow2" to raw format before importing
Instance foo successfully created

Mode macvlan configurable

Jusqu’à présent, le mode macvlan était toujours défini à bridged.
Il est désormais possible d’utiliser d’autres modes, comme vepa, passthru ou private.

stgraber@dakara:~$ incus create images:ubuntu/24.04 c1
Creating c1
stgraber@dakara:~$ incus config device add c1 eth0 nic nictype=macvlan parent=enp35s0 mode=private name=eth0
Device eth0 added to c1
stgraber@dakara:~$ incus start c1

Informations sur l’état des load-balancers

Avec l’ajout récent de la surveillance de l’état des load-balancers OVN, il était logique d’étendre l’API afin d’y exposer cet état.

root@server01:~# incus network load-balancer show default 172.31.254.50
description: ""
config:
  healthcheck: "true"
backends:
- name: c1
  description: ""
  target_port: ""
  target_address: 10.104.61.10
- name: c2
  description: ""
  target_port: ""
  target_address: 10.104.61.11
ports:
- description: ""
  protocol: tcp
  listen_port: "80"
  target_backend:
  - c1
  - c2
- description: ""
  protocol: tcp
  listen_port: "22"
  target_backend:
  - c1
  - c2
listen_address: 172.31.254.50
location: ""

root@server01:~# incus network load-balancer info default 172.31.254.50
Backend health:
  c1 (10.104.61.10):
    - tcp/80: online
    - tcp/22: offline

  c2 (10.104.61.11):
    - tcp/80: offline
    - tcp/22: online

Interfaces externes pour les réseaux OVN

Il est maintenant possible d’attacher une interface physique externe d’un serveur à un réseau OVN virtuel. Cela permet de faire le lien entre le réseau physique et le réseau virtuel.

root@server01:~# incus network set bar bridge.external_interfaces=foo --target server02
root@server01:~# incus network info bar
Name: bar
MAC address: 00:16:3e:e6:b6:10
MTU: 1422
State: up
Type: broadcast

IP addresses:
  inet  10.179.82.1/24 (link)
  inet6 fd42:3f01:28ef:4257::1/64 (link)

Network usage:
  Bytes received: 0B
  Bytes sent: 0B
  Packets received: 0
  Packets sent: 0

OVN:
  Chassis: server01
  Logical router: incus-net25-lr
root@server01:~# ovn-nbctl lsp-list incus-net25-ls-int
e7070089-c979-4bc1-b6f2-1f63008af44b (incus-net25-external-n2-foo)
65eba7f1-e150-4dce-b054-180e389e4d58 (incus-net25-ls-int-lsp-router)

Évacuation/restauration d’un cluster en parallèle

L’évacuation et la restauration d’un cluster peuvent être des opérations assez longues, en particulier dans les clusters faisant tourner un grand nombre d’instances.

Pour améliorer cela, nous allons désormais automatiquement paralléliser ce processus.
Afin de limiter l’impact, la parallélisation est faite de manière assez conservatrice, en n’ajoutant qu’un niveau de parallélisation pour 16 threads CPU. Ainsi, même les serveurs les plus puissants avec 512 threads ne verront que 32 instances déplacées simultanément.

Liste complète des changements

Voici une liste complète de tous les changements apportés par cette version :

Liste complète des commits
  • incus/network: Fix capitalization in network list
  • i18n: Update translation templates
  • incusd/storage/drivers/lvm: Cache VG extent size
  • incusd/instance/qemu: Always re-generate the nvram symlink
  • incusd/network/ovn: LSP dynamic allocation can't be done per protocol
  • incusd/instance/qemu: Set O_DIRECT when passing in FDs
  • Translated using Weblate (French)
  • incusd/apparmor: Only initialize with the daemon
  • incusd/instance/qemu: Make O_DIRECT conditional on directCache
  • incusd/instance/qemu: Force threads I/O mode for unsafe/writeback
  • incusd/instance/qemu: Move away from deprecated fd: syntax
  • doc: Fix network load-balancer typo
  • incusd/network/ovn: Fix group of load-balancer config keys
  • doc: Update metadata
  • incusd/apparmor: Add sys_rawio for QEMU 9.1
  • doc: Fix limits.memory default value unit
  • incusd/storage/zfs: Make sure the zvol is a block device
  • incusd/apparmor: Don't attempt unloading profiles when apparmor is disabled
  • internal/instance: Fix unit for limits.memory
  • doc: Update metadata
  • Added translation using Weblate (Norwegian Bokmål)
  • Translated using Weblate (Norwegian Bokmål)
  • shared/archive: Add VMDK images to list of supported formats
  • doc/installing: Add Rocky Linux 9
  • cmd/incus-migrate: Report detected source format when importing VM image
  • incus/storage_volume: Fix snapshot listing
  • i18n: Update translation templates
  • Added translation using Weblate (Indonesian)
  • internal/server/instance/drivers: Disable 9p and vsock for Windows VMs
  • cmd/incus-migrate: Convert qcow2 and vmdk images to raw format before importing
  • doc: List image formats supported by incus-migrate
  • scripts: fix empty-incus.sh instances delete
  • incusd/network/ovn: Properly handle lack of a protocol on LB checker
  • doc/installing: Add link to Arch Wiki for Incus
  • internal/server/instance/drivers: Cleanup spice socket when VM stops
  • internal/server/instance/drivers: Switch default backend for QEMU console to ringbuf
  • incus/console: Add completion
  • internal/server/instance/drivers/qmp: Add commands for reading a ringbuf and swaping backends for chardevs
  • internal/server/instance/drivers: Implement ConsoleLog() for qemu driver
  • internal/server/instance/drivers: Add functions to switch console's backend
  • cmd/incusd: Allow VMs to pull console history similar to containers
  • cmd: Properly handle --project in error messages
  • i18n: Update translation templates
  • incusd/project: Don't fail project deletion on authorizer
  • incusd/project: Don't fail project rename on authorizer
  • incus-user: Handle existing network
  • incusd/networks: Return HTTP Conflict on existing network
  • incusd/networks: Apply project restrictions to list of network names
  • incusd/auth/tls: Allow access to inherited resources
  • instance/config: Add @startup to documentation
  • doc: Update metadata
  • shared/validate: Better validate simple CPU limits
  • incusd/operations: Fix operation cancelation
  • incusd/storage_volumes: Handle rename of volumes with sub-paths
  • incusd/storage/utils: Only show actual errors in growFileSystem
  • internal/server/instance/drivers: Don't return an error if console log file doesn't exist
  • incusd/instance/qemu: Properly plumb I/O limits
  • incusd/apparmor: Allow all mounts in unprivileged containers
  • cleanup: Replace use of os.IsNotExist(err) with errors.Is(err, fs.ErrNotExist)
  • incusd/network: Allow to use dns.search when only IPv4 is enabled
  • incusd/apparmor: Remove nosymfollow check (unused)
  • doc: add notes for Nvidia gpu usage when installing in OpenSUSE
  • api: instances_state_os_info
  • shared/api: Add OSInfo to InstanceState
  • doc/rest-api: Refresh swagger YAML
  • cmd/incus-agent: Populate OS information when returning instance state
  • cmd/incus: Print OS info from state, if available
  • i18n: Update translation templates
  • tests: Don't over-provision test volume
  • Translated using Weblate (German)
  • cmd/incus-migrate: Don't copy converted VM image
  • incusd/instance_console: Check result of type assertion
  • incusd/images: Fix image access through secret
  • doc: add prerequisites section for building documentation
  • Translated using Weblate (German)
  • api: network_load_balancer_state
  • shared/api: Add NetworkLoadBalancerState
  • incusd/network/ovn/sb: Add GetServiceHealth
  • incusd/network: Add LoadBalancerState
  • incusd/network/load-balancer: Add API for state
  • doc/rest-api: Refresh swagger YAML
  • client: Add GetNetworkLoadBalancerState
  • incus/network_load_balancer: Add info command
  • i18n: Update translation templates
  • incusd: Only emit image-created if an image was actually created
  • incusd/instances: Call placement scriptlet when target specified
  • internal/server/instance/drivers/qmp: Ensure that the device passed to RingbufRead() is a ring buffer
  • internal/server/instance/drivers: Don't return an error if VM's console device isn't a ringbuf
  • internal/server/instance/drivers: Don't conflict with live migration operation
  • incus/alias: Handle quoted values
  • incus/alias: Stable sorting of alias names
  • incusd/instance/qemu: Fix issues with old NVRAM
  • incusd/device/nic: Add configuration for macvlan mode
  • doc/devices/nic: Add mode for macvlan devices
  • api: instance_nic_macvlan_mode
  • alpine linux enable edge repositories
  • cmd/incusd: gateway parameter wasn't actually used anywhere
  • cmd/incusd: Run cluster evacuate and restore in parallel
  • formatting: Move goroutines to their own functions
  • Translated using Weblate (German)
  • internal/instance: Allows the VM's limits.memory configuration to be set to a percentage value
  • incusd/network/ovn: Fix CIDR size check
  • incusd/instance/lxc: Mount /run if the path exists
  • doc: Add uncomment to the word list
  • incus/file/delete: Use SFTP client instead of file API
  • incus/file/delete: Add --force flag
  • i18n: Update translation templates
  • doc/network/resolved: Fix systemd unit
  • internal/instance: Fix doc for boot.host_shutdown_action
  • doc: Update metadata
  • client: Capture original OCI image identifier
  • incus/file/delete: Cache the SFTP client
  • shared/subprocess: Add TryRunCommandAttemptsDuration() which allows the caller to specify the number of attempts and duration between each attempt
  • internal/server/storage/drivers: Add support for creating shared VGs
  • doc: Incus can now create a shared VG directly
  • api: storage_lvm_cluster_create
  • Translated using Weblate (Indonesian)
  • incusd/network/ovn: Allow adding external interfaces to an OVN network
  • doc/network/ovn: Add description for bridge.external_interfaces parameter
  • api: network_ovn_external_interfaces
  • incusd/network: De-duplicate external interfaces validation
  • gomod: Update dependencies
  • incusd/instance/qemu: Simplify console switching
  • incusd/instance/qemu: Handle existing console connections
  • incusd/instance/qemu: Fix shutdown race
  • doc/devices/proxy: Fix incorrect bind= example
  • incusd/network/bridge: Bring up external interfaces

Documentation

La documentation d’Incus peut être consultée sur :
https://linuxcontainers.org/incus/docs/main/

Paquets

Incus ne fournit pas de paquet d’installation mais bien un tarball à chaque version. Vous trouverez ci-dessous différentes solutions pour mettre Incus en service.

Installation du serveur Incus sous Linux

Incus est disponible sur la plupart des distributions Linux courantes. Vous trouverez des instructions d’installation détaillées dans notre documentation.

https://linuxcontainers.org/incus/docs/main/installing/

Paquet Homebrew du client Incus

Le client Incus est disponible sur Homebrew pour Linux et macOS.

https://formulae.brew.sh/formula/incus

Paquet Chocolatey du client Incus

Le client Incus est disponible sur Chocolatey pour les utilisateurs de Windows.

https://community.chocolatey.org/packages/incus/6.6.0

Paquet Winget du client Incus

Le client Incus est aussi disponible sur Winget pour les utilisateurs de Windows.

https://winstall.app/apps/LinuxContainers.Incus

Support

Les versions de fonctionnalité d’Incus ne sont supportées que jusqu’à la sortie de la suivante. Les personnes souhaitant un support plus long et des changements moins fréquents devraient plutôt envisager d’utiliser Incus 6.0 LTS.

Le support communautaire est disponible sur : https://discuss.linuxcontainers.org
Un support commercial est disponible sur : https://zabbly.com/incus
Les bugs peuvent être signalés sur : https://github.com/lxc/incus/issues