设为首页 收藏本站
查看: 1321|回复: 0

[经验分享] [原创]KVM虚拟化实践记录

[复制链接]

尚未签到

发表于 2017-6-25 12:12:01 | 显示全部楼层 |阅读模式
一、KVM简介
KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机),是一个开源的系统虚拟化模块,基于硬件的完全虚拟化,不过需要硬件支持(如Intel VT技术或者AMD V技术)。自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
二、KVM安装配置
1、准备工作
1.1 关闭iptables防火墙
[iyunv@localhost ~]# service iptables stop //停止iptables
1.2 CPU开通支持虚拟化
需要在BIOS中开启虚拟化,一般是默认开启的
2、安装kvm虚拟机
2.1 查看CPU是否支持kvm完全虚拟机
[iyunv@localhost ~]# cat /proc/cpuinfo | grep 'vmx' //Intel CPU判断方法
[iyunv@localhost ~]# cat /proc/cpuinfo | grep 'svm' //AMD CPU判断方法
根据对应的CPU型号进行选择判断方法,如果能出现信息 ,就说明CPU支持KVM完全虚拟机
2.2 安装kvm和其它虚拟化所需管理软件包
[iyunv@localhost ~]# yum install -y kvm virt-* libvirts bridge-utils qemu-img
软件包名称介绍:
kvm:软件包中含有KVM内核模块,它在默认linux内核中提供kvm管理程序
libvirts:安装虚拟机管理工具,使用virsh等命令来管理和控制虚拟机
bridge-utils:设置网络网卡桥接
virt-*:创建、克隆虚拟机命令,使用qemu命令来创建磁盘等。
qemu-img:安装qemu组件,使用qemu命令来创建磁盘等。
2.3 加载kvm模块,查看kvm模块是否被加载
[iyunv@localhost ~]# modprobe kvm-intel //加载kvm模块
[iyunv@localhost ~]# lsmod | grep kvm //查看kvm模块是否被加载
2.4 重启确认kvm是否被加载
[iyunv@localhost ~]# reboot //重启
[iyunv@localhost ~]# lsmod | grep kvm //查看kvm模块是否被加载
2.5 查看已打开虚拟机列表
[iyunv@localhost ~]# virsh list //查看虚拟机列表,如果有的话,就会显示出来
2.6 配置eth0、br0网卡
[eth0网卡]
[iyunv@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=74:D4:35:87:71:02
TYPE=Ethernet
UUID=723095b7-27d1-4f88-aa5f-5aa6b0472fbc
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
BRIDGE=br0
[br0网卡]
[iyunv@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=172.16.10.23
NETMASK=255.255.255.0
GATEWAY=172.16.10.254
DNS1=202.96.128.86
大家可以看着我的配置来进行修改,
2.7 查看目前所有的网桥接口
[iyunv@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.74d435877102 no eth0
virbr0 8000.5254005ce327 yes virbr0-nic
(如果eth0没有挂载br0上就要使用命令:#brctl addif br0 eth0 将其挂上去即可)
2.8 修改VNC服务器的配置文件
[iyunv@localhost ~]# vim /etc/libvirt/qemu.conf
将 vnc_listen = "0.0.0.0" 前面的#号注释去掉 //在文件的第12行
2.9 重启libvirtd和messagebus服务
[iyunv@localhost ~]# /etc/init.d/libvirtd restart //重启libvirtd服务
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]
(若出现重启libvirtd服务失败,libvirtd: relocation error: libvirtd: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference,则执行:yum -y  upgrade device-mapper-libs之后重启libvirtd服务即可)
[iyunv@localhost ~]# /etc/init.d/messagebus restart //重启messagebus服务
Stopping system message bus: [ OK ]
Starting system message bus: [ OK ]
3、在宿主主机上创建、安装kvm虚拟机
3.1 创建镜像文件目录和虚拟磁盘存放目录
[iyunv@localhost ~]# mkdir /data/iso
[iyunv@localhost ~]# mkdir -p /data/vm/
3.2 把Centos6.5和windows2003系统文件拷贝到iso目录下
这个可以通过ftp或者通过挂载,下载都行
(kvm服务的存储将磁盘配置成lvm来使用,可动态扩展使用,还可以创建快照备份容灾)
======================================================================================================
先创建磁盘:
(windows)#qemu-img create -f raw /data/vm_disk/migrate.img 4G
(linux)#qemu-img create -f qcow2 /data/vm_disk/migrate.img 6G
安装虚拟机:
(windows)#virt-install -n winxp01 -r 1024 -vcpus=1 -s 20 -c /data/iso/DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G.iso --hvm --os-type=windows -f /data/vm/win/winxp_01.img --bridge=br0 --graphics vnc,listen=0.0.0.0,port=7789 --force --autostart
(linux)#virt-install -n openfiler -r 1024 -vcpus=2 -s 20 -c /data/iso/openfileresa-2.99.1-x86_64-disc1.iso --hvm --os-type=linux -f /data/vm/linux/openfiler.img --bridge=br0 --graphics vnc --force --autostart
[安装过程需要在KVM主机上开启vncserver服务,然后使用vnc客户端连接上去,在使用virt-viewer (id号)连接上虚拟机安装界面进行安装]
1.安装完毕后,要记的在虚拟机上安装acpid进程,以方便远程关闭机器
yum install acpid -y
chkconfig acpid on 345
service acpid start
2.等做完虚拟机的配置后,就需要对虚拟机做一个快照了。
快照的制作有两种方法,一种是直接在virsh 里面使用snapshot来制作。另外一种是使用qemu-img来创建快照
virsh snapshot-create-as winxp01
快照创建的很快,其实,就是生成了一个XML的配置文件,记录下当前的信息。
查看快照
virsh snapshot-list winxp01
名称
             CreationTime            状态
------------------------------------------------------------
1330937069          2012-03-05 16:44:29 +0800 shutoff
查看快照的配置文件
virsh snapshot-current winxp01
那么,快照文件存在什么地方呢,在/var/lib/libvirt/qemu/snapshot目录下,有以虚拟机的域名为名称的文件夹,就在里面哪
使用qemu-img创建快照也很方便,这个镜像是直接对硬盘文件进行操作,硬盘文件的格式必须为qcow2格式的,记的貌似物理硬盘的格式为LVM才能创建快照,还是格式为LVM,qemu-img的格式不必为qcow2格式就能创建快照,还没整明白
qemu-img snapshot -c 2012-3-5 /kvm/images/winxp01
创建完毕后,查看一下
qemu-img snapshot -l /kvm/images/winxp01
Snapshot list:
ID       TAG                VMSIZE               DATE      VM CLOCK
1        1330937069               0 2012-03-0516:44:29  00:00:00.000
2        2012-3-5                 0 2012-03-0516:51:39  00:00:00.000
可以看到有两个快照,ID=1为virsh创建的,ID=2为qemu-img创建的,这两个之间有什么关系,还没有想明白。
【注意要使用 KVM 的快照功能,虚拟机的硬盘一定要是 qcow2 格式,否则无法使用快照功能。】
===========================================================================================================
使用lvm安装虚拟机,制作镜像系统。然后创建快照来备份和快速复制启动虚拟机。
#vgrename /dev/kvm /dev/vg01
#lvcreate -L 8G -n ubuntu01 vg01
#virt-install -n openfilertest_01 -r 2048 -vcpus=1 -s 10 -c /data/iso/ubuntu.iso --hvm --os-type=linux -f /dev/vg01/ubuntu01 --bridge=br0 --graphics vnc --force --autostart &
#lvcreate -s -L 2G -n s_ubuntu01 /dev/vg01/ubuntu01
创建虚拟机快照之后,编写kvm启动的s_ubuntu01.xml文件指定source设备是s_ubuntu01,修改uuid,mac和name。然后
#virsh define s_ubuntu01.xml来启动虚拟机。
#virsh start s_ubuntu01
3.实现虚拟机动态迁移
配置两台KVM主机SSH免密钥登录,关闭防火墙。执行#virsh -c qemu+ssh://dest_ip/system list
成功表示可以做迁移了。执行下面命令进行迁移:#virsh migrate --verbose --live --persistent xp01 qemu+ssh://dest_ip/system
迁移进度完成之后就迁移好了,但是配置文件还没有,需要在目标主机上创建并定义迁移过来的虚拟机,操作如下:
#virsh dumpxml xp01 > /etc/libvirt/qemu/xp01.xml
#virsh define /etc/libvirt/qemu/xp01.xml
到此,完成迁移。
===========================================================================================================
安装vnc服务:
1.yum install tigervnc tigervnc-server
2.设置vnc周密码:
[iyunv@www.iyunv.com ~]# vncserver
You will require a password to access your desktops.
Password:<输入vnc登录密码>
Verify:<再次输入vnc登录密码>
3。 配置VNC:
为了防黑屏,需要修改一下/root/.vnc/xstartup。
注释下面两行
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &   [注意:若要使用vnc远程到字符界面进行操作则不要注释此行,并安装xterm工具即可。注意远程上去之后如果有界面不能操作则需要设置vnc客户端的键盘和鼠标的使用]
#twm &
然后再添加下面一行
gnome-session &//如果是ubuntu系统,配置这个生效的话需要安装gdm:apt-get install gdm
4.修改用户配置文件:/etc/sysconfig/vncservers,去掉下面这两行前的“#”,也就是说把这两行的注释给去掉。
VNCSERVERS="2:root"
VNCSERVERARGS[2]="-geometry 1024x768 -depth 32"
4.改变xstartup的权限:
chmod 777 /root/.vnc/xstartup
5、防火墙开端口,netstat -antpl查看可以发现有三个端口在监听。
5901 5801 6001
这三个端口:
默认的, vnc 服务监听3个TCP端口
RFB(Remote FrameBuffer)协议 默认端口 : 5900 显示器号
HTTP协议默认端口 : 5800 显示器号
X协议 默认端口 : 6000 显示器号
vncserver使用的显示器编号默认从1开始, 依次使用, 也可以参数指定端口号,我们只需要RFB协议就好了,所以,我们在防火墙中加5900到5903这几个。
#vi /etc/sysconfig/iptables 找到下面的语句:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
在这之后填加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5903 -j ACCEPT
#service iptables restart
# vncserver -kill :1//kill进程
# vncserver :1//重启进程
6.在windows中用vnc客户端登录测试。
7.配置vnc开机自启,在/etc/rc.local文件中添加: /etc/init.d/vncserver start & 即可。
===========================================================================================================
添加磁盘:
方式一:
qemu-img create -f qcow2 /data/vm_disk/vm_sda.img 1G
//新建的大小和指定参数的大小不一样,但是挂载的时候大小是对的。
cat > vm_sda.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/data/vm_disk/vm_sda.img'/>
<target dev='hdf' bus='virtio' type='virtio'/>
</disk>
virsh attach-device ubuntu_01 vm_sda.xml
virsh detach-device ubuntu_01 vm_sda.xml
方式二:
virt-make-fs -F qcow2 -t ext4 -s 512M /data/vm/device/ /data/vm/device/vm_sda1.img
//新建的大小和指定参数的大小不一样,但是挂载的时候大小是对的。
cat > vm_sda1.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/data/vm/device/vm_sda1.img'/>
<target dev='hde' bus='virtio' type='virtio'/>
</disk>
virsh attach-device ubuntu_01 vm_sda1.xml
virsh detach-device ubuntu_01 vm_sda1.xml
分区格式化:
fdisk -l
fdisk /dev/sda
n
1
w
mkfs.ext4 /dev/sda1
mount /dev/sda1 /data
===========================================================================================================
1.kvm虚拟机部署之后安装shellinabox服务用于web操作该虚拟机。
部署shellinabox:
1)yum install git openssl-devel pam-devel zlib-devel autoconf automake libtool
2)git clone https://github.com/shellinabox/shellinabox.git && cd shellinabox
3)autoreconf -i
4)./configure && make
5)make install
6)openssl genrsa -des3 -out my.key 1024
7)openssl req -new -key my.key  -out my.csr
8)cp my.key my.key.org
9)openssl rsa -in my.key.org -out my.key
10)openssl x509 -req -days 3650 -in my.csr -signkey my.key -out my.crt
11)cat my.crt my.key > certificate.pem
12)/usr/local/shellinabox/bin/shellinaboxd -c /root -u root -b
/usr/local/shellinabox/bin/shellinaboxd --disable-ssl -c /root -u root -b(不使用https)
13)netstat -ntpl |grep 4200
14)ps -ef |grep shell
15)https://ip:4200    //(jhk/jhk123456)但是一直root登陆不上去,默认是不让root登陆的,只能其它用户登陆,然后再 su - 切换过去。
2.随机生成mac地址和uuid:
1)#MACADDR="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"; echo $MACADDR
2)#uuid=`/usr/bin/uuidgen`;echo $uuid
===========================================================================================================
virsh console vm01 //默认是不起作用的,需要配置一下内容.
1.echo "ttyS0" >> /etc/securetty
2.在etc/grub.conf中加入如下内容console=ttyS0
3.在/etc/inittab中加入
S0:12345:respawn:/sbin/agetty ttyS0 115200
4.reboot
5.virsh console vm01
kvm虚拟化windows操作系统鼠标有点不灵活等问题,在这里通过以下方式解决。在虚拟机的<devices>配置中增加:
# virsh edit wintest01
<input type=’tablet’ bus=’usb’/>
kvm使用vnc连接虚拟机:使用id号和port连接都试一下
如果vnc连接guest窗口一闪而过,那么在vnc viewer客户端软件中设置ColourLevel=rgb222即可。
===========================================================================================================
配置KVM主机tcp方式互相访问:
virsh -c qemu+tcp://server01/system
修改文件vim /etc/sysconfig/libvirtd,用来启用tcp的端口
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
LIBVIRTD_ARGS="--listen"
修改文件vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
auth_tcp = "none"
重启libvirtd:
service libvirtd restart
防火墙开放16509端口。
python操作迁移:
import libvirt
import pprint
conn_01 = libvirt.open('qemu+tcp://userename@server01/system')
conn_02 = libvirt.open('qemu+tcp://userename@server02/system')
vm_domain = conn_01.lookupByNName('instance_name')
vm_domain.migrate(connm_02,True,'instance_name',None,0)
pprint.pprint(help(vm_domain.migrate))
===========================================================================================================
解决KVM虚拟机鼠标同步问题
kvm虚拟化windows操作系统鼠标有点不灵活等问题,在这里通过以下方式解决。在虚拟机的<devices>配置中增加:
# virsh edit wintest01
<input type='tablet' bus='usb'/>
===========================================================================================================
python迁移代码:
#!/usr/bin/python
import libvirt
import pprint
conn_01 = libvirt.open('qemu+tcp://vm01/system')
conn_02 = libvirt.open('qemu+tcp://vm02/system')
vm_domain = conn_01.lookupByName('s_migrate')
vm_domain.migrate(conn_02,True,'s_migrate',None,0)
pprint.pprint(help(vm_domain.migrate))
手动迁移步骤:
qemu-img create -f raw /data/vm_disk/migrate.img 4G
virt-install -n s_migrate -r 2048 -vcpus=1 -s 20 -c /iso/DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G.iso --hvm --os-type=windows -f /data/vm_disk/s_migrate.img --bridge=br0 --graphics vnc --force --autostart &
迁移时报错:error: unable to connect to server at 'vm02:49152': Connection refused是因为ssh免密钥登录没有配置好。
直接迁移,没有配置文件和存储的迁移:
virsh migrate s_migrate --live qemu+tcp://vm01/system
virsh migrate s_migrate --live qemu+ssh://vm01/system
迁移时把存储一起迁移,需要目标主机先建立一样的路径和名称大小的磁盘文件:
virsh migrate --live --copy-storage-all --unsafe --persistent s_migrate qemu+ssh://vm02/system
virsh migrate --live --copy-storage-all --unsafe --persistent s_migrate qemu+tcp://vm02/system
直接迁移,没有配置文件和存储的迁移,需要目标主机先建立一样的路径和名称大小的磁盘文件:
virsh migrate --verbose --live --persistent s_migrate qemu+ssh://vm02/system
virsh migrate --verbose --live --persistent s_migrate qemu+tcp://vm02/system

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387950-1-1.html 上篇帖子: fence-agents kvm 实验 下篇帖子: kvm虚似机监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表