Incus 0.4 已发布¶
2023年12月21日
简介¶
Incus 团队很高兴地宣布 Incus 0.4 发布!
这将是 Incus 的最后一个版本,其中包含来自 LXD 的更改,因为 Incus 现在已被迫完全独立。
Incus 0.4 带了一些令人兴奋的新功能,例如客户端工具中内置的保持活动模式、证书/信任存储管理的改进、新的 OVN 配置键以及直接创建 CephFS 文件系统的能力。
它还对 OpenFGA 和 OVN 处理进行了重大改进,为即将推出的新功能奠定了基础!
您可以在线亲自试用:https://linuxcontainers.cn/incus/try-it/
Incus 团队祝您假期快乐,新年快乐,2024 年再见!
享受!
通知¶
Canonical LXD 项目的重新许可和贡献者协议¶
Canonical 已决定将 Canonical LXD 重新许可为 AGPLv3 许可证,并要求所有新的贡献来自已签署 Canonical 贡献者许可协议 (CLA) 的个人或组织。
Incus 将继续使用 Apache 2.0 许可证,因此将不再导入来自 LXD 的任何更改。这也意味着,由于 Incus 的更改不属于 AGPLv3 许可证,并且通常不是来自已签署 Canonical 法律协议的个人或组织,因此这些更改不再有资格包含在 LXD 中。
您可以在此处找到更多详细信息:https://discuss.linuxcontainers.org/t/lxd-has-been-re-licensed-and-is-now-under-a-cla/18454
逐步淘汰 LXD 用户的镜像服务器访问权限¶
与上述更改以及 Canonical 决定不再投入任何资源来协助我们镜像构建的日常运营有关,LXD 用户将逐步淘汰对社区镜像服务器(images:
远程)的访问权限。
这将在大约 5 个月内完成。我们强烈建议任何使用 LXD 运行非 Ubuntu 镜像的用户开始计划迁移到 Incus。
您可以在此处找到更多详细信息:https://discuss.linuxcontainers.org/t/important-notice-for-lxd-users-image-server/18479
新功能和亮点¶
CLI 客户端中的保持活动支持¶
新的 keepalive
配置键可以直接在 ~/.config/incus/config.yml
中的远程服务器上设置。
此键设置为以秒为单位的整数,定义了与 Incus 服务器保持后台连接的时间长度(自上次使用以来的时间)。
其工作原理是命令行工具将自动生成一个后台进程(incus remote proxy
),该进程将连接到目标服务器,处理身份验证并执行一些最小的缓存,然后提供一个 Unix 套接字以与远程服务器通信。
然后,命令行工具的任何新实例将自动检测并使用该 Unix 套接字,绕过所有连接和身份验证步骤,从而导致延迟显着降低。我们已经测量到,对于像 Ansible 这样生成大量 incus
命令的用例,此方法可提高高达 30% 的性能。
证书条目的描述字段¶
证书条目(/1.0/certificates
)现在具有 Description
字段,使其与绝大多数其他 Incus 对象保持一致。
重新设计的 incus config trust list
¶
incus config trust list
已重新设计,默认显示更多有用的列,包括前面提到的描述列。这些列现在也可以像 Incus 客户端中的许多类似 list
命令一样进行配置。
stgraber@chulak:~$ incus config trust list +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | NAME | TYPE | DESCRIPTION | FINGERPRINT | EXPIRY DATE | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | ansible | client | Ansible access to all instances | 58ea2754fe55 | Dec 14, 2030 at 3:07am (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | athos | server | | fad46455a46b | Aug 13, 2033 at 11:11pm (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | celestis | server | | 903d3e69de2c | Aug 16, 2033 at 12:24am (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | chulak | server | | ab805a2bc6af | Aug 6, 2033 at 5:48am (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | delmak | server | | 1f6be459e591 | Aug 14, 2033 at 10:39pm (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | gh-actions-manager | client | Github self-hosted test runners | e5bc1b5df649 | Aug 11, 2033 at 8:47pm (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | maas-region01 | client | MAAS controller access to lab VMs | 9be434462768 | Dec 26, 2031 at 5:10pm (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | prometheus01 | metrics | Metrics gathering | ede97eae54df | Oct 30, 2031 at 8:57pm (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+ | try-it | client | incus-demo-server access to try-it instances | fff8465939e4 | Sep 16, 2033 at 4:54am (UTC) | +--------------------+---------+----------------------------------------------+--------------+-------------------------------+
作为服务器配置的 OVN SSL 密钥¶
添加了一组新的配置键,以允许指定访问 OVN 的 SSL 证书和密钥。设置后,这些密钥优先于 /etc/ovn/ 中找到的任何密钥。
network.ovn.ca_cert
network.ovn.client_cert
network.ovn.client_key
现在可以直接创建 CephFS 文件系统¶
到目前为止,创建 cephfs
存储池需要通过 source
键定义的特定文件系统实例已存在于 Ceph 中。
但是现在,可以将 cephfs.create_missing
配置键设置为 true
,并设置 cephfs.data_pool
和 cephfs.meta_pool
以指示要使用哪个 OSD 池,这将导致 Incus 创建一个新的 cephfs 文件系统。
文档:https://linuxcontainers.cn/incus/docs/main/reference/storage_cephfs/
此功能最初是在 LXD 中引入的。
完整变更日志¶
以下是此版本中所有更改的完整列表
完整提交列表
- lxd-to-incus: 允许绕过版本检查
- lxd-to-incus: 在备份和日志中记录 PID
- [lxd-import] lxd/instance/drivers: 为 lxd-agent udev 规则、systemd 单元和串行设备添加注释
- [lxd-import] lxd/instance/drivers/qemu: 一致地依赖 $PATH 来查找二进制文件
- [lxd-import] lxd/instance/drivers/qemu: 将配置驱动器安装为只读
- [lxd-import] lxd/instance/drivers/qemu: 减小 /run/incus_agent tmpfs 的大小并设置 nodev、nosuid、noatime
- [lxd-import] lxd/instance/drivers/qemu: 在 cp 过程中不要保留所有权以避免 chown
- [lxd-import] lxd/instance/drivers: 在安装脚本中清理旧的 incus-agent 符号链接
- [lxd-import] lxc/move: 防止池迁移阻塞项目迁移
- [lxd-import] lxd/instance_post: 从目标项目中的配置文件确定根设备
- [lxd-import] lxc/move: 使用不受支持的移动标志时抛出错误
- i18n: 更新翻译模板
- incusd/auth/openfga: 使用分块
- docs: 更新实例创建中的 iso 导入
- lxd-to-incus: 卸载任何剩余的挂载点
- lxd-to-incus: 支持 LXD COPR
- [lxd-import] lxd/storage/drivers: 添加新的 cephfs 创建键
- [lxd-import] lxd/storage/drivers: 更新 cephfs 实体帮助程序
- [lxd-import] lxd/storage/drivers: 将 DefaultVMBlockFilesystemSize 添加到驱动程序 Info 结构体
- [lxd-import] lxd/storage/drivers/btrfs: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/drivers/ceph: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/drivers/cephfs: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/drivers/dir: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/drivers/lvm: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/drivers/mock: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/drivers/zfs: 设置驱动程序 DefaultVMBlockFilesystemSize
- [lxd-import] lxd/storage/backend: 对配置文件系统使用驱动程序默认的 VM 块卷大小
- [lxd-import] lxd/storage/drivers/volume: 对文件系统卷使用驱动程序默认的 VM 块大小
- [lxd-import] lxd/project: 修复注释中的错别字
- [lxd-import] lxd/instance/drivers: 使用池的默认 VM 块文件系统大小
- [lxd-import] lxd/storage: 使用池的默认 VM 块文件系统大小
- [lxd-import] lxd/project: 为实例限制核算添加 TODO
- [lxd-import] lxd/instance: 对临时实例名称使用稳定的随机生成器
- [lxd-import] lxd/instance: 改进错误消息
- [lxd-import] lxd/instance/drivers/qemu: 仅对 Ceph 后端运行特定的远程配置
- [lxd-import] lxd/storage/drivers: 如果指定了密钥,则创建 cephfs 实体
- [lxd-import] lxd/storage/drivers: 恢复 osd/fs 创建
- [lxd-import] doc/reference: 为新的配置键添加文档参考
- [lxd-import] shared/version: 添加 storage_cephfs_create_missing 扩展
- [lxd-import] lxd/storage/drivers: 如果在嵌套容器中,则通过文件路径遍历收集子卷。
- [lxd-import] doc/howto: 使 iso 教程中的池名称一致。
- [lxd-import] test/suites: 添加 cephfs create_missing 测试
- incusd/auth/openfga: 将超时时间增加到 10 秒
- incusd/auth/openfga: 返回正确的错误
- doc/userns-idmap.md: 为此文件添加目标/标签
- internal/server/db: 删除函数
doDbScan
- internal/server: 使用
Retry
函数 - internal/server/db: 解包 dbQueryRowScan 函数
- internal/server/db: 解包 queryScan 函数
- internal/server/db: 删除 exec 函数
- doc/installing.md: 为 Gentoo 添加安装步骤
- doc: 添加 AlpineLinux 的构建说明
- incusd/apparmor/rsync: 修复嵌套容器中的问题
- doc/installing: 对包说明使用制表符
- doc/installing: 修复错别字
- doc/installing: 将源代码说明移动到制表符布局
- incusd/metrics: 从内部 API 中删除映射
- internal/server/instance: 更新以适应新的内部指标 API
- lxd-agent: 更新以适应新的内部指标 API
- doc/authentication: 更新命令的参考以匹配
config trust add
和config trust add-certificate
的拆分 - incusd/state: 添加新的 ServerClustered 字段
- incusd: 使用 ServerClustered
- incusd/auth/openfga: 仅在领导者上同步资源
- incusd/auth: 使卷位置特定
- incusd/auth: 使存储桶位置特定
- incusd/auth: 允许变量标识符
- incusd/db/cluster: 将位置支持添加到 URLToEntityType
- incusd/project: 传递位置数据
- incusd/storage: 传递位置数据
- incusd: 更新以适应 URLToEntityType
- incusd: 删除存储桶删除操作上的重复权限检查
- incusd: 更新位置的 OpenFGA 资源
- incusd: 更新存储桶的权限检查
- incusd: 更新卷的权限检查
- incusd/auth: 在 ObjectFromRequest 中添加位置支持
- doc/lxd-to-incus: 添加对组更改的提及
- build(deps): 将 actions/labeler 从 4 提升到 5
- doc: 将 NixOS 添加到词表
- doc/installing: 初始化 NixOS 说明
- github: 将 OpenFGA 固定到 v1.3.7
- github: 更新以适应新的标签器
- incusd/project: 添加 ImageProjectFromRecord
- incusd/auth/openfga: 修复 diff 逻辑以比较正确的对象
- incusd/images: 在指纹扩展后执行访问控制
- incusd: 添加镜像和证书指纹的扩展
- incusd: 添加项目名称的扩展以进行继承
- incusd/images: 使用授权程序记录下载的镜像
- incusd/images: 不要在授权程序中对后台操作使用请求上下文
- incusd/projects: 不要在授权程序中对后台操作使用请求上下文
- incusd/storage/drivers: 为卷类型添加单数帮助程序
- incusd/storage: 更新所有操作的授权程序
- incusd/auth/openfga: 处理脱机服务器
- incusd/auth/openfga: 允许以后刷新资源
- incusd/auth/openfga: 每小时重新同步资源
- incusd/auth/openfga: 修复集群成员处理
- incusd: 在授权器检查中使用扩展的证书指纹
- 回退“github: 将 OpenFGA 固定到 v1.3.7”
- [lxd-import] doc/instances: 将池名称更改为一致
- [lxd-import] lxd/instance_post: 如果未显式更改,则保留根磁盘设备
- [lxd-import] test: 添加服务器端实例移动的测试
- [lxd-import] lxd/instance/drivers/qemu_cmd: 返回干净的 EOF 错误
- [lxd-import] github: 在下载错误时让 curl 失败而不是提供伪造数据
- [lxd-import] api: 添加 API 扩展以改进服务器端移动
- [lxd-import] .github/workflows: 删除 shiftfs
- [lxd-import] lxd/metadata: 删除 shiftfs
- [lxd-import] lxd/instance/drivers: 为 qemu 驱动器设置正确的 RBD 内容类型
- [lxd-import] lxd/db/instances: 修复未检索到项目实例名称
- [lxd-import] lxd/cluster/config: 添加缺失的描述默认值
- [lxd-import] lxd/node: 添加缺失的描述默认值
- [lxd-import] 更新元数据
- [lxd-import] doc: 删除 shiftfs
- tests: 重新引入存储移位测试
- [lxd-import] shared/api/instance: 扩展 InstancePost 结构
- [lxd-import] lxc/move: 在服务器端移动中尊重所有标志
- [lxd-import] lxd/instance_post: 在移动时尊重提供的配置、设备和配置文件覆盖
- [lxd-import] tests: 添加服务器端移动测试
- [lxd-import] doc: 更新 API
- [lxd-import] i18n: 更新翻译
- [lxd-import] lxc/move: 仅在用户显式提供时覆盖配置文件
- [lxd-import] lxd/instance_post: 在实例移动时保留以前的配置文件
- [lxd-import] tests: 改进实例移动测试
- [lxd-import] lxd/cluster: 如果集群繁忙,则重试集群加入
- doc: 修复文档的 URL
- doc/cloud-init: 修复拼写错误
- shared: 删除 shiftfs
- api: ovn_ssl_config
- incusd/cluster/config: 添加 OVN SSL 配置键
- doc: 更新配置
- incusd/network/openvswitch: 支持 OVN SSL 配置键
- internal/linux: 实现 CreateMemfd
- incusd/network/openvswitch: 移植到 memfd
- internal/server/response: 流式传输时不要重新发送标头
- incusd/operations: 使用 ManualResponse 及早发送标头
- incus: 修复注释中的错别字
- [lxd-import] lxd/storage/s3/miniod: 使用 IPv4 地址族发现端口
- [lxd-import] lxd-agent: 停止 dev-incus 服务器时防止出现恐慌
- [lxd-import] lxd/storage/drivers: 始终复制 Ceph VM 文件系统卷
- [lxd-import] doc/cloud-init: 覆盖链接文本以使拼写检查器满意
- incusd/storage: 使用 Shutdown 上下文从备份导入
- incusd/storage: 修复 ISO 卷的大小检查
- [lxd-import] client: 始终为操作使用事件侦听器。
- [lxd-import] lxd/instance/drivers/qemu: 在访问存储池之前加载它
- lxd-to-incus: 将 security.devlxd 添加到已弃用的键中
- lxd-to-incus: 删除旧的 OVN 网桥
- lxd-to-incus: 修改项目和配置文件描述
- 回退“[lxd-import] client: 始终为操作使用事件侦听器。”
- lxd-to-incus: 不要用命令失败垃圾邮件输出
- incusd/instance/qemu: 正确设置 cdrom 类型
- incus/remote: 添加远程代理命令
- i18n: 更新翻译模板
- shared/cliconfig: 添加 keepalive 配置字段
- incus/remote: 为代理连接清除 Keepalive 字段
- shared/cliconfig: 添加 keepalive 代理支持
- incusd/endpoints: 还隐藏代理的读取错误
- build(deps): 将 actions/setup-go 从 4 提升到 5
- internal/server/db: 向证书添加描述字段
- incusd/certificates: 添加对描述字段的支持
- shared/api/certificate: 添加描述字段
- api: certificate_description
- doc/rest-api: 刷新 swagger YAML
- incus: 可变证书存储列
- i18n: 更新翻译模板
- tests: 更新以适应 incus 配置信任列表的更改
- Makefile: 确保我们永远不会导入 AGPL 版本的 LXD
- gomod: 更新依赖项
- [lxd-import] golangci: 更新金属检查器配置。
- [lxd-import] lxd/firewall/drivers: 从 switch 中删除不必要的 break 语句。
- [lxd-import] test/lint: 添加脚本以使用 '--new' 调用 golangci-lint。
- [lxd-import] Makefile: 从 Makefile 中删除 golangci-lint 的调用。
- [lxd-import] client/lxd/instances: 在 ExecInstance 中将 nil 参数视为空的 InstanceExecArgs
- [lxd-import] client/lxd/instances: 如果在 ExecInstance 中建立了控制套接字,则始终使用它消耗 ping
- [lxd-import] client/lxd/instances: 如果未提供 writer(s),则丢弃非交互式 stdout/stderr 输出
- [lxd-import] client/lxd/instances: 删除不必要的 args nil 检查
- [lxd-import] doc/storage/cephfs: 指定您可以自动创建池
- lxd-to-incus: 更新以适应 LXD 5.20
- incusd/instance: 在失败时正确回退 OpenFGA
- incus/move: 仅在处理单个服务器时使用服务器端移动
- incus/instance/qemu: 删除旧的 udev 规则
- internal/cgo: 移动到 shared/cgo
- global: 更新以适应 shared/cgo
- internal/idmap: 移动到 shared/idmap
- global: 更新以适应 shared/idmap
- shared/idmap: 不要依赖于内部包
- test/lint/golangci: 添加缺失的尾随换行符
- test/golangci: 处理一些常见的上游分支名称
- test/README: 修复错误的二进制名称
- github/ISSUE_TEMPLATE: 修复错误的二进制名称
- test/golangci: 更好地处理 Github refs
- test/golangci: 获取 GITHUB_BEFORE 引用
- doc: 修正错别字
- lxd-to-incus: 添加 shiftfs 检查
- incusd/firewall/iptables: 确保始终使用锁定
- doc/installing: 删除冗余说明
- README: 微调关于 Incus 创建的部分
- doc/migrate: 添加到安装页面的链接
- build(deps): 将 actions/upload-artifact 从 3 提升到 4
- Makefile: 提升到 OpenFGA 0.3.1-go1.20
- gomod: 更新依赖项
- incusd/auth/openfga: 更新以适应 OpenFGA 0.3.1
- mini-oidc: 实现用户存储
- incusd/auth/openfga: 处理小的模型差异
- shared: 修正注释中的错别字
- Makefile: 添加 update-ovsdb
- gomod: 添加 libovsdb
- incusd/network/openvswitch: 添加 OVS 和 OVN 架构
- incusd/network/openvswitch: 删除未使用的函数
- incusd/network/openvswitch: 删除无用的代码
- incusd/network/openvswitch: 拆分 OVN 逻辑
- incusd/network/openvswitch: 添加 OVN 数据库类型
- incusd/network/openvswitch: 添加原生 ovsdb 客户端
- incusd/network/openvswitch: 简化逻辑
- golangci: 不要抱怨未使用的接收器
- incusd/network/openvswitch: 为 LogicalRouterDelete 使用指针接收器
- incusd/network/openvswitch: 将 ChassisGroupChassisAdd 移植到 ovsdb
- incusd/server/network: 将 ovn 移动到单独的包中
- Makefile: 更新以适应新的 OVN 包
- incusd/network/openvswitch: 更新以适应单独的 ovn 包
- incusd/network/openvswitch: 将 TCP 标志移动到 ovn 包
- incusd: 更新以适应 network/ovn
- incusd/network/openvswitch: 重命名为 ovs
- Makefile: 更新以适应 OVS 包
- incusd: 更新以适应 OVS 包重命名
- incusd: 修复导入阴影
- tests: 跳过 OVSDB 架构的 lint
- incusd/network/ovs: 重新组织包
- incusd/network/ovs: 将 OVS 结构重命名为 VSwitch
- incusd: 更新以适应 NewVSwitch
- incusd/network/ovn: 重新组织包
- incusd/network/ovn: 添加新的南向客户端
- incusd/network/ovn: 将 GetLogicalRouterPortActiveChassisHostname 移动到 SB
- incusd/network: 更新以适应 GetLogicalRouterPortActiveChassisHostname
- incusd/network/ovn: 用 NB 替换 OVN 结构
- incusd: 更新以适应 OVN NB 结构
- incusd/network/ovn: 将 PortGroupInfo 移植到 OVSDB
- incusd/network/ovn: 将 LogicalSwitchPortDynamicIPs 移植到 OVSDB
- incusd/network/ovs: 添加 OVSDB 客户端
- incusd: 更新以适应 NewVSwitch 更改
- incusd/network/ovs: 将 BridgeExists 移植到 OVSDB
- incusd/network/ovs: 将 ChassisID 移植到 OVSDB
- incusd/network/ovs: 将 OVNBridgeMappings 移植到 OVSDB
- Makefile: 将最小 OVN 版本设置为 22.03.0
- incusd/network/ovn: 更新架构
- incusd/network/ovn: 修复空的 OVNBridgeMappings
- incusd/network/ovn: 等待端口出现
文档¶
Incus 文档可在以下网址找到
https://linuxcontainers.cn/incus/docs/main/
软件包¶
由于 Incus 上游仅发布常规发布 tarball,因此没有官方的 Incus 软件包。以下是启动并运行 Incus 的一些可用选项。
适用于 Debian 和 Ubuntu 的 Zabbly 软件包¶
Zabbly 为 Debian 和 Ubuntu 用户提供 Incus 的每日构建和稳定构建
https://github.com/zabbly/incus
适用于 Incus 客户端的 Homebrew 软件包¶
客户端工具可通过 HomeBrew 在 Linux 和 MacOS 上使用。
https://formulae.brew.sh.cn/formula/incus
适用于 Incus 客户端的 Chocolatey 软件包¶
客户端工具可通过 Chocolatey 供 Windows 用户使用。
https://community.chocolatey.org/packages/incus/0.4
支持¶
在这个早期阶段,每个 Incus 版本都将仅支持到下一个版本发布为止。这将在几个月内发生变化,因为我们计划在 LXC 和 LXCFS 的 LTS 版本发布时发布一个 LTS 版本。
社区支持提供于:https://discuss.linuxcontainers.org
错误可在以下网址报告:https://github.com/lxc/incus/issues