Retour à l’aperçu de l’actualité
Incus 6.1 est maintenant disponible¶
7 mai 2024
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.1 !
Il s’agit de notre première version de fonctionnalité après Incus 6.0 LTS.
Pour rappel, les versions de fonctionnalité ne sont supportées que jusqu’à la sortie de la suivante, généralement à un rythme mensuel. Les environnements de production critiques devraient rester sur la version LTS.
Cette version apporte de nombreuses améliorations mineures à Incus. Beaucoup d’entre elles sont des premières contributions d’étudiants de l’Université du Texas à Austin. Attendez-vous à beaucoup plus d'améliorations dans Incus 6.2 !
Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/
Nouvelles fonctionnalités¶
Création de pools ZFS complexes¶
La clef source
utilisée lors de la créations de pools de stockage utilisant le driver zfs
a été étendue pour permettre la création de vdevs plus complexes, prenant notamment en charge le striping, le mirroring, raidz1 et raidz2.
Exemples de syntaxe :
/dev/sda,/dev/sdb
(striping, RAID0)mirror=/dev/sda,/dev/sdb
(mirroring, RAID1)raidz1=/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde
(raidz1, RAID5)raidz2=/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde
(raidz2, RAID6)
Combinée avec les informations de incus info --resources
, cette nouvelle fonctionnalité permet désormais de déployer des pools de stockage complexes directement depuis l’API.
Liste des profils sur tous les projets¶
Dans un souci de proposer des requêtes interprojets pour tous les objets de l’API, il est désormais possible de lister les profils sur tous les projets.
Au niveau de l’API, cela se fait avec all-projects=true
sur l’endpoint /1.0/profiles
; au niveau de l’interface en ligne de commande, cela se fait ainsi :
stgraber@dakara:~$ incus profile list --all-projects +-----------------+---------+---------------------------------------+---------+ | PROJECT | NAME | DESCRIPTION | USED BY | +-----------------+---------+---------------------------------------+---------+ | default | default | Default Incus profile | 10 | +-----------------+---------+---------------------------------------+---------+ | demo | default | Default Incus profile | 12 | +-----------------+---------+---------------------------------------+---------+ | lab-cgroup | default | Default Incus profile | 2 | +-----------------+---------+---------------------------------------+---------+ | lab-lvm-cluster | default | Default Incus profile | 3 | +-----------------+---------+---------------------------------------+---------+ | lab-ovn-ic | default | Default Incus profile | 10 | +-----------------+---------+---------------------------------------+---------+ | vpn | default | Default Incus profile for project vpn | 2 | +-----------------+---------+---------------------------------------+---------+
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Liste des zones réseau sur tous les projets¶
Dans un souci de proposer des requêtes interprojets pour tous les objets de l’API, il est désormais possible de lister les zones réseau sur tous les projets.
Au niveau de l’API, cela se fait avec all-projects=true
sur l’endpoint /1.0/network-zones
; au niveau de l’interface en ligne de commande, cela se fait ainsi :
stgraber@dakara:~$ incus network zone list --all-projects +---------+--------------------------+-------------+---------+ | PROJECT | NAME | DESCRIPTION | USED BY | +---------+--------------------------+-------------+---------+ | default | default.demo.example.net | | 0 | +---------+--------------------------+-------------+---------+ | foo | foo.demo.example.net | | 0 | +---------+--------------------------+-------------+---------+
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Fonctions supplémentaires du scriptlet de placement des instances¶
Incus permet de personnaliser le placement des instances au travers d’un script à la python, appelé un scriptlet. Lorsqu’il est utilisé, le scriptlet reçoit des informations sur l’instance, sur les cibles potentielles, et sur la raison de la requête.
En plus de ces arguments, un certain nombre de fonctions sont également exposées à ces scriptlets.
Elles permettent notamment de journaliser des informations, de décider où placer l’instance, et de récupérer des informations basiques sur la charge des serveurs candidats.
Deux nouvelles fonctions viennent les rejoindre :
get_instances(location, project)
=>[]api.Instance
get_cluster_members(group)
=>[]api.ClusterMember
Les arguments sont tous optionnels, permettant d’utiliser les fonctions pour lister toutes les instances ou tous les membres d’un cluster, assurant une grande flexibilité aux scripts de placement.
Documentation : https://linuxcontainers.org/incus/docs/main/explanation/clustering/#instance-placement-scriptlet
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Utilisation de YAML avec les commandes create
¶
Un certain nombre de commandes create
d’Incus acceptent des fichiers YAML dans leur entrée standard, mais cela n’est pas toujours très cohérent ou bien documenté. Nous sommes en train d’améliorer la cohérence globale des commandes, et cette version permet désormais de lire des définitions en YAML pour les commandes suivantes :
incus create
etincus launch
incus cluster group create
incus network acl create
incus network forward create
incus network integration create
incus network load-balance create
incus network peer create
incus network zone create
incus profile create
incus project create
incus snapshot create
incus storage create
incus storage bucket create
Pour toutes ces commandes, il est possible de fournir à stdin lors de la création des objets des données en YAML similaires à celles fournies par les commandes show
correspondantes.
Customisation des colonnes des commandes list
¶
Toujours dans un souci de cohérence, nous rendons petit à petit customisables les colonnes affichées par les commandes list
.
Désormais, les commandes suivantes supportent cette fonctionnalité :
incus cluster list
incus config trust list
incus image list
incus list
incus profile list
incus project list
incus storage volume list
incus storage volume snapshot list
incus warning list
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Clef de configuration migration.stateful
pour les conteneurs¶
La clef de configuration migration.stateful
a été étendue pour s’appliquer également aux conteneurs.
Il est désormais requis de la définir à true
pour accéder aux fonctionnalités nécessitant l’enregistrement et la restauration de l’état de processus dans des conteneurs (CRIU), à savoir l’arrêt et la prise d’instantanés stateful et la migration à chaud.
Il est assez improbable que ce changement affecte beaucoup d’utilisateurs, car la capacité de CRIU à faire de la migration à chaud ou à sauvegarder l’état des conteneurs Incus est très limitée, et est donc généralement considérée comme non fonctionnelle.
Ce changement permet de fournir des messages d’erreur plus clairs aux utilisateurs qui effectueraient accidentellement des actions nécessitant CRIU.
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
ACL stateless sur OVN¶
Une nouvelle action allow-stateless
a été ajoutée aux ACL réseau d’Incus.
Comme son nom l’indique, cette action permet la création de règles stateless dans OVN.
Elle est idéale dans des situations où des règles stateful seraient très coûteuses alors que des règles stateless seraient réalisables (par exemple pour des interactions DNS).
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Suivi de l’heure de démarrage des instances¶
Un nouveau champ StartedAt
a été ajouté aux informations d’état des instances.
Il expose le timestamp auquel les instances ont été démarrées et est disponible dans incus info
et incus list
.
stgraber@dakara:~$ incus info speedtest | grep Started Started: 2024/04/29 11:03 EDT stgraber@dakara:~$ incus list -cnstU +-------------+---------+-----------------+----------------------+ | NAME | STATE | TYPE | STARTED AT | +-------------+---------+-----------------+----------------------+ | centos3 | STOPPED | CONTAINER | | +-------------+---------+-----------------+----------------------+ | centos4 | STOPPED | CONTAINER | | +-------------+---------+-----------------+----------------------+ | fga | STOPPED | VIRTUAL-MACHINE | | +-------------+---------+-----------------+----------------------+ | incus-ui | RUNNING | CONTAINER | 2024/05/07 16:54 EDT | +-------------+---------+-----------------+----------------------+ | kernel-test | RUNNING | VIRTUAL-MACHINE | 2024/05/07 15:43 EDT | +-------------+---------+-----------------+----------------------+ | keybase | STOPPED | CONTAINER | | +-------------+---------+-----------------+----------------------+ | ovn-test | RUNNING | VIRTUAL-MACHINE | 2024/05/07 15:43 EDT | +-------------+---------+-----------------+----------------------+ | speedtest | RUNNING | CONTAINER | 2024/04/29 11:03 EDT | +-------------+---------+-----------------+----------------------+ | void | STOPPED | VIRTUAL-MACHINE | | +-------------+---------+-----------------+----------------------+ | win11 | STOPPED | VIRTUAL-MACHINE | | +-------------+---------+-----------------+----------------------+
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Amélioration de la gestion réseau lors des opérations d’évacuation¶
Lors de l’évacuation d’un cluster, tous les réseaux seront désormais arrêtés à la fin de l’opération et ne seront redémarrés qu’à l’exécution de l’option de restauration.
Cette fonctionnalité est particulièrement utile dans des environnements OVN, car cela garantit qu’un serveur Incus évacué ne peut plus agir comme un routeur virtuel sur l’un des réseaux définis, diminuant les risques d’incidents réseau à l’arrêt ou au redémarrage du serveur.
La fonctionnalité a été réalisée par des étudiants de l’Université du Texas à Austin.
Liste complète des changements¶
Voici une liste complète de tous les changements apportés par cette version :
Liste complète des commits
- doc/support: Update for LTS
- incusd/network: Remove bridge.driver=native requirement for extended external_interfaces syntax
- doc/network/bridge: Update extended external_interfaces documentation
- incusd/storage/drivers/zfs: Simplify dataset receive and fix progress handling
- gomod: Update dependencies
- mini-oidc: Merge into main gomod
- gomod: Update dependencies
- go.mod: Bump package major version
- global: Update Go package to v6
- test: Update godeps.list
- README: Update for godoc URLs
- doc/rest-api: Refresh swagger YAML
- cmd/incus: Fix import ordering
- incusd: Remove unneeded import renames
- incusd/instance: Fix duplicate import
- doc/projects: Tweak examples
- shared/api: Remove container resources (deprecated)
- doc/rest-api: Refresh swagger YAML
- incus/create: Remove dead code
- i18n: Update translation templates
- incusd/daemon: Remove old migration logic
- incusd: Stop mentioning containers in resources
- doc/rest-api: Use instances API in example
- incusd/db/cluster: containers URLs aren't valid in Incus
- incusd/instances: Don't start instances when evacuated
- doc/installing: Sort source-build distro instructions
- doc/installing: Add OpenSUSE source instructions
- doc/installing: Add Alpine instructions
- incus/aliases: fix completion regression
- incus/snapshot: Fix deletion of snapshots containing colons
- incusd/instance/drivers: Have SR-IOV get stable MACs
- incusd/device/nic_sriov: Use stable MAC
- incus/profile: Add support for creating from YAML
- i18n: Update translation templates
- incusd/instance/lxc: Only apply soft cgroup limits on cgroup1
- incus/admin: Don't hide the sql command
- grafana: Refresh dashboard
- doc/metrics: Mention Loki in Grafana setup
- grafana: Better filter Loki events by project
- incusd/loki: Use hostname as default instance property on standalone systems
- incusd/loki: Re-order config fields
- incusd/loki: Allow overriding the location field
- incusd/loki: Set location field to local hostname on standalone systems
- incus/projct: Add support for creating project from yaml
- i18n: Update translation templates
- incusd/network/ovs: Port GetOVNEncapIP to libovsdb
- incusd/network/ovs: Add some comments to GetOVNBridgeMappings
- incusd/network/ovs: Port AddOVNBridgeMapping to libovsdb
- incusd/network/ovs: Port RemoveOVNBridgeMapping to libovsdb
- incusd/network/ovs: Port GetHardwareOffload to libovsdb
- incusd/network/ovs: Port GetBridgePorts to libovsdb
- incusd/network/ovs: Port UpdateBridgePortVLANs to libovsdb
- incusd/network/ovs: Port AssociateInterfaceOVNSwitchPort to libovsdb
- incusd/network/ovs: Switch Installed to checking for unix socket
- incusd/network: Update for OVS function changes
- Add missing SecureBoot firmware names
- incus/snapshot: Add support for creating project from yaml
- i18n: Update translation templates
- api: network_zones_all_projects
- shared/api: Add Project field to NetworkZone
- incusd/network_zones: Add support for all-projects
- doc/rest-api: Refresh swagger YAML
- client: Add GetNetworkZonesAllProjects
- incus/network_zone: Add --all-projects flag to list
- i18n: Update translation templates
- tests: Add all-projects network zone test
- incusd/network/ovn: Port LogicalRouterAdd to libovsdb
- incusd/network/ovn: Remove LogicalRouterAdd
- incusd/network: Replace LogicalRouterAdd usage with CreateLogicalRouter
- incusd/network/ovn: gofmt
- incusd/cluster: Disable networks during evacuation
- incusd/cgroup: Set hugepages reserved limits
- incusd/storage/drivers: Introduce SparseFileWrapper
- incusd/storage/drivers/vfs: Use SparseFileWrapper on backup import
- incusd/storage/drivers/vfs: Use SparseFileWrapper on volume migration
- incus/storage: Support creating storage pool from yaml
- i18n: Update translation templates
- incus/info: Show CPU architecture as separate line
- i18n: Update translation templates
- incus/cluster_group: Add yaml support for cluster group create
- i18n: Update translation templates
- gitignore: Add JetBrains
- api: storage_zfs_vdev
- doc: Update ZFS support for multiple block devices and vdev types in doc/reference/storage_zfs.md
- incusd/storage/zfs: Add support for vdev type and multiple block devices
- incus/info: Sorting network interfaces
- incus/network_acl: Add cmd.Example for network acl create
- i18n: Update translation templates
- incus/network_forward: Add yaml example for create
- i18n: Update translation templates
- incus/config_template: Add file support for create
- i18n: Update translation templates
- incus/network_integrations: Add yaml support for create
- i18n: Update translation templates
- incusd/storage/s3: Use 'mc' client
- incusd/storage: Switch to use minio's 'mc' client
- gomod: Update dependencies
- github: Download MinIO client
- doc: Avoid MyST 3.0.0
- incus/doc/installing.md: Add Docker information
- doc: Add Podman to wordlist
- incus/cluster: Add columns to list
- i18n: Update translation templates
- incus/project: Add customazible columns to list
- i18n: Update translation templates
- api: container_migration_stateful
- internal/instance: Add migration.stateful to containers
- incusd/instance/lxc: Add checks for migration.stateful
- doc: Update configs
- incus/network_load_balancer: add Example to create
- i18n: Update translation templates
- incus/network_zone: Add example for create command
- i18n: Update translation templates
- doc: Fix bad sphinx requirements
- incusd/instances/qemu: Tweak secureboot firmware list
- cmd/incus/admin_cluster: Add libexec path for incusd
- incus/storage: Show usage when no driver passed
- incusd/storage/drivers/dir: Tweak path validation
- incusd/backup: Show profile list on lookup error
- incusd/apparmor/lxc: Allow access to binfmt_misc
- incusd/apparmor/lxc: Refresh generated rules
- incusd/storage: Handle instance volume size on import
- incus/profile: Add customizable columns to list
- i18n: Update translation templates
- incus/project: Fix help message for list
- i18n: Update translation templates
- api: profiles_all_projects
- shared/api: Add Project field to Profile
- client: Add GetProfilesAllProjects
- incus/profile: Add all-projects to list
- incusd/db/cluster: Add Project field to Profile
- incusd/profile: Add all-projects support
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- incus/storage_volume: Clarify volume errors
- incusd/apparmor/lxc: Fix access to kernel/security/apparmor
- api: instances_scriptlet_get_instances
- doc/instances/scriptlet: Add get_instances
- incusd/scriptlet: Add get_instances
- api: instances_scriptlet_get_cluster_members
- doc/instances/scriptlet: Add get_cluster_members
- incusd/scriptlet: Add get_cluster_members
- api: Add network_acl_stateless
- doc/network_acl: Add allow-stateless action
- incusd/network/acl: Add allow-stateless action
- incusd/network/ovn/nb: Port DeleteLogicalRouter to libovsdb
- incusd/network/ovn/nb: Port CreateLogicalRouterSNAT to libovsdb
- incusd/network: Update for OVS function changes
- incusd/network/acl: Properly run instance counting outside of ACL loop
- incusd/network/ovn: Wait up to 1s for dynamic IPs
- incusd/network/ovn/nb: Port DeleteLogicalRouterNAT to libovsdb
- incusd/network: Update for OVS function changes
- shared/archive: Fix typo
- incusd/cluster: Re-organize joining logic
- incusd/cluster: Ignore OVN networks during joining
- shared/archive: Properly anchor exclude rules
- incusd/project: Rework low-level permission checks
- incus/storage_bucket: Add example for storage bucket create
- i18n: Update translation templates
- incus/network_peer: Add example for create command
- i18n: Update trasnlation templates
- api: instance_state_started_at
- shared/api: Add StartedAt to InstanceState
- doc/rest-api: Refresh swagger YAML
- incusd/instance: Add StartedAt to InstanceState
- incus/info: Add Started field
- incus/list: Add started at column
- i18n: Update translation templates
- Makefile: Cleanup gomod update
- gomod: Update dependencies
- tests/mini-oidc: Bump to go-jose/v4
- client/connection: Add support for the socket existing in /run/incus
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.1.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¶
À ce stade, chaque version d’Incus ne sera supportée que jusqu’à la sortie de la suivante. Cela changera dans quelques mois, car nous prévoyons de sortir une version LTS qui coïncidera avec les versions LTS de LXC et LXCFS.
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