摘要: KVM 虚拟化服务实践
控制层负责对外提供虚拟机相关 API。
例如在接收到创建虚拟机请求后,会封装为相应的任务,会存储在 ETCD 中。
ETCD 负责存储数据。
基于 etcd 实现了任务的状态机,也存储了部分计算后的结果对外提供查询。
订阅了 etcd ,例如在监听到删除虚拟机的任务后,负责执行对虚拟机的指令操作。
获取flavor配置(4c-4g-80g)
创建对应的disk
创建基础配置
# tree /data/kvm/instances/
---- uuid(实例id)
---- config_drive
---- openstack
---- latest
---- meta_data.json(password/id/name/secret)
---- network_data.json
---- user_data(init script)
---- disk
---- disk.config(mkisofs)
---- libvirt.xml(kvm instance xml)
---- _base(base os image)
构建 libvirt.xml
调用 kvm 的 go-libvirt 工具库方法 DomainDefineXMLFlags
实现对虚机的创建
调用 kvm 的 go-libvirt 工具库方法 DomainDestroy
实现对虚机的销毁
每个机房会部署一个程序负责镜像的存储,会分发到不同的节点。
宿主机在第一台虚机创建时,会去当前所在机房拉取镜像,拉完缓存在宿主机本地磁盘中,当前宿主机的所有 vm 实例(进程) 只有一个基础镜像。
Qcow2(QEMU Copy On Write) 是格式镜像是 qemu 模拟器支持的一种镜像,和普通的 Raw 格式镜像相比,具有以下优点:
当前采用的镜像格式就是 Qcow2,共享一个基础镜像,写时Copy On Write