一、关于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工作原理如下图:

KVM虚拟机管理配置——libvirt_第1张图片

 一句话描述:管理工具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)的关系如下图:

KVM虚拟机管理配置——libvirt_第2张图片

在物理节点(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

  natwork       //网络名称

  d4545757-9ceb-435a-860a-5a0ca81015e9  //修改唯一标识符

  virbr1" />      //系统中显示的网桥名称,类似于桥接网络的br0

  

  

  address="192.168.2.1" netmask="255.255.255.0">     //设置本内部网络的网段

    

      start="192.168.2.2" end="192.168.2.254" />   //可DHCP分配的地址

    

  


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安装(linuxwindows客户端都可以),在上一篇《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”等独立参数来配置。