Incus Linux 容器虚拟机管理器技术分析
一、项目概述
1. 简介
Incus 是一个现代化、安全且功能强大的系统容器和虚拟机管理器。它为在容器或虚拟机中运行和管理完整的 Linux 系统提供了统一的体验。Incus 支持大量 Linux 发行版的镜像(包括官方 Ubuntu 镜像和社区提供的镜像),并围绕一个非常强大且简单的 REST API 构建。
2. 项目背景
Incus 是 Canonical 的 LXD 项目在 2023 年 8 月从 Linux Containers 社区被移除后,由社区创建的分支。该项目随后被 Linux Containers 社区采纳,填补了 LXD 离开后留下的空白。
Incus 这个名字源自 Cumulonimbus incus(砧状云),象征着其作为云基础设施的定位。这是一个真正的开源社区项目,不包含任何贡献者许可协议(CLA),使用 Apache 2.0 许可证发布。由最初创建 LXD 的同一开发团队维护。
3. 核心特性
- 统一的容器和虚拟机管理体验
- 强大的 REST API
- 从单机到集群的扩展能力
- 支持多种 Linux 发行版镜像
- 安全的默认配置
- 社区驱动的开发模式
二、技术架构
1. 系统架构
Incus 采用客户端-服务器架构,通过 REST API 进行通信。其架构设计类似于 1 型虚拟机管理程序,直接运行在主机系统上。
graph TB
subgraph 客户端层
CLI[incus CLI]
SDK[Go/Python SDK]
API[第三方 API 客户端]
end
subgraph 传输层
TLS[远程 TLS 连接]
Unix[本地 Unix Socket]
end
subgraph 服务层
REST[REST API 1.0]
Auth[认证授权]
RPC[RPC 调用]
end
subgraph 核心层
Daemon[incusd 守护进程]
Storage[存储管理]
Network[网络管理]
Instance[实例管理]
end
subgraph 虚拟化层
LXC[LXC 容器]
QEMU[QEMU 虚拟机]
end
CLI --> TLS
SDK --> TLS
API --> TLS
CLI --> Unix
TLS --> REST
Unix --> REST
REST --> Auth
Auth --> RPC
RPC --> Daemon
Daemon --> Storage
Daemon --> Network
Daemon --> Instance
Instance --> LXC
Instance --> QEMU2. REST API 设计
A. API 架构
Incus 实现了统一的 REST API,用于本地和远程访问。所有 Incus 与其客户端之间的通信都使用 HTTP 上的 RESTful API。
传输协议:
- TLS(用于远程操作)
- Unix 域套接字(用于本地操作,通过 /dev/incus/sock)
API 版本:
- 基础 API 端点为 /1.0/
- 支持向后兼容的扩展
- 增量引入新功能
B. API 调用流程
sequenceDiagram
participant C as 客户端
participant T as TLS/Unix Socket
participant A as REST API
participant D as incusd
participant I as 实例
C->>T: 发送请求
T->>A: 转发 HTTP 请求
A->>A: 验证认证
A->>D: 调用内部方法
D->>I: 操作实例
I-->>D: 返回结果
D-->>A: 返回响应
A-->>T: JSON 响应
T-->>C: 返回结果3. 集群架构
A. 集群组成
Incus 集群的最小要求包括:
- 一个引导服务器
- 至少两个额外的集群成员(总共 3+ 个节点)
B. 分布式数据库
集群状态存储在所有成员之间共享的分布式数据库中。这种设计确保了:
- 数据一致性
- 高可用性
- 故障自动恢复
C. 集群拓扑
graph TB
subgraph 集群节点
N1[节点 1 - Bootstrap]
N2[节点 2]
N3[节点 3]
N4[节点 N]
end
subgraph 分布式数据库
DB1[(数据库副本 1)]
DB2[(数据库副本 2)]
DB3[(数据库副本 3)]
DB4[(数据库副本 N)]
end
subgraph 存储后端
Ceph[Ceph/OFS]
Local[本地存储]
end
N1 <-- Raft 协议 --> DB1
N2 <-- Raft 协议 --> DB2
N3 <-- Raft 协议 --> DB3
N4 <-- Raft 协议 --> DB4
DB1 -.同步.-> DB2
DB2 -.同步.-> DB3
DB3 -.同步.-> DB4
N1 --> Ceph
N2 --> Ceph
N3 --> Ceph
N4 --> Local
N1 -.连接.-> N2
N2 -.连接.-> N3
N3 -.连接.-> N4D. 集群功能
- 集群组:支持将集群成员组织到逻辑组中
- 实例放置:支持使用脚本自定义实例放置
- 存储管理:集群感知的存储配置
- 高可用性:内置故障转移和恢复机制
三、核心功能
1. 实例管理
Incus 支持两种类型的实例:
A. 系统容器
基于 LXC(Linux Containers)技术,提供:
- 接近原生性能
- 共享主机内核
- 快速启动时间
- 低资源开销
B. 虚拟机
基于 QEMU 技术,提供:
- 完全隔离的操作系统
- 独立内核
- 支持非 Linux 系统
- 更高的安全性
2. 存储管理
Incus 支持多种存储后端:
| 存储驱动 | 类型 | 特点 |
|---|---|---|
| Btrfs | 文件系统 | 快照、子卷、CoW |
| ZFS | 文件系统 | 企业级功能、压缩 |
| LVM | 逻辑卷管理 | 灵活的卷管理 |
| Ceph | 分布式存储 | 集群支持 |
| Dir | 目录 | 简单、无依赖 |
3. 网络管理
A. 网络类型
- 桥接网络:连接到物理网络
- NAT 网络:共享主机 IP
- MACVLAN:直接连接物理网络
- VLAN:虚拟局域网
- OVN:软件定义网络
B. 网络功能
- IP 地址管理(DHCP)
- DNS 服务器
- 防火墙规则
- 负载均衡
- 网络监控
四、与 LXD 的对比
1. 历史背景
2023 年 8 月,Canonical 将 LXD 项目从 Linux Containers 基础设施中移除,引发了社区的分歧。作为回应,原始 LXD 开发团队创建了 Incus 分支。
2. 主要差异
| 特性 | LXD | Incus |
|---|---|---|
| 维护者 | Canonical | Linux Containers 社区 |
| 许可证 | AGPL(部分) | Apache 2.0 |
| 开发模式 | 公司主导 | 社区驱动 |
| CLA 要求 | 需要 | 不需要 |
| 发行版支持 | 优先 Ubuntu | 广泛支持 |
| 镜像仓库 | Canonical | Linux Containers |
3. Incus 优势
- 社区优先:由创建 LXD 的原始团队维护
- 开源纯粹:无 CLA,真正的社区项目
- 广泛支持:包括 Rocky Linux、Debian、AlmaLinux 等
- 活跃开发:定期发布,快速响应问题
- 长期支持:6.0 系列支持到 2029 年 6 月
五、迁移指南
1. 迁移工具
Incus 提供了官方的 lxd-to-incus 迁移工具,支持从 LXD 平滑迁移。
2. 迁移步骤
# 1. 安装 Incus
sudo snap install incus --classic
# 2. 运行迁移工具
sudo lxd-to-incus
# 3. 验证迁移
incus list3. 最佳实践
A. 迁移前准备
- 备份所有容器和虚拟机
- 记录网络配置
- 检查存储驱动兼容性
- 测试非生产环境
B. 迁移后验证
- 确认所有实例正常启动
- 验证网络配置
- 检查存储池
- 测试镜像导入
六、实际应用场景
1. 开发环境
- 多版本 Linux 系统测试
- 隔离的开发环境
- 快速环境重建
2. 生产部署
- 微服务架构
- 容器化应用部署
- 虚拟机整合
3. 私有云
- 构建小型私有云
- 多租户环境
- 资源池化管理
七、安全考虑
1. 安全特性
- TLS 加密通信
- 基于证书的认证
- 审计日志
- 资源限制
- Seccomp 过滤器
- AppArmor/SELinux 集成
2. 安全最佳实践
- 保持系统和 Incus 更新
- 限制对守护进程的访问
- 避免使用特权容器
- 配置安全的网络接口
- 定期审查访问权限
八、生态系统
1. 客户端工具
- incus CLI:官方命令行工具
- Incus Admin:Web 管理界面
- 桌面客户端:跨平台 GUI 工具
2. 社区资源
- 官方文档:https://linuxcontainers.org/incus/docs/
- 社区论坛:https://discuss.linuxcontainers.org/
- 源代码:https://github.com/lxc/incus
- 商业支持:Zabbly 提供 Debian/Ubuntu 软件包支持
3. 最新动态
- Incus 6.21:2026 年 1 月发布,包含安全修复和新功能
- Rocky Linux 10 支持:2025 年 9 月起提供镜像
- Debian 官方支持:从 Debian Trixie 开始
九、技术展望
Incus 作为 LXD 的社区分支,代表了开源协作的成功案例。其技术架构体现了现代容器和虚拟机管理的最佳实践:
- 统一的 API:简化了自动化和集成
- 灵活的部署:从单机到集群的无缝扩展
- 社区驱动:确保长期可持续发展
- 开放治理:避免单点控制和厂商锁定
对于寻求容器和虚拟机统一管理解决方案的组织和个人,Incus 提供了一个强大、安全且社区友好的选择。
参考资料
- Incus GitHub 仓库 - 官方源代码
- Incus 官方文档 - 完整文档
- Incus REST API 文档 - API 参考
- Incus 集群文档 - 集群配置
- 从 LXD 迁移到 Incus - 迁移指南
- Linux Containers 新闻 - 项目动态
- Stéphane Graber 博客 - 项目创始人观点
- Incus 6.21 发布说明 - 最新版本
- Phoronix 新闻报道 - 分支背景
- Reddit 社区讨论 - 用户观点