openstack之kvm学习(一)

openstackkvm学习(一)

感谢Cloudman提供的系列基础博客:

http://cloudman.blog.51cto.com/10425448/1745873

虚拟化基础-Hypervisor

Hypervisor(也称VMM):运行在物理服务器和操作系统之间的中间软件层,允许多个操作系统和应用共享一套基础物理硬件,其是虚拟化的核心和基础:协调VM对硬件资源访问、VM的隔离等等。

Hypervisor的虚拟化类型:

(1) 1型,即全裸虚拟化,构建硬件全仿真实例,如ESXIXEN(直接运行在物理机上)

(2) 2型,Hypervisor作为OS内核的一个程序模块,如KVMVirtualBoxVMware Workstation(运行在linux系统上)

(3) 3型,运行在传统OS上,创建虚拟化容器,如LXC

其中1型虚拟化一般做了特别优化,性能一般会比较好。此外,当前OpenstackKVM的支持是最好的。

https://www.ibm.com/developerworks/cn/linux/l-hypervisor/ 


kvm基础

1. kvm基础:

扫描二维码关注公众号,回复: 1854669 查看本文章

全称为kernel-based virtual machine,基于linux内核实现,用于管理物理cpu和内存(IO的虚拟化由qemu实现)。

 

其依赖于内核中的kvm.ko模块。

2. libvirt基础:

libvirtKVM的管理工具(但是同样也可管理XENVirtualBox),包含:

(1) libvirtd:后台daemon,接收和处理API请求;

(2) API库:libvirt对外提供的APIvirt-manager就是使用该API进行;

(3) virsh:命令行工具

 

kvm安装

1. 创建Centos:使用Vmware Workstation创建CentOS7虚拟机

 

2. 对接yum镜像源

对接阿里的yum镜像源,具体参见网上教程。

 

3. 安装qemu虚拟化:

yum install qemu-kvm qemu-system-x86 libvirt virt-manager bridge-utils

qemu-kvmqemu-system-x86kvmqemu的核心包,提供CPU、内存、IO虚拟化

libvirt:虚拟化管理工具,提供虚拟化的API管理

virt-manager:可视化的虚拟化管理工具

bridge-utils:网络虚拟化需要,kvm网络虚拟化的实现是linux-bridge

susecentos,以及在不同版本下的安装包是不一样的)

 

4. 打开CPUVT虚拟化能力(更改时需要在关闭VM的情况进行)

 

打开Centos,确认CPU是否正常的开启了虚拟化能力:

[root@localhost Desktop]# egrep -o '(vmx|svm)' /proc/cpuinfo
vmx
vmx
vmx
vmx

vmxIntercpu虚拟化技术

svmAMDcpu虚拟化技术

虚拟化技术VTVirtualization Technology)是对资源虚拟化管理的结果,其中IntelCPU端的虚拟化里实现了VMXVirtual-Machine Extensions,虚拟机扩展)架构。包含两种角色环境:

(1) VMMVirtual Machine Monitor,虚拟机管理者)host

(2) VMVirtual Machine,虚拟机)guest

guest端软件访问的资源收到VMM的监管。

 

5. 查看libvirtd状态:

[root@localhost Desktop]# service libvirtd status
Redirecting to /bin/systemctl status  libvirtd.service
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-09-24 06:28:15 PDT; 14min ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 1494 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           ├─1494 /usr/sbin/libvirtd
           ├─2818 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_l...
           └─2819 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_l...
 
Sep 24 06:28:10 localhost.localdomain systemd[1]: Starting Virtualization daemon...
Sep 24 06:28:15 localhost.localdomain systemd[1]: Started Virtualization daemon.
Sep 24 06:28:21 localhost.localdomain dnsmasq[2818]: started, version 2.66 cachesize 150
Sep 24 06:28:21 localhost.localdomain dnsmasq[2818]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP...t auth
Sep 24 06:28:21 localhost.localdomain dnsmasq-dhcp[2818]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Sep 24 06:28:21 localhost.localdomain dnsmasq[2818]: reading /etc/resolv.conf
Sep 24 06:28:21 localhost.localdomain dnsmasq[2818]: using nameserver 192.168.98.2#53
Sep 24 06:28:21 localhost.localdomain dnsmasq[2818]: read /etc/hosts - 2 addresses
Sep 24 06:28:21 localhost.localdomain dnsmasq[2818]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Sep 24 06:28:21 localhost.localdomain dnsmasq-dhcp[2818]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Hint: Some lines were ellipsized, use -l to show in full.

启动KVM VM

1. 执行virt-manager,启动图形界面,并创建cirrors,请确保本地有一个cirrors镜像:

 

2. 使用virsh查看cirros

 

虚拟化原理

1. CPU虚拟化:一个KVM虚拟机就是host上一个qemu-kvm进程,与其它linux进程一样被调度。

[root@localhost Desktop]# ps -ef | grep kvm
root        749      2  0 08:12 ?        00:00:00 [kvm-irqfd-clean]
qemu       4674      1  9 08:28 ?        00:00:13 /usr/libexec/qemu-kvm -name cirrors -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off,dump-guest-core=off -cpu Haswell,-hle,-rtm -m 100 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid f316ac73-f9a1-4d4a-92f7-5679b5142e9c -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-1-cirrors/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -drive file=/home/lanyyyy/cirros-0.3.0-x86_64-disk.img,format=qcow2,if=none,id=drive-ide0-0-0 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=25,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:ad:83:79,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -spice port=5900,addr=127.0.0.1,disable-ticketing,image-compression=off,seamless-migration=on -vga qxl -global qxl-vga.ram_size=67108864 -global qxl-vga.vram_size=67108864 -global qxl-vga.vgamem_mb=16 -global qxl-vga.max_outputs=1 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=1 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
 

2. 内存虚拟化:

KVM实现了了VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)直接的地址转换。虚拟机是直接不能直接访问物理OS的内存,仅仅只是保存了VA -> PA到映射

3. 存储虚拟化:

是通过存储池(Storage Pool)、卷(volume)来管理的。Storage Pool是宿主机上可以看到的一片存储空间,可以是多种类型。Volume是在Storage Pool中划分出一块空间,宿主机将Volume分配给VM

猜你喜欢

转载自blog.csdn.net/zhaole524/article/details/78153065