searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Openstack虚拟化技术

2023-05-26 03:30:54
177
0

1.1 虚拟化基础知识

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?

VMM:Virtual Machine Monitor,虚拟机监控程序,或者用另一个更专业的名词:HyperVisor

  • Type I: 直接凌驾于硬件之上,构建出多个隔离的操作系统环境。Xen 和 VMWare 的 ESXi 都属于这个类型。
  • Type II: 依赖于宿主操作系统,在其上构建出多个隔离的操作系统环境,KVM(是一种hypervisor)、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲:

1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;

2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

在x86平台上最热门运用最广泛的虚拟化方案莫过于 KVM (Kernel-Based Virtual Machine)了。OpenStack 对 KVM 支持得也最好,我们的教程也理所当然选择 KVM 作为 实验环境的Hypervisor。

Libvirt,是KVM的管理工具,除了能管理KVM这种hypervisor,还能管理Xen,virtualbox等,openstack底层也使用libvirt。

Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

  1. libvirtd是服务程序,接收和处理 API 请求;
  2. API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
  3. virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。

作为 KVM 和 OpenStack 的实施人员,virsh virt-manager 是一定要会用的。

1.2 CPU和内存虚拟化管理

虚机中的每一个虚拟 vCPU 则对应 qemu-kvm 进程中的一个线程。看下图:

 

在这个例子中,宿主机有两个物理 CPU,上面起了两个虚机 VM1 和VM2。VM1 有两个 vCPU,VM2 有 4 个 vCPU。可以看到 VM1 和 VM2分别有两个和 4 个线程在两个物理 CPU 上调度。

    这里也演示了另一个知识点,即虚机的 vCPU 总数可以超过物理 CPU 数量,这个叫 CPU overcommit(超配)。 KVM 允许 overcommit,这个特性使得虚机能够充分利用宿主机的 CPU 资源,但前提是在同一时刻,不是所有的虚机都满负荷运行。 当然,如果每个虚机都很忙,反而会影响整体性能,所以在使用 overcommit 的时候,需要对虚机的负载情况有所了解,需要测试。

   KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机。

为了在一台机器上运行多个虚拟机,KVM需要实现VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)之间的地址转换。虚机 OS 控制虚拟地址到客户内存物理地址的映射 (VA -> PA),但是虚机 OS 不能直接访问实际机器内存,因此 KVM 需要负责映射客户物理内存到实际机器内存 (PA -> MA)。具体的实现就不做过多介绍了,大家有兴趣可以查查资料。

    还有一点提醒大家,内存也是可以 overcommit ,即所有虚机的内存之和可以超过宿主机的物理内存。但使用时也需要充分测试,否则性能会受影响。

1.3 存储虚拟化

KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。

 

    Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型(目录类型,LVM的类型,还有其他类型的),后面会详细讨论。Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

 

 

0条评论
作者已关闭评论
苗****聪
1文章数
1粉丝数
苗****聪
1 文章 | 1 粉丝
苗****聪
1文章数
1粉丝数
苗****聪
1 文章 | 1 粉丝
原创

Openstack虚拟化技术

2023-05-26 03:30:54
177
0

1.1 虚拟化基础知识

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?

VMM:Virtual Machine Monitor,虚拟机监控程序,或者用另一个更专业的名词:HyperVisor

  • Type I: 直接凌驾于硬件之上,构建出多个隔离的操作系统环境。Xen 和 VMWare 的 ESXi 都属于这个类型。
  • Type II: 依赖于宿主操作系统,在其上构建出多个隔离的操作系统环境,KVM(是一种hypervisor)、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲:

1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;

2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

在x86平台上最热门运用最广泛的虚拟化方案莫过于 KVM (Kernel-Based Virtual Machine)了。OpenStack 对 KVM 支持得也最好,我们的教程也理所当然选择 KVM 作为 实验环境的Hypervisor。

Libvirt,是KVM的管理工具,除了能管理KVM这种hypervisor,还能管理Xen,virtualbox等,openstack底层也使用libvirt。

Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

  1. libvirtd是服务程序,接收和处理 API 请求;
  2. API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
  3. virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。

作为 KVM 和 OpenStack 的实施人员,virsh virt-manager 是一定要会用的。

1.2 CPU和内存虚拟化管理

虚机中的每一个虚拟 vCPU 则对应 qemu-kvm 进程中的一个线程。看下图:

 

在这个例子中,宿主机有两个物理 CPU,上面起了两个虚机 VM1 和VM2。VM1 有两个 vCPU,VM2 有 4 个 vCPU。可以看到 VM1 和 VM2分别有两个和 4 个线程在两个物理 CPU 上调度。

    这里也演示了另一个知识点,即虚机的 vCPU 总数可以超过物理 CPU 数量,这个叫 CPU overcommit(超配)。 KVM 允许 overcommit,这个特性使得虚机能够充分利用宿主机的 CPU 资源,但前提是在同一时刻,不是所有的虚机都满负荷运行。 当然,如果每个虚机都很忙,反而会影响整体性能,所以在使用 overcommit 的时候,需要对虚机的负载情况有所了解,需要测试。

   KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机。

为了在一台机器上运行多个虚拟机,KVM需要实现VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)之间的地址转换。虚机 OS 控制虚拟地址到客户内存物理地址的映射 (VA -> PA),但是虚机 OS 不能直接访问实际机器内存,因此 KVM 需要负责映射客户物理内存到实际机器内存 (PA -> MA)。具体的实现就不做过多介绍了,大家有兴趣可以查查资料。

    还有一点提醒大家,内存也是可以 overcommit ,即所有虚机的内存之和可以超过宿主机的物理内存。但使用时也需要充分测试,否则性能会受影响。

1.3 存储虚拟化

KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。

 

    Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型(目录类型,LVM的类型,还有其他类型的),后面会详细讨论。Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

 

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0