返回新闻概览

Incus 6.2 已发布

2024年5月31日

介绍

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

此版本包含来自 德克萨斯大学奥斯汀分校 学生贡献的第二波变更,以及其他一些功能和改进。

image|690x454

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

尽情享受!

新功能

新的 incus top 命令

添加了新的 incus top 命令。它基于 Incus 内置的 OpenMetrics 端点,提供了一种刷新实例列表的视图,包括 CPU、内存和磁盘使用情况。

+---------------+-------------+-----------+-----------+
| INSTANCE NAME | CPU TIME(S) |  MEMORY   |   DISK    |
+---------------+-------------+-----------+-----------+
| foo           | 6.73        | 12.44MiB  | 341.88MiB |
+---------------+-------------+-----------+-----------+
| speedtest     | 32.79       | 23.84MiB  | 373.50MiB |
+---------------+-------------+-----------+-----------+
| v1            | 67130.91    | 254.54MiB | 1.25GiB   |
+---------------+-------------+-----------+-----------+
Press 'd' + ENTER to change delay
Press 's' + ENTER to change sorting method
Press CTRL-C to exit

Delay: 5s
Sorting Method: Alphabetical

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

资源 API 中的系统负载信息

资源 API 中添加了一个新部分,用于公开服务器负载信息(1分钟、5分钟、10分钟)以及总进程数。

这对于放置和自动平衡逻辑特别有用,因为它允许仅从 Incus API 获得对各个服务器繁忙程度的良好了解。

stgraber@castiana:~$ incus info --resources
System:
  UUID: 05006c9c-7863-ee11-9e1b-224425600022
  Vendor: Framework
  Product: Laptop 13 (AMD Ryzen 7040Series)
  Family: Laptop
  Version: A5
  SKU: FRANDGCP05
  Serial: FRANDGCPA5340500AZ
  Type: physical
  Chassis:
      Vendor: Framework
      Type: Notebook
      Version: A5
      Serial: FRANDGCPA5340500AZ
  Motherboard:
      Vendor: Framework
      Product: FRANMDCP05
      Serial: FRANMDCPA534040120
      Version: A5
  Firmware:
      Vendor: INSYDE Corp.
      Version: 03.05
      Date: 03/29/2024

Load:
  Processes: 519
  Average: 0.80 0.77 0.71

[snip...]

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

查询实例和项目访问信息的功能

添加了两个新的 API,允许查询项目的访问列表,甚至特定实例的访问列表。

这与我们的 OpenFGA 支持相集成,并提供了足够新的 OpenFGA 版本,将向您展示究竟哪些人可以访问实例以及他们的角色是什么。

stgraber@castiana:~$ incus info --show-access foo
- identifier: stgraber@stgraber.org
  role: admin
  provider: openfga

stgraber@castiana:~$ incus project info --show-access default
- identifier: stgraber@stgraber.org
  role: admin
  provider: openfga

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

强制删除项目

在处理大量繁忙的项目时,删除它们可能会变得相当令人沮丧,因为必须跟踪并以正确的顺序删除它们包含的所有内容。

为了解决这个问题,我们现在有了 incus project delete --force,它将指示 Incus 自行以正确的顺序删除所有内容,然后再删除项目本身。

这显然是一件非常危险的事情。命令行工具将始终要求您确认您确实希望完全删除该项目。

stgraber@castiana:~$ incus project delete demo
Error: Only empty projects can be removed.

stgraber@castiana:~$ incus project delete demo --force
Remove demo and everything it contains (instances, images, volumes, networks, ...) (yes/no): yes
Project demo deleted

新的 get_project 脚本文本功能

对于使用我们脚本文本实例放置功能 (instances.placement.scriptlet) 的用户,现在添加了一个新函数,get_project

这允许检索特定项目的全部详细信息 (api.Project),如果您希望项目限制或限制影响放置决策,这将特别有用。

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

跨项目查询对象

Incus 长期以来一直支持列出所有实例,无论项目如何。
然后最近,这扩展到了还包括存储卷、镜像、配置文件、网络区域和操作。

使用 Incus 6.2,所有剩余的对象集合现在都支持此功能,添加
- 存储桶
- 网络
- 网络 ACL

CLI 已更新以匹配,因此所有与可以是项目特定的对象交互的 list 命令现在也支持 --all-projects

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

incus info --resources 中的 PCI 设备

所有 PCI 设备现在都包含在 incus info --resources 输出中。
过去,只有那些包含在 GPU 或磁盘部分的设备才能轻松获得。

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

incus-simplestreams 中改进的别名处理

最初的 incus-simplestreams 实现将自动生成我们标准的别名外观,基本上是 DISTRIBUTION/RELEASE/VARIANT,但这不适合所有环境,因此您现在有两个新的参数可以用于 incus-simplestreams add

  • --no-default-alias 用于禁用上述别名
  • --alias 用于定义自定义别名(可以多次传递)

incus CLI 中将 YAML 提供给 create 命令

这项工作从 Incus 6.1 开始,现在已完成。

所有 create 命令以及 incus initincus launch 现在都支持从 stdin 读取初始配置作为 YAML。

这使得更复杂的部署脚本化变得更加容易。

CLI 中可定制的列列表

另一项从 Incus 6.1 开始,现在已完成的工作。

所有具有 list 功能的 CLI 命令现在都支持 --column/-c 标志。

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

更多自动生成的文档

对于大多数用户来说,这应该不是一个明显的变化,但我们一直在慢慢地将我们的文档迁移到直接从代码中的注释生成,从而降低了文档过时或不同步的风险。

使用 Incus 6.2,以下内容现在以这种方式生成

  • 网络区域
  • 镜像限制
  • 内核限制
  • 设备
    • 磁盘
    • unix-block
    • unix-char
    • unix-hotplug
    • USB

这项工作由 德克萨斯大学奥斯汀分校 学生贡献。

完整变更日志

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

完整提交列表
  • incusd/instance/lxc: 为镜像限制添加 gendoc 注释
  • incusd/instance/qemu: 为镜像限制添加 gendoc 注释
  • doc: 更新配置
  • doc/image-handling: 使用 gendoc 数据
  • incus/storage_bucket: 为密钥创建添加 yaml 支持
  • i18n: 更新翻译模板
  • incusd/instance/qemu: 修复 StartedAt 处理
  • incus/storage: 列表中的可定制列
  • i18n: 更新翻译模板
  • incusd/network/ovn: 将 LogicalRouterSNATAdd 和 LogicalRouterDNATSNATAdd 移植到 libovsdb
  • incusd/network: 更新以适应 OVN 函数更改
  • api: instances_scriptlet_get_project
  • doc/instances/scriptlet: 添加 get_project
  • incusd/scriptlet: 添加 get_project
  • api: networks_all_projects
  • shared/api: 为网络添加项目字段
  • client: 添加 GetNetworksAllProjects
  • incus/network: 添加 all-projects
  • incusd/db: 添加 GetNetworksAllProjects
  • incusd/networks: 添加 all-projects
  • internal/instance: 为 limits.kernel 添加 gendoc
  • doc: 更新配置
  • doc: 为 limits.kernel 使用 gendoc
  • api: network_acls_all_projects
  • shared/api: 为 NetworkACL 添加项目字段
  • client: 添加 GetNetworkACLsAllProjects
  • incus/network/acl: 添加 all-projects
  • incusd/db: 添加 GetNetworkACLsAllProjects
  • incusd/network/acl: 设置项目字段
  • incusd/network_acls: 添加 all-projects
  • api: storage_buckets_all_projects
  • shared/api: 为 StorageBucket 添加项目字段
  • client: 添加 GetStoragePoolBucketsAllProjects
  • incus/storage/bucket: 添加 all-projects
  • incusd/db/storage_buckets: 填充项目字段
  • incusd/storage_buckets: 添加 all-projects
  • i18n: 更新翻译模板
  • incusd/networks: 修复导入遮蔽
  • doc/rest-api: 刷新 swagger YAML
  • client: 使 GetProfilesAllProjects 与 GetProfiles 对齐
  • client: 使 GetNetworkZonesAllProjects 与 GetNetworkZones 对齐
  • client: 标准化 GetNetworkAllocation 函数
  • incus/network_allocations: 更新以适应客户端更改
  • incusd/device/usb: 为 USB 设备添加 gendoc
  • doc: 更新配置
  • doc: 为 USB 设备使用 gendoc
  • api: resources_load
  • shared/api: 为资源 API 添加负载
  • doc/rest-api: 刷新 swagger YAML
  • incusd/resources: 添加负载信息
  • incus/info: 添加负载信息
  • i18n: 更新翻译模板
  • incusd/device/unix: 添加 gendoc 注释
  • doc: 更新配置
  • doc/devices_unix_block.md: 使用 gendoc 数据
  • doc/devices_unix_char.md: 使用 gendoc 数据
  • doc/devices_unix_hotplug.md: 使用 gendoc 数据
  • incus/top: 添加新命令
  • i18n: 更新翻译模板
  • incusd/network/zone: 为网络区域添加 gendoc
  • doc: 更新配置
  • doc: 为网络区域使用 gen doc
  • incusd/device/unix: 运行 gofmt
  • incus/info: 为 --resources 添加 PCI 设备
  • i18n: 更新翻译模板
  • incusd/device/disk: 添加 gendoc 注释
  • doc: 更新配置
  • doc/devices/disk: 使用 gendoc
  • incus/network: 列表中的可定制列
  • i18n: 更新翻译模板
  • incusd/network_zones: 修复项目中区域的列出
  • incusd/instance/lxc: 修复 migration.stateful 的处理
  • gomod: 更新依赖项
  • incusd/network/ovs: 修复错误的 VLANMode 值
  • fix: 关闭资源
  • incusd/instance: 修复在 32 位体系结构上构建
  • incus/network_zone: 为网络区域记录创建添加示例
  • i18n: 更新翻译模板
  • incus/storage_volume: 为创建添加 yaml 支持
  • i18n: 更新翻译模板
  • cmd/incus/info: 修复当机箱、主板和固件信息不可用时出现的运行时错误
  • 使用 Weblate(德语)翻译
  • incusd/instance/qemu: 允许在运行时设置 protection.delete
  • doc/api-extension: 修复拼写错误
  • shared/api: 引入访问结构
  • api: instance_access
  • incusd/auth: 引入 GetInstanceAccess
  • incusd/instance: 添加访问端点
  • api: project_access
  • incusd/auth: 引入 GetProjectAccess
  • incusd/project: 添加访问端点
  • doc/rest-api: 刷新 swagger YAML
  • client: 添加 GetInstanceAccess
  • client: 添加 GetProjectAccess
  • incus/info: 修复 --show-log 的描述
  • incus/info: 添加 --show-access
  • incus/project: 为 info 添加 --show-access
  • i18n: 更新翻译模板
  • incusd/auth/fga: 在模型中将 manager 重命名为 admin
  • incusd/auth/fga: 重做权限模型
  • incusd/auth/fga: 重建模型
  • tests: 修复权限更改
  • incusd/instance/agent-loader: 支持安装到 /etc
  • incusd/apparmor/lxc: 修复规则语法
  • incus-simplestreams add: 添加了标志:--no-default-alias,--alias。#875
  • incus/storage_volume/snapshot: 支持使用 YAML 创建快照
  • i18n: 更新翻译模板
  • shared/idmap: 使 get_userns_fd 配置 userns
  • incus-migrate: 处理有效的 CA 证书
  • incusd/instances_post: 修复迁移到远程集群
  • incusd/apparmor: 检测 nosymfollow 支持
  • incusd: 设置套接字上的 SELinux 标签
  • incus/network: 将 attach-profile 与 attach 对齐
  • create_detached_idmapped_mount: 避免双重关闭
  • incusd/instance/qemu: 扩展缺失的 QEMU 错误
  • doc/installing: 提到 VM 的额外软件包
  • incusd/storage/btrfs: 修复 btrfs 参数顺序
  • incusd/seccomp/sysinfo: 处理 64 位系统上的 32 位
  • api: projects_force_delete
  • incusd/api_project: 添加强制删除端点
  • doc/rest-api: 刷新 swagger YAML
  • client: 引入 DeleteProjectForce
  • cmd/incus/project: 添加 --force 到删除
  • i18n: 更新翻译模板
  • incusd/project: 简化 projectIsEmpty
  • incusd/db: 引入 GetNetworkZoneURIs
  • incusd/db: 引入 GetStorageBucketURIs
  • incusd/api_project: 修复 UsedBy
  • incusd/api_project: 添加强制删除逻辑
  • incus/completion: 减少 API 调用
  • incus/publish: 完成快照名称
  • incus/completion: 修复导入遮蔽
  • 使用 Weblate(法语)翻译
  • Makefile: 为 Go 1.21 固定 go-acme/lego
  • 更新依赖项
  • cmd/incus/console: 清理 --show-log
  • incusd/instance_console: 删除旧检查
  • incusd/instance_console: 处理丢失的日志文件
  • incusd/instance_console: 在日志为空时不要失败
  • incusd/instance_console: 清理错误消息
  • i18n: 更新翻译模板
  • incusd/device/sriov: 将代码与注释对齐

文档

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

软件包

由于 Incus 上游只发布常规的发布版压缩包,因此没有官方的 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.2.0

用于 Incus 客户端的 Winget 软件包

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

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

支持

每月功能发布只支持到下一个发布版出来为止。需要更长支持期限和更少变更的用户应该考虑使用 Incus 6.0 LTS。

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