初识OpenStack+KVM

时间:2024-03-14 12:20:39
初识OpenStack+KVM

1.虚拟化
1型虚拟化:hypervisor直接运行于硬件之上,对硬件虚拟化做了优化,性能较高,但不支持虚拟机嵌套,例如Xen VMware的EXSI都属于1型虚拟化。1型虚拟化其hypervisor内存上严格隔离的。
2型虚拟化:宿主机操作系统运行于硬件之上,hypervisor作为一个内核模块运行在宿主机操作系统之上。支持虚拟机嵌套,例如KVM,VMware的workstation等都属于2型虚拟化,虚拟机嵌套指KVM虚拟机中还可以再运行KVM。

2.KVM
kernel-based virtual machine,基于Linux内核的虚拟机,kvm.ko负责CPU和内存虚拟化。IO虚拟化由Linux内核和Qemu实现。KVM的管理工具为libvirt,openstack底层也使用libvirt
kvm安装:直接在Linux系统上安装KVM所需包。其中qemu-kvm、qemu-systerm负责CPU、内存和IO虚拟化,libvirt-bin为libvirt,virt-manager为KVM图形管理工具,网络虚拟化由bridge-utils、vlan实现。
使用virt-manager启动虚拟机, /var/lib/libvirt/images/ 目录为KVM默认存放镜像文件的地方。virt-manager也可以用来管理其他宿主机上的虚拟机,注意此处需要配置被管理宿主机中的两个文件。
virsh list 命令用于查看宿主机上的虚拟机,还可以使用其他virsh命令管理虚拟机。
注:一个KVM虚拟机在宿主机中作为一个qemu-kvm进程运行,与其他Linux进程一样被调度。
CPU虚拟化由vmx 或 svm 实现。虚拟机中每一个vCPU对应qemu-kvm进程中的每一个线程。因此虚拟机中vCPU总数可以超过物理CPU总数,这个叫CPU超配。
内存虚拟化实现客户机物理内存到宿主机机器内存的转化,客户机操作系统负责客户机虚拟地址到客户机物理地址的转化,也可以实现超配。KVM实现内存虚拟化的方式有两种:影子页表EPT页表,可参考http://www.cnblogs.com/sammyliu/p/4543597.html
存储虚拟化由存储池(storage pool)和volume卷实现,存储池为宿主机中可见的一块内存,volume为存储池中分配给虚拟机的一块空间。KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool,是一种目录类型的存储池,而volume则为该目录下的文件,如一个镜像文件则为一个volume,volume有多种类型,包括raw,qcow,vmdk,vdl。
网络虚拟化通过Linux bridge实现vnet br0 eth0之间的数据传输。注意Linux 网桥br0的配置需更改interfaces文件。使用brctl show 查看网桥情况。虚拟机网络通信方式:br0、NAT、vlan. 其中vlal是一个虚拟局域网,实现二层隔离。

3.Libvirt
libvirt由三大功能组件组成:后台daemon程序libvirtd、API库、命令行工具virsh。
其中,libvirtd是服务程序,接收和处理来自API的请求。API库用来开发基于libvirt的高级管理工具,例如KVM图形管理工具virt-manager。命令行工具virsh是常用的KVM命令行工具。
libvirt也用来管理Xen、VirtualBox。

4.理解openstack
首先区分物理机架构、虚拟化架构、云计算架构
其次区分Iaas Paas Saas
Iass-基础设施即服务,向用户提供一个完整的虚拟机,使用者为数据中心管理员,典型的Iaas服务包括AWS、阿里云等。
Paas-平台即服务,向用户提供应用的运行环境和一系列中间件等,使用者为应用开发人员,典型的Paas服务包括Google App Engine、IBM BlueMix。
Saas-软件即服务,向用户提供应用服务,使用者是应用的终极用户,典型的Saas包括Google Gmail。
openstack则属于Iaas,openstack对数据中心的计算、网络、存储资源进行统一管理和分配。

5.openstack架构
初识OpenStack+KVM
使用devstack可以在一台机器上,all-in-one搭建openstack环境。
核心组件或服务:Nova,Keystone,Glance,Cinder,Neutron
核心节点:控制节点、网络节点、计算节点、存储节点
openstack中的L2、L3网络指的是七层网络协议中的第二层数据链路层和第三层网络层。
NAT:网络地址转换,用于专用网内的本地IP地址与外界网络通信时,将本地IP地址转换成全球IP地址。