一、关于libvirt
1)libvirt简介
Libvirt是目前使用最广泛的虚拟机管理工具和应用程序接口(API),常用的虚拟机管理工具(virsh、virt-install、virt-manager)和云计算架构平台(如:OpenStack、OpenNubula)等在底层都使用libvirt的应用程序接口。
Libvirt是一套开源的支持linux下虚拟化工具的函数库,为安全有效的管理各域,libvirt提供的一个公共的稳定软件层。
Libvirt由三个部分组成:应用程序接口(API)、一个守护进程libvirtd、一个默认的命令行管理工具virsh。
作用分别如下:
API为其他虚拟机管理工具(如virsh virt-manager)提供程序库支持;
Libvirtd守护进程管理所有域,在使用各工具对虚拟机进行管理时,该守护进程需要打开;
Virsh是libvirt项目中默认的命令行管理工具,具有定义、启动、停止等管理功能。
2)Libvirt工作原理如下图:
一句话描述:管理工具virsh、virt-manager、virt-install等,通过使用libvirt提供的API的,对虚拟化程序(Hypervisor)在各物理节点(node)上虚拟化出的多个域(domain,机客户操作系统 Guest OS)进行操作管理。
概念解释:
虚拟机管理程序(Hypervisor):是一个虚拟化软件,可以让一个节点上虚拟出多个客户机,常用的虚拟化软件有:KVM、Xen、VMware、VirtualBox等;
节点(node):指一台物理机,每个node上面可以虚拟化出多个虚拟域(Domain);
域(domain):虚拟化软件在物理机上虚拟化出的一个客户机,域也称为实例,或客户机操作系统(Guest OS)、虚拟机(Virtual machine)。
3)节点(node)、虚拟管理程序(Hypervisor)、域(domain)的关系如下图:
在物理节点(node)上运行虚拟化软件(Hypervisor),通过Hypervisor在node上生成多个独立的虚拟域(domain)。
二、准备工作——软件安装与网桥配置
1)检查服务器CPU是否支持虚拟化,看是否有vmx或svm 参数
[root@project ~]# grep -E 'vmx|svm' /proc/cpuinfo flags: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm pebs bts rep_good xtopology dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt aes lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid |
2)安装所需软件
通过yum源安装虚拟化软件与管理工具相关的3组软件包
[root@project ~]# yum groupinstall "Virtualization Client" "Virtualization Platform" "Virtualization Tools" |
启动libvirt服务
[root@project ~]# /etc/init.d/libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ] |
安装网桥管理工具
[root@project ~]# yum install bridge-utils tunctl -y |
3)添加桥接网络(Bridge)
新建网桥br0配置文件,将网卡em1加入网桥br0
[root@project ~]# cd /etc/sysconfig/network-scripts [root@project network-scripts]# vim ifcfg-br0 DEVICE=br0 ONBOOT=yes BOOTPROTO=static IPADDR=10.10.100.30 NETMASK=255.255.255.0 GATEWAY=10.10.100.254 TYPE=Bridge
[root@project network-scripts]# vim ifcfg-em1 DEVICE="em1" ONBOOT="yes" BRIDGE=br0 |
重启服务器网络服务,查看网桥br0
br0 Link encap:Ethernet HWaddr 90:B1:1C:0D:80:14 inet addr:10.10.100.30 Bcast:10.10.100.255 Mask:255.255.255.0 inet6 addr: fe80::92b1:1cff:fe0d:8014/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:584 errors:0 dropped:0 overruns:0 frame:0 TX packets:458 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:43198 (42.1 KiB) TX bytes:53755 (52.4 KiB)
em1 Link encap:Ethernet HWaddr 90:B1:1C:0D:80:14 inet6 addr: fe80::92b1:1cff:fe0d:8014/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:602 errors:0 dropped:0 overruns:0 frame:0 TX packets:435 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:55634 (54.3 KiB) TX bytes:52012 (50.7 KiB) Interrupt:36 Memory:da000000-da012800 |
查看生成的桥接网桥 br0
[root@project ~]# brctl show bridge namebridge idSTP enabledinterfaces br08000.90b11c0d8014noem1 |
4)添加内部网络(NAT)
软件安装好后,会自动生成一个内部网桥配置文件——default,文件路径如下:
[root@project qemu]# ls /etc/libvirt/qemu/networks/default.xml |
添加自定义的内部网桥
复制default.xml文件为natwork.xml,修改里面的内容如下:
[root@project qemu]# cp default.xml natwork.xml [root@project qemu]# cat /etc/libvirt/qemu/networks/natwork.xml
|
5)内部网络的管理——定义、启动、关闭等
[root@project networks]# virsh net-define natwork.xml //根据配置定义网络 Network natwork defined from natwork.xml [root@project networks]# virsh net-start natwork //启动指定内部网络 Network natwork started [root@project networks]# virsh net-list //查看已定义的内部网络状态 Name State Autostart Persistent -------------------------------------------------- default active yes yes natwork active no yes [root@project networks]# virsh net-destroy default //关闭指定内部网络 Network natwork destroyed |
将内部网络设置为开机自启动
[root@project networks]# virsh net-autostart natwork //设置指定内部网络为开启启动 Network natwork marked as autostarted [root@project networks]# ls /etc/libvirt/qemu/networks/autostart/ default.xml natwork.xml //设置开机启动的内部网络,会自动在autostart下生成配置链接 [root@project networks]# virsh net-list Name State Autostart Persistent -------------------------------------------------- default active yes yes natwork active yes yes |
查看内部网络的网桥
[root@project ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.66d7c17b4c66 no em1 //br0 为桥接网络网桥 tap10 tap11 vnet0 vnet1 virbr1 8000.5254002ce366 yes virbr0-nic //virbr1为natwork内部网络网桥 vnet2 vnet4 |
三、KVM的配置管理
1)创建本地磁盘映像,使用raw格式
[root@project KVM_img]# qemu-img create -f raw dell_01.img 30G Formatting 'dell_01.img', fmt=raw size=32212254720 |
使用qcow2格式时,需要加上预分配元数据参数 preallocation=metadata
[root@project KVM_img]# qemu-img create -f qcow2 -o preallocation=metadata dell_01.img 30G Formatting 'dell_01.img', fmt=qcow2 size=32212254720 encryption=off cluster_size=65536 preallocation='metadata' |
使用qcow2格式,如果不加预分配元数据参数,使用virt-install安装Guest时,磁盘大小为0。
2)使用virt-install安装Guest系统
通过本地光盘安装——网络为桥接模式
[root@project KVM_img]# virt-install --name=dell_test01 --vcpus=2 --ram=2048 \ --disk path=/data/KVM_img/dell_01.img,size=30 \ --network bridge=br0,model=virtio \ --os-type=linux --os-variant=rhel6 \ --cdrom=/data/CentOS-6.3-x86_64-bin-DVD1.iso \ --vnc --vncport=5904 --vnclisten=10.10.100.30 |
通过本地光盘安装——网络为NAT模式
[root@project KVM_img]# virt-install --name=dell_test02 --vcpus=2 --ram=2048 --disk path=/data/KVM_img/dell_01.img,format=raw --os-type=linux --os-variant=rhel6 --network network=default,mac=52:54:01:79:47:34 --graphics vnc,port=5905,listen=10.10.100.30 --cdrom=/data/CentOS-6.3-x86_64-bin-DVD1.iso |
通过网络源安装
[root@project ~]# virt-install --name=dell_test03 --ram=2048 --vcpus=2 --disk path=/data/KVM_img/dell_01.img,format=raw --os-type=linux --os-variant=rhel6 --network network=default,mac=52:54:01:79:47:34 --graphics vnc,port=5905,listen=10.10.100.30 --location=ftp://10.10.100.30/R6 |
然后使用vnc客户端远程连接,执行Linux安装(linux与windows客户端都可以),在上一篇《VM虚拟机安装管理——qemu-kvm方式》已经演示。
安装参数说明:(安装时根据需要选择参数,有些可不选)
-n --name 指定Guest名字
-r --ram 指定内存大小
--vcpus 指定Guest虚拟CPU的个数
-u --uuid Guest系统的唯一标识符,可以使用uuidgen命令生成
-p --paravirt 指定Guest为半虚拟化
--disk 指定Guest的存储磁盘,path= 指定存储位置可以是虚拟映像、lvm分区、物理分区等,format= 指定虚拟映像格式,size= 指定虚拟映像大小,单位为G
-w --network 网络配置
--network bridge=br0 指定Guest网络到特定的桥接网桥
--network network=mynat1 指定Guest网络到特定的nat网桥
--network network=mynet,model=virtio,mac=00:11... 使用参数指定网卡模式,mac地址等
--os-type= 指定Guest系统的类型,如linux、unix、windows
--os-variant= 指定安装Guest的发行版本,如rhel5、rhel6等
-c --cdrom 指定Guest的虚拟光驱,可以是ISO镜像文件,或CDROM设备,也可以是一个通过URL可以访问和获取到的boot.iso镜像
-l --location 指定kernel和initrd安装源,对于半虚拟化是必须的,全虚拟化使用--cdrom或--location
--location 使用nfs:host/path、ftp://host/path、http://host/path的方式指定安装源
-pxe 指定使用PXE boot 协议来引导加载系统
-x --extra-args用来给加载的kernel和initrd提供额外的内核命令行和参数
如:”ks=http://10.0.0.10/rehel-ks.cfg ip=xx netmask=xx gateway=xxx”
--graphics vnc,port=5905,listen=10.10.100.30 指定图形设置,主要为vnc配置,可以用来远程安装与管理虚机,可以配置vnc端口、密码、监听地址等。VNC图形还可以使用“--vnc --vncport=5904 --vnclisten=10.10.100.30”等独立参数来配置。