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 !
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