实验环境
系统版本: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
修改以下内容:
将:
删除
将: 改为:
删除
将:
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,然后根据自己需求配置机器吧。