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 --> QEMU

Incus 系统架构图

2. 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: 返回结果

API 调用时序图

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 -.连接.-> 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. 主要差异

特性LXDIncus
维护者CanonicalLinux Containers 社区
许可证AGPL(部分)Apache 2.0
开发模式公司主导社区驱动
CLA 要求需要不需要
发行版支持优先 Ubuntu广泛支持
镜像仓库CanonicalLinux 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 list

3. 最佳实践

A. 迁移前准备

  • 备份所有容器和虚拟机
  • 记录网络配置
  • 检查存储驱动兼容性
  • 测试非生产环境

B. 迁移后验证

  • 确认所有实例正常启动
  • 验证网络配置
  • 检查存储池
  • 测试镜像导入

六、实际应用场景

1. 开发环境

  • 多版本 Linux 系统测试
  • 隔离的开发环境
  • 快速环境重建

2. 生产部署

  • 微服务架构
  • 容器化应用部署
  • 虚拟机整合

3. 私有云

  • 构建小型私有云
  • 多租户环境
  • 资源池化管理

七、安全考虑

1. 安全特性

  • TLS 加密通信
  • 基于证书的认证
  • 审计日志
  • 资源限制
  • Seccomp 过滤器
  • AppArmor/SELinux 集成

2. 安全最佳实践

  • 保持系统和 Incus 更新
  • 限制对守护进程的访问
  • 避免使用特权容器
  • 配置安全的网络接口
  • 定期审查访问权限

八、生态系统

1. 客户端工具

  • incus CLI:官方命令行工具
  • Incus Admin:Web 管理界面
  • 桌面客户端:跨平台 GUI 工具

2. 社区资源

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 仓库 - 官方源代码
  2. Incus 官方文档 - 完整文档
  3. Incus REST API 文档 - API 参考
  4. Incus 集群文档 - 集群配置
  5. 从 LXD 迁移到 Incus - 迁移指南
  6. Linux Containers 新闻 - 项目动态
  7. Stéphane Graber 博客 - 项目创始人观点
  8. Incus 6.21 发布说明 - 最新版本
  9. Phoronix 新闻报道 - 分支背景
  10. Reddit 社区讨论 - 用户观点
最后修改:2026 年 01 月 24 日
如果觉得我的文章对你有用,请随意赞赏