Libvirt - 从块设备启动 LXC¶
https://blueprints.launchpad.net/nova/+spec/libvirt-start-lxc-from-block-devices
此蓝图的目的是启用从块设备卷启动 LXC 容器。
问题描述¶
目前,LXC 容器只能从 Glance 镜像启动。然而,只需要进行微小的调整,就可以支持使用块设备卷作为其根操作系统文件系统进行启动。
提议的变更¶
将 lxc 磁盘处理代码从 _create_domain() 分离到 _lxc_disk_handler 上下文管理器。它将使用 block_device_mapping 映射实例启动所使用的设备,否则将使用镜像。
_lxc_disk_handler 将处理磁盘的“pre”和“post” lxc 启动操作,以便在启动后挂载它并清理 lxc 命名空间。这些操作对于镜像和卷都是 LXC 特有的。
将支持以下卷的布局。
未分区,文件系统跨越整个内容。
已分区。仅挂载第一个分区中的文件系统。如果存在多个分区,则仅考虑第一个分区,而忽略其他分区。
用户可以从现有的 Glance 镜像创建卷,并使用一条命令启动 LXC 容器
- nova boot –flavor FLAVOR –block-device source=image,id=ID,dest=volume,
size=SIZE,shutdown=PRESERVE,bootindex=0 NAME
或者从现有的卷启动 LXC 容器
- nova boot –flavor FLAVOR –block-device source=volume,id=ID,dest=volume,
size=SIZE,shutdown=PRESERVE,bootindex=0 NAME
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
由于 LXC 将始终与主机共享内核,因此所有实例之间,内核中的任何漏洞都可能被用于危害主机。通常,内核的文件系统驱动程序应该被信任,以避免用户文件系统镜像可能利用的漏洞。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
Vladik Romanovsky <vladik.romanovsky@enovance.com>
工作项¶
引入一个 _lxc_disk_handler 上下文管理器方法,并将所有 lxc 磁盘处理代码从 _create_domain() 分离到它。
向 _lxc_disk_handler 添加逻辑,以使用提供的 block_device_mapping 挂载卷
删除 blockinfo.py 中的 lxc 特定映射创建
依赖项¶
无
测试¶
无
文档影响¶
无