KVM 虚拟化服务实践

2021-07-30 14:41:26 浏览数 (1)

摘要: KVM 虚拟化服务实践

kvm 虚拟化服务

1. 架构

2. 控制层

控制层负责对外提供虚拟机相关 API。

例如在接收到创建虚拟机请求后,会封装为相应的任务,会存储在 ETCD 中。

2.1 调度

  • 节点选择
    1. 24 小时平均 cpubusy < 50
    2. 15 分钟平均单核负载 < 80
    3. 节点数超出预设值
    4. 可用内存小于 1GB
    5. 节点内存是否足够其使用(保留内存 当前节点任务队列的已需求内存 新来的节点内存 > 物理机总内存 超卖内存)
    6. 磁盘是否足够使用
  • 调度策略
    1. 按照主机域(zone)调度
    2. 扩容/批量多台机器选择在不同节点
  • 最优节点选择
    1. 选择物理机已存在实例较少的
    2. 较少的区间里去选择cpu空闲的

3. DB

ETCD 负责存储数据。

基于 etcd 实现了任务的状态机,也存储了部分计算后的结果对外提供查询。

4. Agent

订阅了 etcd ,例如在监听到删除虚拟机的任务后,负责执行对虚拟机的指令操作。

4.1 创建虚机

获取flavor配置(4c-4g-80g)

创建对应的disk

创建基础配置

代码语言:javascript复制
# 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 实现对虚机的创建

4.2 销毁虚机

调用 kvm 的 go-libvirt 工具库方法 DomainDestroy 实现对虚机的销毁

5. OS 管理

每个机房会部署一个程序负责镜像的存储,会分发到不同的节点。

5.1 宿主机 os 管理

宿主机在第一台虚机创建时,会去当前所在机房拉取镜像,拉完缓存在宿主机本地磁盘中,当前宿主机的所有 vm 实例(进程) 只有一个基础镜像。

Qcow2(QEMU Copy On Write) 是格式镜像是 qemu 模拟器支持的一种镜像,和普通的 Raw 格式镜像相比,具有以下优点:

  • 更小的空间占用
  • 支持 Copy On Write.
  • 支持多级快照
  • 支持压缩
  • 支持 AES

当前采用的镜像格式就是 Qcow2,共享一个基础镜像,写时Copy On Write

0 人点赞