返回新闻概览

Incus 6.1 已发布

2024年5月7日

简介

Incus 团队很高兴地宣布 Incus 6.1 发布!

这是继 Incus 6.0 LTS 之后的第一个功能版本。
提醒一下,功能版本仅支持到下一个版本发布,通常每月发布一次。关键生产环境应保留在 LTS 版本上。

在这个版本中,我们在整个过程中进行了许多小的易用性改进。其中许多是来自德克萨斯大学奥斯汀分校的学生的首次贡献。期待在 Incus 6.2 中看到更多这样的贡献!

image|690x459

像往常一样,您可以在线自行试用:https://linuxcontainers.cn/incus/try-it/

尽情享受!

新功能

创建复杂的 ZFS 池

使用我们的 zfs 驱动程序创建存储池时,source 密钥现已扩展,允许创建更复杂的 vdev,包括条带化、镜像、raidz1 和 raidz2。

示例语法

  • /dev/sda,/dev/sdb(条带化,RAID0)
  • mirror=/dev/sda,/dev/sdb(镜像,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)

结合 incus info --resources 中的数据,现在可以通过 API 部署复杂的存储池。

跨项目列出配置文件

作为添加所有 API 对象跨项目查询工作的一部分,现在可以跨所有项目列出配置文件。

在 API 级别,这是对 /1.0/profiles API 端点上的 all-projects=true 的支持,在 CLI 级别,它看起来像

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

此功能由德克萨斯大学奥斯汀分校的学生贡献。

跨项目列出网络区域

作为添加所有 API 对象跨项目查询工作的一部分,现在可以跨所有项目列出网络区域。

在 API 级别,这是对 /1.0/network-zones API 端点上的 all-projects=true 的支持,在 CLI 级别,它看起来像

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

此功能由德克萨斯大学奥斯汀分校的学生贡献。

为实例放置脚本程序提供了其他功能

Incus 通过使用称为脚本程序的类似 Python 的脚本来自定义实例放置。使用时,脚本程序会公开一些有关实例、潜在目标和请求原因的信息。

除了这些参数之外,还向这些脚本程序公开了许多函数。
其中包括记录信息的功能、实际做出最终放置决策的功能以及获取有关候选服务器的一些基本负载信息的功能。

现在,这正在通过两个附加函数扩展

  • get_instances(location, project) => []api.Instance
  • get_cluster_members(group) => []api.ClusterMember

这些都是可选参数,因此它们也可用于列出所有实例或所有集群成员,从而在放置脚本中提供很大的灵活性。

文档:https://linuxcontainers.cn/incus/docs/main/explanation/clustering/#instance-placement-scriptlet
此功能由德克萨斯大学奥斯汀分校的学生贡献。

将 YAML 馈送到 incus CLI 中的 create 命令

许多 Incus 命令已经支持通过其标准输入读取 YAML 文件作为 create 命令的一部分,但这并不一致,也没有得到很好的记录,我们现在正在使事情变得一致,并且此版本现在支持在以下命令中读取 YAML 对象定义

  • incus create & incus 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

对于所有这些,类似于匹配的 show 命令中显示的 YAML 数据可以在创建时通过 stdin 馈送,以在创建对象时配置对象。

incus CLI 中的可自定义列

我们在 CLI 中缓慢地使另一件事变得一致,即能够选择在我们的 list 命令中显示哪些列。

这还扩展了以下命令现在也支持它

  • 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

此功能由德克萨斯大学奥斯汀分校的学生贡献。

容器的 migration.stateful 配置键

migration.stateful 配置键现已扩展到也适用于容器。

现在需要将其设置为 true 才能访问任何需要记录和恢复容器中进程状态的功能(CRIU),这基本上意味着有状态停止、有状态快照和实时迁移。

此更改不太可能影响许多用户,因为 CRIU 能够实时迁移或执行 Incus 容器的有状态转储的功能非常有限,因此通常被认为是不可用的。
此更改确实具有为意外请求将使用 CRIU 的操作的用户提供更清晰错误的好处。

此功能由德克萨斯大学奥斯汀分校的学生贡献。

OVN 上的无状态 ACL

一个新的 allow-stateless 操作现已添加到 Incus 的网络 ACL 规则中。

顾名思义,这会导致在 OVN 内部创建一条无状态规则。
这非常适合有状态规则可能带来沉重成本且可能存在匹配的无状态规则(例如 DNS 交互)的情况。

此功能由德克萨斯大学奥斯汀分校的学生贡献。

实例正常运行时间(启动时间)跟踪

一个新的 StartedAt 字段已添加到实例状态数据中。
这公开了实例启动时的时间戳,也可在 incus infoincus 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 |                      |
+-------------+---------+-----------------+----------------------+

此功能由德克萨斯大学奥斯汀分校的学生贡献。

改进疏散期间的网络处理

执行集群疏散时,所有网络现在将在疏散结束时关闭,并且仅作为恢复操作的一部分重新启动。

这在 OVN 环境中特别有用,因为它确保疏散的 Incus 服务器不会充当任何已定义网络的虚拟路由器,从而使系统关闭/重新引导不太可能导致网络故障。

此功能由德克萨斯大学奥斯汀分校的学生贡献。

完整更改日志

以下是此版本中所有更改的完整列表

完整提交列表
  • doc/support: 更新 LTS
  • incusd/network: 删除 bridge.driver=native 对扩展 external_interfaces 语法的要求
  • doc/network/bridge: 更新扩展 external_interfaces 文档
  • incusd/storage/drivers/zfs: 简化数据集接收并修复进度处理
  • gomod: 更新依赖项
  • mini-oidc: 合并到主 gomod
  • gomod: 更新依赖项
  • go.mod: 提升包主版本
  • global: 将 Go 包更新到 v6
  • test: 更新 godeps.list
  • README: 更新 godoc URL
  • doc/rest-api: 刷新 swagger YAML
  • cmd/incus: 修复导入顺序
  • incusd: 删除不需要的导入重命名
  • incusd/instance: 修复重复导入
  • doc/projects: 微调示例
  • shared/api: 删除容器资源(已弃用)
  • doc/rest-api: 刷新 swagger YAML
  • incus/create: 删除死代码
  • i18n: 更新翻译模板
  • incusd/daemon: 删除旧的迁移逻辑
  • incusd: 停止在资源中提及容器
  • doc/rest-api: 在示例中使用实例 API
  • incusd/db/cluster: 容器 URL 在 Incus 中无效
  • incusd/instances: 疏散时不要启动实例
  • doc/installing: 对源代码构建发行版说明进行排序
  • doc/installing: 添加 OpenSUSE 源代码说明
  • doc/installing: 添加 Alpine 说明
  • incus/aliases: 修复补全回归
  • incus/snapshot: 修复删除包含冒号的快照
  • incusd/instance/drivers: 使 SR-IOV 获取稳定的 MAC
  • incusd/device/nic_sriov: 使用稳定的 MAC
  • incus/profile: 添加对从 YAML 创建的支持
  • i18n: 更新翻译模板
  • incusd/instance/lxc: 仅在 cgroup1 上应用软 cgroup 限制
  • incus/admin: 不要隐藏 sql 命令
  • grafana: 刷新仪表板
  • doc/metrics: 在 Grafana 设置中提及 Loki
  • grafana: 通过项目更好地过滤 Loki 事件
  • incusd/loki: 在独立系统上使用主机名作为默认实例属性
  • incusd/loki: 重新排序配置字段
  • incusd/loki: 允许覆盖位置字段
  • incusd/loki: 在独立系统上将位置字段设置为本地主机名
  • incus/projct: 添加对从 yaml 创建项目的支持
  • i18n: 更新翻译模板
  • incusd/network/ovs: 将 GetOVNEncapIP 移植到 libovsdb
  • incusd/network/ovs: 为 GetOVNBridgeMappings 添加一些注释
  • incusd/network/ovs: 将 AddOVNBridgeMapping 移植到 libovsdb
  • incusd/network/ovs: 将 RemoveOVNBridgeMapping 移植到 libovsdb
  • incusd/network/ovs: 将 GetHardwareOffload 移植到 libovsdb
  • incusd/network/ovs: 将 GetBridgePorts 移植到 libovsdb
  • incusd/network/ovs: 将 UpdateBridgePortVLANs 移植到 libovsdb
  • incusd/network/ovs: 将 AssociateInterfaceOVNSwitchPort 移植到 libovsdb
  • incusd/network/ovs: 将 Installed 切换为检查 unix 套接字
  • incusd/network: 更新 OVS 函数更改
  • 添加缺少的 SecureBoot 固件名称
  • incus/snapshot: 添加对从 yaml 创建项目的支持
  • i18n: 更新翻译模板
  • api: network_zones_all_projects
  • shared/api: 将 Project 字段添加到 NetworkZone
  • incusd/network_zones: 添加对 all-projects 的支持
  • doc/rest-api: 刷新 swagger YAML
  • client: 添加 GetNetworkZonesAllProjects
  • incus/network_zone: 为 list 添加 --all-projects 标志
  • i18n: 更新翻译模板
  • tests: 添加 all-projects 网络区域测试
  • incusd/network/ovn: 将 LogicalRouterAdd 移植到 libovsdb
  • incusd/network/ovn: 删除 LogicalRouterAdd
  • incusd/network: 将 LogicalRouterAdd 用法替换为 CreateLogicalRouter
  • incusd/network/ovn: gofmt
  • incusd/cluster: 在疏散期间禁用网络
  • incusd/cgroup: 设置预留的巨页限制
  • incusd/storage/drivers: 引入 SparseFileWrapper
  • incusd/storage/drivers/vfs: 在备份导入中使用 SparseFileWrapper
  • incusd/storage/drivers/vfs: 在卷迁移中使用 SparseFileWrapper

  • incus/storage: 支持从 YAML 创建存储池
  • i18n: 更新翻译模板
  • incus/info: 将 CPU 架构显示为单独一行
  • i18n: 更新翻译模板
  • incus/cluster_group: 添加对集群组创建的 YAML 支持
  • i18n: 更新翻译模板
  • gitignore: 添加 JetBrains
  • api: storage_zfs_vdev
  • doc: 在 doc/reference/storage_zfs.md 中更新 ZFS 对多个块设备和 vdev 类型的支持
  • incusd/storage/zfs: 添加对 vdev 类型和多个块设备的支持
  • incus/info: 对网络接口进行排序
  • incus/network_acl: 为网络 ACL 创建添加 cmd.Example
  • i18n: 更新翻译模板
  • incus/network_forward: 添加创建的 YAML 示例
  • i18n: 更新翻译模板
  • incus/config_template: 添加对创建的文件支持
  • i18n: 更新翻译模板
  • incus/network_integrations: 添加对创建的 YAML 支持
  • i18n: 更新翻译模板
  • incusd/storage/s3: 使用 'mc' 客户端
  • incusd/storage: 切换为使用 minio 的 'mc' 客户端
  • gomod: 更新依赖项
  • github: 下载 MinIO 客户端
  • doc: 避免使用 MyST 3.0.0
  • incus/doc/installing.md: 添加 Docker 信息
  • doc: 将 Podman 添加到词表中
  • incus/cluster: 添加列到列表中
  • i18n: 更新翻译模板
  • incus/project: 添加可自定义的列到列表中
  • i18n: 更新翻译模板
  • api: container_migration_stateful
  • internal/instance: 为容器添加 migration.stateful
  • incusd/instance/lxc: 添加对 migration.stateful 的检查
  • doc: 更新配置
  • incus/network_load_balancer: 添加创建的示例
  • i18n: 更新翻译模板
  • incus/network_zone: 添加创建命令的示例
  • i18n: 更新翻译模板
  • doc: 修复错误的 sphinx 要求
  • incusd/instances/qemu: 微调安全启动固件列表
  • cmd/incus/admin_cluster: 为 incusd 添加 libexec 路径
  • incus/storage: 当没有传递驱动程序时显示用法
  • incusd/storage/drivers/dir: 微调路径验证
  • incusd/backup: 在查找错误时显示配置文件列表
  • incusd/apparmor/lxc: 允许访问 binfmt_misc
  • incusd/apparmor/lxc: 刷新生成的规则
  • incusd/storage: 处理导入时的实例卷大小
  • incus/profile: 添加可自定义的列到列表中
  • i18n: 更新翻译模板
  • incus/project: 修复列表的帮助消息
  • i18n: 更新翻译模板
  • api: profiles_all_projects
  • shared/api: 将 Project 字段添加到 Profile
  • client: 添加 GetProfilesAllProjects
  • incus/profile: 将 all-projects 添加到列表中
  • incusd/db/cluster: 将 Project 字段添加到 Profile
  • incusd/profile: 添加 all-projects 支持
  • doc/rest-api: 刷新 swagger YAML
  • i18n: 更新翻译模板
  • incus/storage_volume: 阐明卷错误
  • incusd/apparmor/lxc: 修复对 kernel/security/apparmor 的访问
  • api: instances_scriptlet_get_instances
  • doc/instances/scriptlet: 添加 get_instances
  • incusd/scriptlet: 添加 get_instances
  • api: instances_scriptlet_get_cluster_members
  • doc/instances/scriptlet: 添加 get_cluster_members
  • incusd/scriptlet: 添加 get_cluster_members
  • api: 添加 network_acl_stateless
  • doc/network_acl: 添加 allow-stateless 操作
  • incusd/network/acl: 添加 allow-stateless 操作
  • incusd/network/ovn/nb: 将 DeleteLogicalRouter 移植到 libovsdb
  • incusd/network/ovn/nb: 将 CreateLogicalRouterSNAT 移植到 libovsdb
  • incusd/network: 更新 OVS 函数更改
  • incusd/network/acl: 正确地在 ACL 循环之外运行实例计数
  • incusd/network/ovn: 等待最多 1 秒以获取动态 IP
  • incusd/network/ovn/nb: 将 DeleteLogicalRouterNAT 移植到 libovsdb
  • incusd/network: 更新 OVS 函数更改
  • shared/archive: 修复错别字
  • incusd/cluster: 重新组织加入逻辑
  • incusd/cluster: 在加入期间忽略 OVN 网络
  • shared/archive: 正确锚定排除规则
  • incusd/project: 重做低级权限检查
  • incus/storage_bucket: 添加存储桶创建的示例
  • i18n: 更新翻译模板
  • incus/network_peer: 添加创建命令的示例
  • i18n: 更新翻译模板
  • api: instance_state_started_at
  • shared/api: 将 StartedAt 添加到 InstanceState
  • doc/rest-api: 刷新 swagger YAML
  • incusd/instance: 将 StartedAt 添加到 InstanceState
  • incus/info: 添加 Started 字段
  • incus/list: 添加启动时间列
  • i18n: 更新翻译模板
  • Makefile: 清理 gomod 更新
  • gomod: 更新依赖项
  • tests/mini-oidc: 升级到 go-jose/v4
  • client/connection: 添加对 /run/incus 中存在的套接字的支持

文档

Incus 文档可以在以下位置找到
https://linuxcontainers.cn/incus/docs/main/

软件包

由于 Incus 上游仅发布常规发行版 tarball,因此没有官方的 Incus 软件包。以下是一些可用于启动和运行 Incus 的选项。

在 Linux 上安装 Incus 服务器

Incus 可用于大多数常见的 Linux 发行版。您可以在我们的文档中找到详细的安装说明。

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

Incus 客户端的 Homebrew 软件包

客户端工具可通过 HomeBrew 在 Linux 和 MacOS 上使用。

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

Incus 客户端的 Chocolatey 软件包

客户端工具可通过 Chocolatey 供 Windows 用户使用。

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

Incus 客户端的 Winget 软件包

客户端工具也可通过 Winget 供 Windows 用户使用。

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

支持

在这个早期阶段,每个 Incus 版本都只支持到下一个版本发布为止。这将在几个月后发生变化,因为我们计划在 LXC 和 LXCFS 的 LTS 版本发布时发布一个 LTS 版本。

社区支持提供在:https://discuss.linuxcontainers.org
商业支持可通过以下方式获得:https://zabbly.com/incus
错误报告:https://github.com/lxc/incus/issues