Incus 0.7 已发布¶
2024年3月26日
简介¶
Incus 团队很高兴地宣布发布 Incus 0.7!
这将是我们 Incus 6.0 LTS 之前的最后一个版本,Incus 6.0 LTS 现已计划于下周发布。正如版本发布一样,这是一个非常繁忙的版本,这正是我们在发布 LTS 之前所希望的,试图将 LTS 版本本身的新功能数量降到最低。
像往常一样,您可以在线自行尝试:https://linuxcontainers.cn/incus/try-it/
尽情享受!
新功能¶
网络集成¶
网络集成是一个新的顶级概念,它是一种将 Incus 部署连接到其自身控制范围之外的网络的方式。
目前,该概念的唯一实现是OVN互连,它使 Incus 集群能够将其 OVN 网络直接与在其他 Incus 集群或其他 OVN 用户(如 OpenStack 或 Kubernetes)上运行的等效网络对等。
以下是如何使用 OVN 互连网关创建新的网络集成,然后通过它对等现有网络的示例
root@az01-server01:~# incus network integration create ovn-region ovn Network integration ovn-region created root@az01-server01:~# incus network integration set ovn-region ovn.northbound_connection tcp:[10.50.1.12]:6645,tcp:[10.50.2.13]:6645,tcp:[10.50.3.19]:6645 root@az01-server01:~# incus network integration set ovn-region ovn.southbound_connection tcp:[10.50.1.12]:6646,tcp:[10.50.2.13]:6646,tcp:[10.50.3.19]:6646 root@az01-server01:~# incus network peer create default region ovn-region --type=remote Network peer region created
文档:https://linuxcontainers.cn/incus/docs/main/howto/network_integrations/
镜像服务器管理工具¶
运行 Incus 镜像服务器的常见方法(无论是用于某些内部服务器还是作为公开可用的镜像服务器)是通过静态 Web 服务器使用simplestreams
提供 Incus 镜像。
为了简化设置,我们现在引入了新的工具incus-simplestreams
,它可以轻松地管理简单的镜像服务器,列出可用的镜像,添加和删除镜像以及生成所需的元数据文件。
stgraber@dakara:~$ mkdir image-server stgraber@dakara:~$ cd image-server/ stgraber@dakara:~/image-server$ incus-simplestreams generate-metadata ~/Downloads/incus.tar.xz Operating system name: Red Hat Enterprise Linux Release name: 9 Variant name [default="default"]: Architecture name: x86_64 Description [default="Red Hat Enterprise Linux 9 (default) (x86_64) (202403260239)"]:· stgraber@dakara:~/image-server$ incus-simplestreams add ~/Downloads/incus.tar.xz ~/Downloads/rhel9.qcow2· stgraber@dakara:~/image-server$ incus-simplestreams list +------------------------------------------------------------------+--------------------------------------------------+--------------------------+---------+---------+--------------+-----------------+----------------------+ | FINGERPRINT | DESCRIPTION | OS | RELEASE | VARIANT | ARCHITECTURE | TYPE | CREATED | +------------------------------------------------------------------+--------------------------------------------------+--------------------------+---------+---------+--------------+-----------------+----------------------+ | 7d256e4fac6fc63fb47bc1e07e1c6ee234281cdf1ed21788c920d763b7bd93ba | Red Hat Enterprise Linux 9 x86_64 (202403252239) | Red Hat Enterprise Linux | 9 | default | x86_64 | virtual-machine | 2024/03/25 00:00 UTC | +------------------------------------------------------------------+--------------------------------------------------+--------------------------+---------+---------+--------------+-----------------+----------------------+ stgraber@dakara:~/image-server$ find . | sort . ./images ./images/ef6cf538776b05a64c789f16f235a757522724f2c490c7e118645be2eb920d30.incus.tar.xz ./images/ef6cf538776b05a64c789f16f235a757522724f2c490c7e118645be2eb920d30.qcow2 ./streams ./streams/v1 ./streams/v1/images.json ./streams/v1/index.json
将其放在支持 HTTPS 的 Web 服务器上,然后使用以下命令添加:
incus remote add my-server https://xyz.example.net --protocol=simplestreams
JSON Web 令牌身份验证¶
Incus 主要支持两种远程身份验证机制
- TLS 客户端证书(带有或不带有限制地添加到本地信任存储中)
- OpenID Connect 外部身份验证(带有或不带有 OpenFGA 进行授权)
对于与远程 Incus 服务器进行简单交互,前者是最常见的。
我们自己的 CLI 工具和大多数第三方工具在使用 TLS 密钥对建立 HTTPS 连接并通过这种方式进行身份验证时没有任何问题。
但在某些情况下,例如在反向 HTTP(S) 代理后面运行 Incus 时,TLS 客户端证书可能会变得有点问题。
为了解决这个问题,我们现在支持通过 HTTP Authorization
字段使用 JSON Web 令牌 (JWT) 持有者令牌。该令牌可以通过任何拥有有效 TLS 客户端证书的用户生成,方法是将 Subject 字段设置为证书指纹,设置适用的 NotBefore/NotAfter 值,并使用其私钥对 JWT 进行签名。
Incus 将把任何此类连接视为等同于使用 TLS 客户端证书。
stgraber@dakara:~$ openssl req -x509 -newkey rsa:4096 -sha384 -keyout client.key -nodes -out client.crt -days 1 -subj "/CN=test.local" .+.........+...+...+..+....+......+........+.+.....+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+.+......+...+......+......+..+...+...+...............+.......+...+......+...+.....+......+....+......+..+...+......+....+............+.....+....+.....+.+............+..+.........+......+....+......+...........+....+........+...+...+.+...+..+..........+.....+...+......+............+...+.......+........+....+.....+.+..+.......+......+..+....+........+..........+...+..+.+.....+.+......+..+.......+.....+.+..+..........+..+....+..............+.+..+...........................+...+....+......+...+..............+.+..+....+.....+.+.........+...+..+....+..+.............+.........+.....+...+..........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+...+...+..+...+.........+.+...+............+..+............+.+.......................................+.....+...+......+.........+......+.+.....+...+.+...........+......+.......+.....+.......+......+.....+..........+...+..+.........+....+.........+...........+......+.+..................+..+....+...........+.............+.....+....+..+......+............+..........+......+......+......+..+.............+.....+...+.+........+............+....+.................+.........+......+.......+...+.........+.....+....+......+........+.+..+....+......+........+....+...+.................+.+..+.........+....+............+.....+.........+....+.....+.......+.....+...............+..............................+....+........+.......+...........+.......+.....+......+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...+...............+.+...+...+...+.........+..+.+...+..+.......+.....+.+..+...+...................+...........+......+....+..+............+...+.......+..+.........+....+...+.........+.....+...+...+....+...........+...+.+.........+.....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+......+..+...+......+.+..+.............+..+.......+........+...+...+....+...............+..+....+..+....+...+.....+.+.....+..........+.....+.+.....+....+............+.........+...+.....+......+......+.............+..+.+..+.......+...+........+...+.......+.........+......+..+.+......+...........+...+.........+...+...+....+..+.........+....+.....+.+......+.........+..+..........+..+...+...+....+..+...+.+.....+......+.+...+......+.....+.+.....+.......+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+..+.......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----- stgraber@dakara:~$ incus config trust add-certificate client.crt --restricted --projects demo stgraber@dakara:~$ tls2jwt client.key client.crt now 120 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2MzI3Y2Q5YmIxYTFmN2ExMWM3ODBkZjc4YjVkNjg5YzhkMGQ5YzcwZGQxOGQ1YTMyYzI1M2ZiODA0N2U2M2E0IiwiZXhwIjoxNzExNDcyMjE2LCJuYmYiOjE3MTE0NzIwOTYsImlhdCI6MTcxMTQ3MjA5Nn0.pNQ4AcgoymxWHROXVjcYX8QMKdf9QgRH3zex7qc16avX7_Ax1q_WFWzQWfP48Fh-ooeh9hBQKCQkZxjVxYx8Sy-cNqmkf1AI9KGh5uemHh3FYAbvebCTaIXan0B6glWHVnDSwLZKBWTDDai2VXOmUfntyV9yPJdTqxt1J0j8PNuIWzNVdFlcTxzpggcJMhbcqtf4GRwSMKx69HU5sP4AQ7GJ2cBvN7Im-nkRXTc7xiyYnIsFx0vIWJzojC4zwg0-C1LHKQD4DyEKhqOVISIKUSa3GhD6ajcDuGDS8af4Iz19sNPsSoSULBUG-a7E5lXx2vk802vOFFWV68ZHugsJHpdSpLFwTVixipQ1-QdKRozlMjNPguu-5CYxhZVR1p32lbN9D879xGbFXUgPJVwK25NILvbEMcrqnGPgKcRUjJlHtVljGOgXrjmG7dMiW5QOsyy1eIvJ1D1sNsG02fDTbchTzXHmIybxQTK0FXCyNDLOAl6xgW0Jundg7AN1uJU2cLEWy1x3TusqC7lyeTeF3WYT-G8xE2CU4GpLBeYWyLwuJgxRkaWcg9IXiivguPbWpcT0RMl1bmpn0TJ2VgEPCuSG0mJxMBp8HbAgxwgar8AHdpoZ43dCCwZnB0a0O_kmGkBE2xGKKvgTx_U6eSixZzyyNmHDC1KH1Vy1WW1ZcF0stgraber@dakara:~$· stgraber@dakara:~$ curl -s -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2MzI3Y2Q5YmIxYTFmN2ExMWM3ODBkZjc4YjVkNjg5YzhkMGQ5YzcwZGQxOGQ1YTMyYzI1M2ZiODA0N2U2M2E0IiwiZXhwIjoxNzExNDcyMjE2LCJuYmYiOjE3MTE0NzIwOTYsImlhdCI6MTcxMTQ3MjA5Nn0.pNQ4AcgoymxWHROXVjcYX8QMKdf9QgRH3zex7qc16avX7_Ax1q_WFWzQWfP48Fh-ooeh9hBQKCQkZxjVxYx8Sy-cNqmkf1AI9KGh5uemHh3FYAbvebCTaIXan0B6glWHVnDSwLZKBWTDDai2VXOmUfntyV9yPJdTqxt1J0j8PNuIWzNVdFlcTxzpggcJMhbcqtf4GRwSMKx69HU5sP4AQ7GJ2cBvN7Im-nkRXTc7xiyYnIsFx0vIWJzojC4zwg0-C1LHKQD4DyEKhqOVISIKUSa3GhD6ajcDuGDS8af4Iz19sNPsSoSULBUG-a7E5lXx2vk802vOFFWV68ZHugsJHpdSpLFwTVixipQ1-QdKRozlMjNPguu-5CYxhZVR1p32lbN9D879xGbFXUgPJVwK25NILvbEMcrqnGPgKcRUjJlHtVljGOgXrjmG7dMiW5QOsyy1eIvJ1D1sNsG02fDTbchTzXHmIybxQTK0FXCyNDLOAl6xgW0Jundg7AN1uJU2cLEWy1x3TusqC7lyeTeF3WYT-G8xE2CU4GpLBeYWyLwuJgxRkaWcg9IXiivguPbWpcT0RMl1bmpn0TJ2VgEPCuSG0mJxMBp8HbAgxwgar8AHdpoZ43dCCwZnB0a0O_kmGkBE2xGKKvgTx_U6eSixZzyyNmHDC1KH1Vy1WW1ZcF0' https://127.0.0.1:8443/1.0/projects | jq { "type": "sync", "status": "Success", "status_code": 200, "operation": "", "error_code": 0, "error": "", "metadata": [ "/1.0/projects/demo" ] }
可配置的 OIDC 用户名字段¶
对于使用 OpenID Connect 的用户,您可能已经注意到 Incus 会在可用时使用e-mail
声明作为用户的标识符。如果缺少,它将依赖于 Subject。
由于不同的部署可能会通过 OIDC 声明提供不同的信息,因此现在可以将oidc.claim
设置为用作用户标识符的声明。
stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name stgraber@stgraber.org stgraber@dakara:~$ incus config set oidc.claim=name stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name Stéphane Graber stgraber@dakara:~$ incus config set oidc.claim=sub stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name 99cb8caa-3640-45b9-b87a-55266366aaf3 stgraber@dakara:~$ incus config set oidc.claim=email stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name stgraber@stgraber.org
改进的 NUMA 处理¶
在此版本中,我们花费了大量时间尝试改进大型系统上的容器和虚拟机的性能。这显然包括多插槽系统,也包括在 NPS4 或类似模式下运行的 AMD 系统,其中每个 CPU 都作为多个 NUMA 节点公开。
总的来说,我们的目标是简化跨 NUMA 节点分配工作负载的过程,同时保持其 CPU 和内存正确固定,并选择最靠近其 NUMA 节点的 PCIe 资源。
作为其中的一部分,完成了一些工作
- limits.cpu.nodes
现在也支持虚拟机
- limits.cpu.nodes
中添加了一个新的balanced
值,它将使 Incus 选择配置为使用它的实例最少的 NUMA 节点
- SR-IOV GPU 选择现在也考虑 NUMA 节点作为选择逻辑的一部分,并且在找不到匹配项时,将优先选择连接到相同 CPU 插槽的 PCIe 设备
例如
stgraber@gputest:~$ incus list stgraber-gpu -cns4,limits.cpu.nodes,volatile.cpu.nodes,volatile.gpu.last_state.pci.parent,volatile.gpu.last_state.vf.id +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | NAME | STATE | IPV4 | LIMITS CPU NODES | VOLATILE CPU NODES | VOLATILE GPU LAST STATE PCI PARENT | VOLATILE GPU LAST STATE VF ID | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu01 | RUNNING | 10.232.44.8 (enp5s0) | balanced | 0 | 0000:63:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu02 | RUNNING | 10.232.44.9 (enp5s0) | balanced | 2 | 0000:03:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu03 | RUNNING | 10.232.44.10 (enp5s0) | balanced | 4 | 0000:e3:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu04 | RUNNING | 10.232.44.11 (enp5s0) | balanced | 5 | 0000:c3:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu05 | RUNNING | 10.232.44.12 (enp5s0) | balanced | 6 | 0000:c3:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu06 | RUNNING | 10.232.44.13 (enp5s0) | balanced | 7 | 0000:83:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu07 | RUNNING | 10.232.44.15 (enp5s0) | balanced | 1 | 0000:43:00.0 | 3 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu08 | RUNNING | 10.232.44.16 (enp5s0) | balanced | 2 | 0000:03:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu09 | RUNNING | 10.232.44.17 (enp5s0) | balanced | 3 | 0000:03:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu10 | RUNNING | 10.232.44.18 (enp5s0) | balanced | 4 | 0000:e3:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu11 | RUNNING | 10.232.44.19 (enp5s0) | balanced | 5 | 0000:c3:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu12 | RUNNING | 10.232.44.20 (enp5s0) | balanced | 6 | 0000:83:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu13 | RUNNING | 10.232.44.21 (enp5s0) | balanced | 7 | 0000:83:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu14 | RUNNING | 10.232.44.22 (enp5s0) | balanced | 1 | 0000:43:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu15 | RUNNING | 10.232.44.23 (enp5s0) | balanced | 2 | 0000:43:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu16 | RUNNING | 10.232.44.24 (enp5s0) | balanced | 3 | 0000:03:00.0 | 3 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+
在这种情况下,我们可以看到 16 个虚拟机,每个虚拟机都使用 NUMA 节点的新的balanced
选项,并在 8 个 NUMA 节点(2 个插槽 AMD NPS4)上进行调度,并选择 GPU 以进行匹配。
更多选择 USB 设备的选项¶
到目前为止,容器和虚拟机的 USB 设备直通一直使用vendorid
和productid
字段。只要系统上只连接了一个类型的 USB 设备,这就可以正常工作。
当存在多个相同设备时,无法区分它们一直是一个问题。
为了解决这个问题,现在已向usb
设备添加了三个新字段
- busnum
指 USB 总线编号
- devnum
指 USB 设备编号(在其总线上)
- serial
指 USB 设备序列号(并非所有设备都存在)
通过以下方式可以在完整的 Incus 资源列表中找到相同的字段:
incus query /1.0/resources
虚拟机的磁盘 I/O 节流¶
容器和虚拟机之间又消除了一个功能差距。
disk
设备上的limits.write
和limits.read
属性现在通过让 Incus 在 QEMU 中设置 I/O 节流在虚拟机上得到正确执行。
支持每秒字节和每秒 I/O 两种类型的限制。
每个远程客户端证书¶
现在可以在 Incus 命令行客户端配置目录(通常为~/.config/incus/
)中的新clientcerts
文件夹中放置<remote>.crt
和<remote>.key
文件,并在与该特定远程交互时使用这些证书。
虽然这本身可能很有用,但与全局远程结合使用时会更有用,全局远程可以在/etc/incus/config.yml
中添加。现在有了此功能,这些全局远程也可以在/etc/incus/clientcerts/
中提供客户端证书,然后所有系统用户都会使用该证书。
手动生成客户端证书密钥对¶
现在可以使用一个新命令来手动触发主client.crt
和client.key
密钥对的生成。
这可以通过运行incus remote generate-certificate
来完成
对lxd-to-incus
的改进¶
lxd-to-incus
工具在每次发布时都在不断发展。
在这个版本中,它获得了对从新发布的 LXD 5.21 LTS 迁移用户以及处理 Alpine 安装的支持。
此外,该工具的静态二进制版本现在可在 Github 上获得,使用户更容易获取该工具的最新版本,这在 Incus 版本之间修复错误时非常有用。
对incus-migrate
的改进¶
工作负载迁移工具incus-migrate
也进行了一些小的改进。
它现在可以使用本地 Incus 系统作为迁移的目标,这在从其他虚拟化工具导入虚拟机镜像时非常有用。
并且现在它还会提示是否应使导入的虚拟机使用 UEFI 固件或改用传统 BIOS。
其他镜像限制¶
这是一个内部细节,或者至少仅与公共镜像服务器运营商相关,但添加了两个新的镜像限制
requirements.nesting
这将要求容器具有security.nesting=true
requirements.cdrom_agent
这将要求将source=agent:config
磁盘设备添加到虚拟机
这两个可以用来标记需要额外用户交互才能正常工作的特定镜像,从而导致清晰的客户端错误,而不是启动可能已损坏的实例。
完整更改日志¶
以下是此版本中所有更改的完整列表
完整提交列表
- 使用 Weblate (日语) 翻译
- 使用 Weblate (日语) 翻译
- incus/image: 修复使用 --all-projects 时列处理
- 将 util.ValueInSlice 替换为 slices.Contains
- shared/util: 删除 ValueInSlice 函数
- incus/image: 修复使用 --all-projects 时列处理
- incusd/instance/qemu: 重新定位镜像需求检查
- doc/images: 添加 requirements.cdrom_agent
- incusd/instance/qemu: 添加对 requirements.cdrom_agent 的支持
- incusd/device/disk: 修复块卷使用不正确的问题
- 使用 Weblate (日语) 翻译
- incusd/network/ovn: 使用 ParseIPToNet 而不是手动 IPToNet 和 net.ParseIP
- incusd/network/ovn: 在族检查中使用 listenAddressNet
- incusd/instance/drivers: 禁用 incus cp 带快照时的架构检查
- 使用 Weblate (法语) 翻译
- incusd/network/bridge: 在所有 VXLAN 隧道上设置本地地址
- incus/instance/qemu: 修复 RecordOutput
- incus: 为实例操作和快照添加补全
- incus: 为配置文件添加补全
- incusd/network/ovn: 引入 get 辅助函数
- incusd/network/ovn: 添加一些缺失的索引
- incusd/network/ovn: 使用 get 辅助函数
- incusd/network/ovn: 修复 LogicalSwitchPortIPs 逻辑
- incusd/network/bridge: 修复 gofmt
- incusd/network/ovn: 修复 gofmt
- cmd/incus: 使用正确的 timestamps 检查
- cmd/incus: 使用一致的日期格式和时区
- client: 为了保持一致性,将 network_peer 重命名
- cmd/incusd: 将 network_peer 重命名为 network_peers
- shared/api: 为了保持一致性,将 network_allocation 重命名
- incusd/db: 修复注释拼写错误
- incusd/db/generate: 修复驼峰命名法处理错误
- incusd/db/network_peers: 修复重复类型定义
- incusd/auth: 删除 Permission 类型
- incusd/auth: 添加样板文档字符串
- incusd/images: 正确处理空创建日期和过期日期
- incus: 为远程添加补全
- incus: 为项目添加补全
- incusd/images: 修复在多个项目中报告镜像的问题
- github: 添加 lxd-to-incus 的静态构建
- lxd-to-incus: 添加对 Alpine 服务名称的支持
- lxd-to-incus: 重新组织目标列表
- lxd-to-incus: 添加对 APK 的支持
- Makefile: 将 OVN IC 添加到 update-ovsdb
- incusd/network: 更新 OVS/OVN 架构
- incusd/network/ovn: 添加 IC 客户端
- incusd/network/ovn: 向 NB 客户端添加 GetName
- incusd/network/ovn: 向 ICSB 添加 GetGateways
- incusd/network/ovn: 引入新的错误
- incusd/network/ovn: 向 ICNB 添加 CreateTransitSwitch 和 DeleteTransitSwitch
- incusd/device/gpu_sriov: 添加锁定
- incusd/device/gpu_sriov: 重新定位 vfio-pci 加载
- incusd/device/gpu_sriov: 重做 VF 分配逻辑
- incus/remote: 添加 generate-certificate 子命令
- i18n: 更新翻译模板
- incusd/drivers/qmp: 添加 SetBlockThrottle
- incusd/device/disk/config: 添加 DiskLimits
- incusd/device/disk: 重新调整限制解析
- incusd/device/disk: 在虚拟机上添加磁盘限制
- incusd/device/disk: 支持虚拟机的实时限制更新
- incusd/instance/qemu: 支持磁盘 I/O 限制
- incus/remote: 添加缺失的文档字符串
- incusd/certificates: 改善集群时的令牌处理
- cmd/incusd/api_1.0: 更新上下文
- cmd/incusd/api_cluster: 更新上下文
- cmd/incusd/api_internal: 更新上下文
- cmd/incusd/daemon: 更新上下文
- cmd/incusd/api_project: 更新上下文
- cmd/incusd/certificates: 更新上下文
- cmd/incusd/images: 更新上下文
- cmd/incusd/instance: 更新上下文
- cmd/incusd/network: 更新上下文
- cmd/incusd/operations: 更新上下文
- cmd/incusd/profiles: 更新上下文
- cmd/incusd/storage: 更新上下文
- cmd/incusd/warnings: 更新上下文
- incusd/devices: 跳过 NUMA CPU 上的隔离线程
- incusd/devices: 通过 NUMA 节点限制 CPU 线程
- incusd/instance/qemu: 添加对 limits.cpu.nodes 的支持
- incusd/device/gpu: 添加对 VF 选择的 limits.cpu.nodes 的支持
- incusd: 修复导入遮蔽
- incusd/images: 修复潜在的竞争条件
- incusd/instance/qemu: 添加对内存的 NUMA 节点限制的支持
- incusd/apparmor/qemu: 静默 apparmor 失败
- incusd/network/ovs: 引入新的错误
- incusd/network/ovn/nb: 将 SetChassisGroupPriority 移动到新的函数签名
- incusd/network/ovn/sb: 将 GetLogicalRouterPortActiveChassisHostname 移动到新的函数签名
- incusd/network/ovs: 将 GetBridge 移动到新的函数签名
- incusd/network/ovs: 将 CreateBridge 移动到新的函数签名
- incusd/network/ovs: 将 DeleteBridge 移动到新的函数签名
- incusd/network/ovs: 将 CreateBridgePort 移动到新的函数签名
- incusd/network/ovs: 将 GetChassisID 移动到新的函数签名
- incusd/network/ovs: 将 GetOVNBridgeMappings 移动到新的函数签名
- incusd/network: 更新函数更改
- incusd/device/nic: 更新函数更改
- incusd: 更新函数更改
- doc: 修复错误的快照语法
- 使用 Weblate (法语) 翻译
- doc: 修复令牌创建过程
- incusd/network/ovn/nb: 添加 GetLogicalSwitch
- incusd/network/ovn/nb: 将 ChassisGroupChassisDelete 替换为 SetChassisGroupPriority
- incusd/network/ovn/nb: 将 CreateLogicalRouterPort 移植到 OVSDB
- incusd/network/ovn/nb: 将 LogicalRouterPortLinkChassisGroup 替换为 CreateLogicalRouterPort
- incusd/network/ovn/nb: 将 CreateChassisGroup 移植到 OVSDB
- incusd/network/ovn/nb: 将 CreateLogicalSwitch 移植到 OVSDB
- incusd/network/ovn: 更新函数更改
- incusd/network/ovn: 删除状态引用
- incusd/state: 添加 OVNNB 和 OVNSB 处理程序
- incusd: 更新为使用 OVN 的状态
- incusd/device: 使 init 函数返回错误
- incusd/device: 在 nicOVN 上添加 OVN 检查
- client: 在 RawQuery 错误时仍然返回响应
- incus/query: 尊重错误的 --raw
- incusd/network/acl: 添加 OVN 检查
- incusd/network: 使 init 函数返回错误
- incusd/network: 在 ovn 驱动程序上添加 OVN 检查
- incusd/api: 重新排序配置检查
- incusd: 添加 OVN 加载程序
- 使用 Weblate (法语) 翻译
- incusd/network/ovn/nb: 将 CreateLogicalSwitchPort 移植到 OVSDB
- incusd/network/ovn/nb: 将 DeleteLogicalSwitchPort 移植到 OVSDB
- incusd/network/ovn/nb: 将 DeleteLogicalRouterPort 移植到 OVSDB
- incusd/network/ovn: 更新函数更改
- incusd/network/ovs: 将 GetOVNSouthboundDBRemoteAddress 移植到 OVSDB
- incusd/network/ovs: 将 DeleteBridgePort 移植到 OVSDB
- incusd/network/ovs: 将 GetInterfaceAssociatedOVNSwitchPort 移植到 OVSDB
- incusd/network/ovs: 使 GetChassisID 与其他函数保持一致
- incusd: 更新 OVS 函数更改
- incusd/network/ovn/icsb: 修复错误的数据库架构
- incusd/network/ovn/nb: 引入 GetLogicalRouterPort
- incusd/network/ovn/nb: 扩展 OVNSwitchPortOpts 以处理路由器端口
- incusd/network/ovn/nb: 将 RouterPort 字段类型更改为 OVNRouterPort
- incusd/network/ovn/nb: 将 DeleteChassisGroup 移植到 OVSDB
- incusd/network/ovn/icnb: 更新 DeleteTransitSwitch 以处理缺失的交换机
- incusd/network/ovn: 更新函数更改
- 使用 Weblate (法语) 翻译
- incus/completion: 在远程名称补全后不要添加空格
- incusd/device/disk: 禁用 virtiofsd 缓存
- incus-agent: 清理挂载逻辑
- 使用 Weblate (法语) 翻译
- incus: 将 parseVolume 暴露给整个包
- incus: 为存储池和卷添加补全
- incusd/device/gpu_sriov: 修复默认处理
- doc/packaging: 添加文档的说明
- incusd/auth: 修复受限用户的 --all-projects
- doc: 添加第三方工具页面
- gomod: 更新依赖项
- incusd/auth/tls: 防止项目修改
- doc: 更新词表
- internal/usbid: 允许覆盖 usb.ids 路径
- incus/completion: 修复镜像名称补全
- doc/environment: 文档 INCUS_USBIDS_PATH
- incusd/instance/qemu/agent: 检查 semanage
- incusd/project: 修复 ImageProjectFromRecord 中的配置名称
- incus/restart: 修复长描述
- i18n: 更新翻译
- lxd-to-incus: 处理常见的现有桥接
- shared/simplestreams: 删除 defaultOS
- shared/simplestreams: 添加 NewLocalClient
- incus-simplestreams: 引入新命令
- incus-simplestreams: 简化删除逻辑
- doc: 重新组织镜像服务器文档
- doc: 添加 incus-simplestreams 部分
- incusd/seccomp: 添加对 pidfd 线程的支持
- incus: 为集群添加补全
- incus: 为集群组添加补全
- incus: 为集群角色添加补全
- incus: 为配置设备添加补全
- incus: 为配置模板添加补全
- 更新翻译
- doc: 更新对 mage 文档的引用
- doc/backup: 删除错误的引用
- incus: 为网络 ACL 添加补全
- shared/api: 添加新的结构以支持配置元数据
- client: 添加 GetMetadataConfiguration
- incusd: 重命名 documentation.go -> metadata.go
- doc/rest-api: 刷新 swagger YAML
- shared/api/metadata: 添加 GetKeys 以简化使用
- incusd: 添加对 JWT 身份验证的支持
- gomod: 更新依赖项
- tests: 添加 tls2jwt 工具
- tests: 添加 JWT 身份验证测试
- api: auth_tls_jwt
- doc/authentication: 添加关于 JWT 的部分
- doc/instances: 删除实时迁移的 size.state 需求
- incusd/instance/qemu: 允许在没有 size.state 的情况下进行实时迁移
- shared/idmap: 支持 subuid/subgid 中的 uid/gid
- shared/cliconfig: 在远程复制时复制 clientcerts
- shared/cliconfig: 添加 HasRemoteClientCertificate
- shared/cliconfig: 支持每个远程的客户端证书
- doc: 添加 clientcerts
- incusd/cluster/config: 添加 oidc.claim
- incusd/auth/oidc: 添加对使用特定声明作为用户名
- incusd: 将 OIDC 声明传递给验证器
- api: oidc_claim
- doc: 更新配置
- doc/howto/instances: 在 ISO 指南中提及额外资源
- doc/installing: 添加 Debian 反向移植
- doc: 将反向移植添加到字典
- lxd-to-incus: 添加对 LXD 5.21 的支持
- shared/cliconfig: 确保客户端证书密钥为 0600
- api: device_usb_serial
- doc: 将 busnum、devnum 和 serial 添加到 USB 设备
- shared/api: 将 Serial 添加到 ResourcesUSBDevice
- incusd/resources: 添加 USB 串口
- incusd/devices/usb: 添加 serial、busnum 和 devnum 选项
- doc/rest-api: 刷新 swagger YAML
- incusd/instance/qemu: 修复处理 > 64 limits.cpu
- incusd/device/gpu_sriov: 实现 NUMA 回退
- incus: 为网络转发添加补全
- incus: 为网络负载均衡器添加补全
- shared/validate: 删除 stringInSlice
- shared/validate: 添加 And 和 Or 函数
- shared/util: 移动 ParseUint32Range
- incusd/project: 更新 ParseUint32Range
- doc/instance_options: 从仅容器部分删除对 limits.cpu.nodes 的提及
- incusd/devices: 更好地处理错误配置
- api: numa_cpu_balanced
- internal/instance: 添加对平衡 NUMA 节点的支持
- doc: 更新配置
- incusd/instance/common: 添加 NUMA 平衡
- incusd/instance/lxc: 添加对平衡 NUMA 分配的支持
- incusd/instance/qemu: 添加对平衡 NUMA 分配的支持
- incusd/devices: 添加对平衡 NUMA 分配的支持
- incusd/device/gpu_sriov: 简化 NUMA 逻辑
- doc/cloud-init: 不要提及不存在的远程
- doc/howto/images_remote: 修复有关镜像服务器的措辞
- doc/benchmark: 修复安装命令
- incusd/instance/common: 修复 CanMigrate 更改设备
- incusd/instance/qemu: 减少代理查询
- incusd/metrics: 不要过滤掉所有服务器指标
- incusd/auth/tls: 为指标证书包含项目限制
- incusd/auth/tls: 返回用于指标的项目感知检查器
- incusd/metrics: 如果没有全局访问权限,则使用特定于项目的检查器
- internal/server/instance/lxd: 添加对 image.requirments.nesting 的支持
- api: 添加 image_restriction_nesting
- doc/images: 介绍 requirements.nesting
- 在快照计数不匹配错误中显示计数值
- incus/admin/init: 在 --auto 中使用 btrfs 子卷
- incus-migrate: 说明磁盘映像文件必须为原始文件
- incusd/network/ovn/icnb: 修复注释
- incusd/project: 重新格式化注释
- incusd/project: 修复错误的默认值
- doc: 更新配置
- incus/migrate: 添加 CSM 支持
- incusd/storage/backend: 更好地处理名称冲突
- incus-migrate: 支持使用本地服务器
- api: network_integrations
- shared/api: 在 NetworkPeersPost 中添加 type 和 target_integration 字段
- incusd/db/cluster: 添加 networks_integrations
- incusd/db/cluster: 重新生成模式
- incusd/db/cluster: 添加网络集成的生成数据库代码
- incusd/db: 更新网络对等数据库查询函数
- client: 在 CreateNetworkPeer 中添加对 network_integrations 的检查
- incus/network/peer: 添加对网络对等类型支持
- shared/api: 添加网络集成
- client: 添加网络集成函数
- incus/network: 引入对集成的支持
- incusd/auth: 添加网络集成函数
- shared/api: 添加网络集成的生命周期事件
- incusd/lifecycle: 添加网络集成事件
- incusd: 添加网络集成 API
- incusd/db: 添加 GetNetworkPeersURLByIntegration
- incusd/network_integration: 添加 UsedBy 字段
- incusd/network_integrations: 添加验证器
- incusd/network/ovn: 添加对与 OVN IC 对等的支持
- incusd/project: 添加 restricted.networks.integrations
- incusd/project: 添加 NetworkIntegrationAllowed
- incusd/network/integrations: 尊重项目限制
- incusd/network/ovn: 添加对集成限制的支持
- incusd/auth/openfga: 更新模型
- incusd/auth/openfga: 更新生成的模型
- incusd/auth/openfga: 处理模型更新
- incusd: 删除 openfga.store.model_id
- incusd/db/cluster: 删除 openfga.store.model_id
- doc/ovn_peers: 添加远程对等
- doc: 添加网络集成的文档
- doc/rest-api: 刷新 swagger YAML
- i18n: 更新翻译模板
- doc: 更新配置
- gomod: 更新依赖项
文档¶
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/0.7
Incus 客户端的 Winget 软件包¶
客户端工具也可通过 Winget 用于 Windows 用户。
https://winstall.app/apps/LinuxContainers.Incus
支持¶
在这个早期阶段,每个 Incus 版本仅支持到下一个版本发布为止。这将在几个月内发生变化,因为我们计划发布一个 LTS 版本以配合 LXC 和 LXCFS 的 LTS 版本。
社区支持提供于:https://discuss.linuxcontainers.org
商业支持可通过以下方式获得:https://zabbly.com/incus
错误报告地址:https://github.com/lxc/incus/issues