Loading... # 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 型虚拟机管理程序,直接运行在主机系统上。 ```mermaid 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 --> QEMU ```  ## 2. REST API 设计 ### A. API 架构 Incus 实现了统一的 REST API,用于本地和远程访问。所有 Incus 与其客户端之间的通信都使用 HTTP 上的 RESTful API。 **传输协议**: - TLS(用于远程操作) - Unix 域套接字(用于本地操作,通过 /dev/incus/sock) **API 版本**: - 基础 API 端点为 /1.0/ - 支持向后兼容的扩展 - 增量引入新功能 ### B. API 调用流程 ```mermaid 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. 集群拓扑 ```mermaid 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 -.连接.-> N4 ```  ### D. 集群功能 - **集群组**:支持将集群成员组织到逻辑组中 - **实例放置**:支持使用脚本自定义实例放置 - **存储管理**:集群感知的存储配置 - **高可用性**:内置故障转移和恢复机制 # 三、核心功能 ## 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. 迁移步骤 ```bash # 1. 安装 Incus sudo snap install incus --classic # 2. 运行迁移工具 sudo lxd-to-incus # 3. 验证迁移 incus list ``` ## 3. 最佳实践 ### 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 的社区分支,代表了开源协作的成功案例。其技术架构体现了现代容器和虚拟机管理的最佳实践: 1. **统一的 API**:简化了自动化和集成 2. **灵活的部署**:从单机到集群的无缝扩展 3. **社区驱动**:确保长期可持续发展 4. **开放治理**:避免单点控制和厂商锁定 对于寻求容器和虚拟机统一管理解决方案的组织和个人,Incus 提供了一个强大、安全且社区友好的选择。 *** ## 参考资料 1. [Incus GitHub 仓库](https://github.com/lxc/incus) - 官方源代码 2. [Incus 官方文档](https://linuxcontainers.org/incus/docs/main/) - 完整文档 3. [Incus REST API 文档](https://linuxcontainers.org/incus/docs/main/rest-api/) - API 参考 4. [Incus 集群文档](https://linuxcontainers.org/incus/docs/main/clustering/) - 集群配置 5. [从 LXD 迁移到 Incus](https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/) - 迁移指南 6. [Linux Containers 新闻](https://linuxcontainers.org/incus/news/) - 项目动态 7. [Stéphane Graber 博客](https://stgraber.org/2025/01/04/incus-in-2024-and-beyond/) - 项目创始人观点 8. [Incus 6.21 发布说明](https://linuxiac.com/incus-6-21-container-virtual-machine-manager-released/) - 最新版本 9. [Phoronix 新闻报道](https://www.phoronix.com/news/Linux-Containers-LXD-Incus) - 分支背景 10. [Reddit 社区讨论](https://www.reddit.com/r/LXD/comments/1kx1m76/lxd_incus_why/) - 用户观点 最后修改:2026 年 01 月 24 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏