实验环境

系统版本:CentOS release 6.8 (Final) 

系统位数:64位

KVM网络:采用NAT(由于服务器一般托管在IDC机房,如果采用桥接那么需要更多的公网IP)

宿主机ip:192.168.0.140

注意:CentOS6.8是安装在VMware中的一台虚拟机,使用的网络方式为桥接。


虚拟化介绍

1.通过虚拟化工具,将真实的硬件资源模拟划分成更少的虚拟硬件资源。

2.虚拟化分类

 软件:所有硬件设备都可以通过软件模拟出来,例如:qemu

 硬件:通过VMM(虚拟机监视器)将硬件分配和管理。例如:Xen、Vmware [ESX | workstation]、kvm、virtualbox

注意:VMM与hypervisor是一个东西


半虚拟化/全虚拟化

1.半虚拟化(para virtualization):半虚拟化宿主机(虚拟机承载主机/母机)和客户机(虚拟机/子机)都需要修改操作系统的内核,客户机知道宿主机的存在,两者之间需要协同合作,优化I/O协议使客户机操作系统可以和VMM紧密结合,近似于物理机的速度,因此性能高于全虚拟化。例如:Xen

2.全虚拟化(full virtualization):全虚拟化为客户机提供完整的虚拟硬件资源,宿主机与客户机都不需要修改系统内核,也不需要知道宿主机的存在。例如:KVM、VMware


KVM简介

1.KVM全称kernel virtual machine 是针对包含虚拟化扩展(Intel VT或AMD-V)的x86硬件上的完全原生的虚拟化解决方案。

2.是以色列Qumranet开发,基于Linux内核。2008年9月4日被RedHat收购。

3.rhel5/centos5默认是Xen,rhel6/centos6之后版本KVM代替Xen。


KVM架构

KVM驱动:作为Linux内核的一个模块,主要负责虚拟机的创建、虚拟内存分配、VCPU寄存器的读写以及运行。

Qemu:模拟虚拟机用户空间组件。

Libvirt/virsh:解决qemu效率不高,RedHat为KVM开发的辅助工具,例如virsh、libguestfs.

Virt-manager:是一套由Python开发编写的虚拟机管理图形界面,用户可以通过它操作不同虚拟机,利用libvirt的API实现。


一、准备工作

1.KVM服务器需要CPU支持虚拟化技术

首先确定CPU是否支持虚拟化,其次在bios中开启虚拟化支持。

我这里使用VMware做实验,也可以说成虚拟化嵌套,在虚拟机设置中勾选虚拟化相关选项。


2.查看是否支持虚拟化

[root@localhost ~]#  egrep '(vmx|svm)' --color=always /proc/cpuinfo

注意:如果输出有信息表示支持虚拟化,否则就不支持虚拟化,无法安装KVM。


3.查看系统内核

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

注意: 内核版本在2.6.20以下需要升级。


4.关闭SElinux

[root@localhost ~]# vim  /etc/selinux/config

修改以下内容:

SELINUX=permissive

[root@localhost ~]# setenforce 0

5.关闭iptables服务(临时关闭)

[root@localhost ~]# service iptables stop


二、安装KVM服务


1.安装软件

[root@localhost ~]# yum install -y kvm virt-*  libvirt  bridge-utils qemu-img  libvirt-client


2.查看必须软件包是否安装完整

[root@localhost ~]# rpm  -qa |grep -E 'qemu|libvirt|virt'

libvirt-client #libvirt的客户端,宿主机关机通知虚拟机关机,避免强制关机造成数据丢失。

gpxe-roms-qemu #虚拟机IPXE启动固件,支持虚拟机的网络启动

libvirt-python #为python提供API

python-virtinst #一套python虚拟机安装工具

qemu-kvm  #KVM在用户空间运行程序

virt-manager  #基于libvirt的图形化虚拟机管理软件

libvirt  #用于管理虚拟机,提供一套虚拟机管理API

virt-viewer  #显示虚拟机的控制台console

virt-top #类似top,查看资源使用情况

virt-what #虚拟机内部执行,查看虚拟机的虚拟化平台

qemu-img  #用于操作虚拟机硬盘景象的创建、查看、格式转化

注意:如果没有安装完整,自行yum安装


3.查看kvm模块

[root@localhost ~]#  lsmod |grep kvm

kvm_intel              55464  3

kvm                   345038  1 kvm_intel

注意:如果没有模块重启系统再查看,重启之后记得关闭iptables服务。


4.启动服务

[root@localhost ~]# /etc/init.d/libvirtd start

[root@localhost ~]# /etc/init.d/messagebus start


5.查看虚拟工具版本

[root@localhost ~]# virsh --version

0.10.2

[root@localhost ~]# virt-install --version

0.600.0

[root@localhost ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm

[root@localhost ~]# qemu-kvm --version

QEMU PC emulator version 0.12.1 (qemu-kvm-0.12.1.2-2.491.el6_8.3), Copyright (c) 2003-2008 Fabrice Bellard


6.查看网络

[root@localhost ~]# brctl show

bridge name bridge id STP enabled interfaces

virbr0 8000.52540055fa8b yes virbr0-nic

vnet0


7.安装VNC-server(用于图形化操作安装系统)

[root@localhost ~]# yum -y install tigervnc-server


8.设置VNC登录密码

[root@localhost ~]# vncpasswd

Password:12345.a

Verify:12345.a


9.修改配置文件(否则无法链接VNC)

[root@localhost ~]# vim  /etc/libvirt/qemu.conf

修改以下内容:

取消改行注释 vnc_listen = "0.0.0.0"


10.重启服务

[root@localhost ~]# /etc/init.d/libvirtd restart

[root@localhost ~]# /etc/init.d/messagebus restart


三、创建虚拟机(制作系统镜像)

为什么制作系统镜像?宿主机一般会安装多个虚拟机系统,如果每个虚拟机系统都从头到尾的安装一次,会耗费大部分时间并且很繁琐。所以我们制作一个系统镜像,那么下次在创建虚拟机系统的时候直接复制磁盘,修改虚拟机配置文件,挂载虚拟机运行,修改IP就是一台新的虚拟机系统。

1.创建目录

[root@localhost ~]# mkdir -p /data/{iso,pool,back}

iso:目录用于存放系统iso镜像

pool:用于存放虚拟机

back:用于存放制作虚拟机系统镜像


2.上传系统镜像

通过Xftp或者使用rz命令(需要安装lrzsz包)上传系统镜像至/data/iso目录里。


3.安装VNC

在本地PC电脑上面安装“VNC Viewer 4”客户端。用于图形化安装系统(有Xmanager图形安装会出现鼠标或键盘无法使用的情况)


4.创建系统磁盘

[root@localhost ~]# cd  /data/back/

[root@localhost back]# qemu-img create windows_2k3 -f qcow2  -opreallocation=metadata   30G


5.创建虚拟机(bus=ide,否则找到不磁盘

[root@localhost back]# virt-install -n windows2k3 -r 1024 -vcpus=1  -c /data/iso/windows_server_2003.iso --disk path=/data/back/windows_2k3,format=qcow2,size=30,bus=ide  --hvm --os-type=windows  --vnc --vncport 5901 --network network=default --force --autostart

说明:

-n:定义虚拟机在名称

-r:设置分配1G内存大小

-vcpus:设置分配1个CPU

-c:指定系统安装镜像位置

--disk path:指定虚拟机存储设备及其属性

format:指定磁盘映像格式,如raw、qcow2、vmdk。

size:指定磁盘大小。

bus:指定磁盘类型,如ide、scsi、virtio。

--hvm:当物理机同时支持全虚拟化和半虚拟化时,指定使用全虚拟化

--os-type=windows:指定系统类型,如Windows、linux。

--vnc :指定使用VNC服务

--vncport :指定VNC端口

--network network:指定网络类型为默认(NAT)。

--force:禁止交互模式,自动回答yes。

--autostart:指定虚拟机随物理启动后自动启动。

注意:Windows类系统需要设置为ide,否则安装时提示找不到硬盘。


6.登录VNC

服务器:输入宿主机IP:5901

点击“确定”,输入密码,密码是之前使用vncpasswd 设置的密码。


7.安装系统

根据图形界面提示步骤,完成对系统的安装,这里不再介绍如何安装Windows server 2003。


8.查看虚拟机系统

[root@localhost back]# virsh  list --all

Id    名称                            状态

----------------------------------------------------

1     windows2k3              running

9.配置虚拟机网络

打开"网络设置"--选择"手动"--添加"IP"和"DNS"


10.添加iptables规则

[root@localhost back]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5089 -j DNAT --to-destination 192.168.122.50:3389

[root@localhost back]# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j SNAT --to-source 192.168.0.140

[root@localhost back]# iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

[root@localhost back]# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

[root@localhost back]# service iptables save    #保存配置

[root@localhost back]# service iptables start    #启动服务


11.开启ip转发功能

[root@localhost back]# echo 1 > /proc/sys/net/ipv4/ip_forward   #临时生效

编辑配置文件

[root@localhost ~]# vim /etc/sysctl.conf

修改以下内容:

net.ipv4.ip_forward = 1

11.查看iptables文件中filter表

-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

12.测试虚拟机系统网络

ping命令检查网络

百度搜索“时间”

注意:现在网络已经OK了


13.设置允许远程访问

右键点击“我的电脑”--选择“属性”--点击“远程”--勾选“远程协助”和“远程桌面”


四、新增虚拟机系统(关机windows2k3系统)

1.复制磁盘文件

[root@localhost ~]# cd /data/pool/

[root@localhost pool]# cp /data/back/windows_2k3  windows2003_01


2.复制虚拟机系统配置文件

[root@localhost pool]# cd  /etc/libvirt/qemu/

[root@localhost qemu]# cp windows2k3.xml windows2003_01.xml


3.编辑虚拟机系统配置文件

[root@localhost qemu]# vim windows2003_01.xml

修改以下内容:

将:windows2k3 改为 :windows2003_01

删除 该行

将: 改为:

删除 该行

将: 改为:


4.编辑iptables文件

[root@localhost qemu]# vim /etc/sysconfig/iptables

在filter表中添加以下规则:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT

在nat表中添加以下规则:

-A PREROUTING -p tcp -m tcp --dport 5189 -j DNAT --to-destination 192.168.122.51:3389

[root@localhost qemu]# service iptables restart


5.加载配置到列表

[root@localhost qemu]# virsh define windows2003_01.xml


6.查看虚拟机系统列表

[root@localhost qemu]# virsh list --all

Id    名称                               状态

----------------------------------------------------

-     windows2003_01            关闭

-     windows2k3                   关闭


7.启动虚拟机系统

[root@localhost qemu]# virsh start  windows2003_01


8.登录VNC

在PC机上运行VNC,服务器填(服务器ip:端口)登录到虚拟机系统。


9.更改IP

将:192.168.122.50   改为:192.168.122.51


10.检查网络(百度“时间”)

使用浏览器访问百度,搜索“时间”,看看网络是否正常。

注意:使用mstsc远程访问看看,如果没有问题,就完成了新增虚拟机系统。linux的镜像制作也是使用相同方式。


补充内容:

镜像制作完成后是不需要运行的,然而我们配置随宿主机开机启动,所以就需要备份镜像的配置文件(/etc/libvirt/qemu/*.xml),然后通过“virsh undefine hostname”从列表中删除掉。避免物理机重启后运行镜像系统。


四、部署多台KVM server

当完成KVM server 部署后,在/root/anaconda-ks.cfg文件里面会生成服务安装记录,我们就可以利用这个快速部署一台kvm server.

1.搭建web服务挂载文件


2.安装系统,指定文件实现快速部署。

显示安装菜单,按“Tab键”,添加参数“ks=http://192.186.0.132/kvm6.8.txt”

回车键进行系统安装,根据步骤完成系统安装,安装完成系统后,就可以直接在上面安装虚拟机系统勒。。


五、扩展内容--配置桥接网络

1.复制网卡配置文件

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# cp  ifcfg-eth0  ifcfg-br0


2.编辑“ifcfg-eth0”配置文件

[root@localhost network-scripts]# vim ifcfg-eth0

修改内容为以下:

DEVICE=eth0
HWADDR=00:0C:29:53:9E:C8
TYPE=Ethernet
UUID=bc25100c-e5df-4df8-aade-a3a56a6f8790
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
BRIDGE=br0


3.编辑“ifcfg-br0”配置文件

[root@localhost network-scripts]# vim ifcfg-br0

修改内容为以下:

DEVICE=br0
#HWADDR=00:0C:29:53:9E:C8
TYPE=Bridge
#UUID=bc25100c-e5df-4df8-aade-a3a56a6f8790
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.0.140
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=61.139.2.69
DNS2=8.8.8.8


4.重启网络服务

[root@localhost network-scripts]# service  network restart


5.查看网络

[root@localhost network-scripts]# ifconfig

br0       Link encap:Ethernet  HWaddr 00:0C:29:53:9E:C8

inet addr:192.168.0.140  Bcast:192.168.0.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe53:9ec8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:66 errors:0 dropped:0 overruns:0 frame:0

TX packets:57 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:4794 (4.6 KiB)  TX bytes:6606 (6.4 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:53:9E:C8

inet6 addr: fe80::20c:29ff:fe53:9ec8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:172291 errors:0 dropped:0 overruns:0 frame:0

TX packets:55035 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:12734849 (12.1 MiB)  TX bytes:61202008 (58.3 MiB)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:65536  Metric:1

RX packets:142 errors:0 dropped:0 overruns:0 frame:0

TX packets:142 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:81792 (79.8 KiB)  TX bytes:81792 (79.8 KiB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:55:FA:8B

inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:894 errors:0 dropped:0 overruns:0 frame:0

TX packets:628 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:198521 (193.8 KiB)  TX bytes:518383 (506.2 KiB)


6.查看网口列表

[root@localhost network-scripts]# brctl show

bridge name bridge id STP enabled interfaces

br0         8000.000c29539ec8 no eth0

virbr0 8000.52540055fa8b yes virbr0-nic


7.创建磁盘

[root@localhost network-scripts]# cd  /data/pool/

[root@localhost pool]# qemu-img create -f qcow2 -o preallocation=metadata  centos6.8  20G


8.创建虚拟机

[root@localhost pool]# virt-install --name  suny --ram 1024 --disk path=/data/centos6.8,size=20 --vcpus 1 --os-type linux --os-variant rhel6 --network bridge=br0 --graphics vnc,port=5901 --console pty,target_type=serial -c /data/iso/CentOS-6.8-x86_64-bin-DVD1.iso --hvm --force --autostart


9.登录vnc完成系统安装

通过该方式就可以快速的部署KVM Server,然后根据自己需求配置机器吧。