kvm虚拟化

一、基础知识

1、虚拟化就是通过模拟计算机硬件(CPU、内存、硬盘、网卡)来实现在一台物理服务器上同时运行多个不同的操作系统,且每个操作系统之间都是相互隔离的

2、目前国内的公有云底层采用的都是kvm虚拟化

3、应用场景:

    a、只有一台服务器,要运行多个版本的软件,不同版本之间还有冲突性

    b、机房迁移,物理机在运算过程中容易损坏,导致数据丢失

    c、OpenStack部署太难,步骤繁琐

    d、开发环境和测试环境经常损坏,运维重复装系统

    e、业务扩张,需要快速部署多个一模一样的集群

4、虚拟化软件

qemu:纯模拟全虚拟化软件,慢

xen:性能好,需要使用专门修改的内核,兼容性差

kvm:需要CPU虚拟机化,基于内核,不需要使用专门的内核,兼容性好,性能较好

5、挂起suspend:

二、安装kvm虚拟机

宿主机安装的时候不要使用lvm分区,这样比较卡

环境准备:关闭selinux、firewalld

宿主机是centos74物理机,主机名是centos74-0911

window机器安装tightVNC,为了在宿主机创建完虚拟机之后,用VNC完成安装系统https://www.tightvnc.com/

https://www.tightvnc.com/download-old.php

1、若宿主机是使用VMware要开启CPU虚拟机化,如下图所示:

2、若宿主机是物理机,先进bios看cpu是否开启了虚拟化,确认已开启

grep -E '(vmx|svm)' /proc/cpuinfo, 查看是否有回显信息,发现是有的,说明是支持虚拟化

dmesg |grep kvm

3、安装:yum -y install libvirt virt-install qemu-kvm

libvirt服务:管理KVM虚拟机的生命周期

virt-install工具:创建虚拟机

qemu-kvm:使用qemu-img为虚拟机提供硬盘

virsh\virt-manager\virt-viewer\virt-install是libvirt用户态的工具

[root@centos74-0911 ~]# rpm -qa | egrep '(libvirt|virt-install|qemu-kvm)'

# 查看KVM模块是否被正确加载

lsmod | grep kvm

4、启动libvirtd服务,并设置开启自启

systemctl start libvirtd

systemctl status libvirtd

systemctl enable libvirtd

virsh shutdown vmhost发现虚拟机没有关闭,命令没有起作用。

只能使用virsh destroy vmhost来强制关闭虚拟机

解决:在vmhost虚拟机里面安装acpid服务,因为shutdown通过这个来给虚拟机发送关机指令。

yum install acpid -y

systemctl start acpid.service

systemctl enable acpid.service

5、安装KVM成功后会在宿主机上自动生成一个虚拟网桥,用来虚拟机和宿主机之间的通信

6、创建虚拟机

宿主机ip是192.168.0.124

备注:virt-install --virt-type=kvm --name=centos74_2 --vcpus=2 --memory=4096 --location=/home/ISO/CentOS-7-x86_64-Minimal-1708.iso --disk path=/home/vms/centos74_2.qcow2,size=40,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force这种安装不需通过在Windows的VNC进行安装,直接在宿主机安装,--network bridge=br0这是桥接模式

a、这种安装在服务器上只完成虚拟机的配置信息和镜像的引导,系统的安装通过VNC远程登录系统进行。这种安装将iso文件传到home下,网卡默认先设置为NAT模式(network=default),使用VNC登录,端口是5902,创建磁盘格式为qcow2

--os-variant rhe7发行版本是红帽7,磁盘路径是vms下的,可以先make -p /home/vms/;--graphics vnc图形VNC输出,因为宿主机没有图形化;

virt-install --virt-type=kvm --name centos74 --memory=4096 --vcpus=2 --disk path=/home/vms/centos74.qcow2,format=qcow2,size=50 --location=/home/CentOS-7-x86_64-DVD-1804.iso --os-type=linux --network network=default --noautoconsole --graphics vnc,listen=0.0.0.0,port=5901

备注:

ll /usr/libexec/qemu-kvm 先看qemu-kvm是否有执行权限,发现是有的,那么正常

/usr/libexec/qemu-kvm --version

yum -y install openssl 若不安装,执行virt-install创建新虚拟机时,提示Host does not support any virtualization options

如果已经安装,就更新一下:yum -y update openssl

b、链接虚拟,配置虚拟的系统,tightVNC登录的是:[宿主机IP:虚拟机对应端口]---192.168.0.124,进入配置界面

 

要swap分区性能低

c、安装完之后,会重启,链接自动断开,在宿主机查看该虚拟的状态

virsh list --all  查看所有宿主机状态

virsh dominfo  查看宿主机信息

virsh start vmhost  开启vmhost虚机

d、在tightVNC登录下192.168.0.124:5902

在宿主机登录试一试ssh root@192.168.122.143

virsh list 查看running中运行的

virsh list --all 查看所有的

virsh shutdown vmhost 关闭虚拟机,正常关机,会挨个关掉虚机中已开启的服务

virsh destroy centos74 强制关闭,拔电源关机

配置文件信息

vmware的配置文件是.vmx

kvm的配置文件:/etc/libvirt/qemu/

 

kvm虚拟机只要磁盘文件和xml配置文件就可以创一台新的虚机

备份:[root@centos74-0911 ~]# virsh dumpxml centos74 >centos74back.xml

删除虚机:virsh undefine centos74

[root@centos74-0911 ~]# virsh undefine centos74
Domain centos74 has been undefined

恢复虚拟机:将磁盘文件放在配置文件中file路径中,或者将路径修改成磁盘文件所在的路径

[root@centos74-0911 ~]# virsh define centos74back.xml  导入配置

 

修改配置文件:virsh edit centos74

当你将磁盘文件修改centos74.qcow2--改成centos75.qcow2,重新开启虚拟机会报错,因为74已经重命名了,这就要修改配置文件,将磁盘路径改成现在的

,再次启动就OK

虚拟重名:virsh domrename centos74(当前主机名)   centos74-09(修改后的主机名)    ---前提先关机

virsh suspend 主机名:挂起,机器还是运行中,但是无法操作,时间会暂停

virsh resume  主机名:恢复之后,就可以操作了

查看vnc端口:

[root@centos74-0911 ~]# virsh vncdisplay centos74

创建虚机的时候设置的是5902端口,但是查的是:2

192.168.0.124:5902===192.168.0.124:2 tightVNC登录是一样的

开机自启:宿主机重启,虚机也会起来

virsh autostart 主机名

virsh autostart --disable 主机名  取消虚机开机自启动

[root@centos74-0911 ~]# virsh vncdisplay centos74

三、设置console登录

1、常规情况下,安装完kvm之后,可能都会通过VNC连接到kvm虚拟机里面去修改IP等信息。但是一旦虚拟机比较多的话,打开过多的端口会造成安全问题

2、很多时候,我们是通过跳板机跳板机连接的宿主机,你的Windows和kvm宿主机没有直达的路由,这时候VNC都用不了,如何快速进入到kvm虚拟机里面排查问题??

[root@centos74-0911 ~]# virsh console centos68
Connected to domain centos68
Escape character is ^]
error: operation failed: Active console session exists for this domain

  centos6设置在虚拟机中先ssh root@192.168.122.143进入虚拟:

1、添加ttyS0的许可,允许root登录:echo "ttyS0" >> /etc/securetty

2、修改/etc/grub.conf文件:在/etc/grub.conf中加入如下内容console=ttyS0

3、修改/etc/inittab文件:在/etc/inittab中加入S0:12345:respawn:/sbin/agetty ttyS0 115200

4、reboot

5、ctrl d -----ctrl ] 返回宿主机执行virsh console centos68

 centos7设置在虚拟机中先ssh root@192.168.122.202进入虚拟

1、修改内核参数:grubby --update-kernel=ALL --args="console=ttyS0,115200n8"

2、 重启:reboot

3、返回宿主机,在宿主机执行virsh console centos74

四、磁盘格式转换

1、raw:裸格式,占用空间比较大,不适合远程传输,不支持快照功能,性能较好

2、qcow2:cow(copy on write)占用空间小,适合传输,支持快照,性能比raw差

创建磁盘:

qemu-img create test.raw 10G  不写格式,默认是raw

qemu-img create -f qcow2 test.qcow2 10G

查看磁盘信息:qemu-img info test.qcow2

调整磁盘空间大小:qemu-img resize test.qcow2 +5G

磁盘格式转换:qemu-img convert -f raw -O qcow2 test.raw test1.qcow2 (将raw格式转换为qcow2格式,-f raw这个可以不写)

 如果当前某个虚拟机用的qcow2格式,想用转换后的raw格式

1、先将虚拟机强制关机virsh destroy vmhost

2、编辑虚拟机的配置文件:virsh edit vmhost

3、查找disk ,修改type的qcow2为raw;source filed的键值改成raw格式镜像所在路径,最好将raw格式的也放在这个路径,这样只需修改名字即可

4、改完配置开启虚机,virsh start centos68,virsh console centos68 ,因为已经设置console登录

五、快照

创建快照:virsh snapshot-create centos74,,1600015641这是时间戳,从1970到这个时间节点过了多少s。https://tool.lu/timestamp/

查看快照:virsh snapshot-list centos74

还原快照:virsh snapshot-revert centos74  --snapshotname 1600015641(快照的name)

先登录centos74虚拟机将目录下7-10删除,执行恢复快照(快照是创建完1-10之后生成的),就会发现7-10又回来了

删除快照:virsh snapshot-delete  centos74 --snapshotname 1600015641 

备注:若对qcow2进行快照,用ll查看qcow2文件增大,若删除快照,文件不会减小,这就是qcow2的写实复制功能,只管创建不管回收,快照也是放在虚拟磁盘中

六、克隆

完整克隆:对磁盘百分百克隆virt-clone -o centos74 --auto-clone,机器先关机或者挂起才能克隆

链接克隆:基于磁盘,链接磁盘

[root@centos74-0911 vms]# virsh suspend centos74(virsh resume centos74挂起后这样恢复)

[root@centos74-0911 vms]# virt-clone -o centos74 --auto-clone

克隆完成后,机器是挂机的状态,我们开启克隆的机器,除了IP不一样,什么都一样,登录密码也一样

[root@centos74-0911 vms]# virsh vncdisplay centos74-clone
:0

可以通过Windows的tightVNC:192.168.0.124:0登录也可以通过virsh console centos74-clone

要想改名字:virsh domrename centos74-clone centos75将centos74-clone改成centos75(clone机器要处于关机状态)

总结:克隆的机器与被克隆的机器通过virsh dumpxml centos74>  centos74.xml和virsh dumpxml centos75>  centos75.xml导出,执行vimdiff centos74.xml centos75.xml对比梁文文件,发现name\uuid\mac\磁盘文件不一样。

手动完整克隆,先将centos74磁盘文件复制一份,然后将原先centos74.xml复制成自己1.xml需要的,UUID与mac不需要写,那一行删除,开启会自动生成,执行virsh define 1.xml;virsh list --all.找打自己定义那个name,然后开启virsh start 。

posted @ 2020-09-23 01:30  闲云野鹤cs  阅读(886)  评论(0编辑  收藏  举报