kvm虚拟化

早过忘川 提交于 2020-02-08 03:46:42

一、kvm虚拟化介绍

什么是虚拟化

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

为什么要学习虚拟化

目前国内的公有云底层采用的都是kvm虚拟化,经过这几年的快速发展,kvm计算已经非常成熟稳定,在任何linux发行版中,kvm都是标配,虚拟化已经成为了一项必备的技能

 

虚拟化的应用场景

场景1:只有一台服务器,但是要运行多个版本的软件,不同版本之间还相互冲突

场景2:机房的迁移,物理机在运输过程中容易损坏,导致数据丢失

场景3:openstack部署太难!步骤太繁琐,如何体验最新版的openstack

场景4:开发环境和测试环境经常损坏,运维重复装系统

场景5:业务的扩张,需要快速部署10个一模一样的集群

二、安装KVM虚拟机

环境准备

主机名      kvm01
IP         10.0.0.11
操作系统    centos7
内存       4G
硬盘       50G
在处理器设置中勾选 虚拟化 Intel VT-x...
优化: kvm01在安装系统的时候,不要使用自动分区,自动分区使用的LVM分区,在使用kvm的时候,特别卡!
关闭selinux
关闭firewalld   

安装kvm管理工具

安装:
yum install libvirt virt-install qemu-kvm -y  建议使用光盘安装,会特别快:1、挂载光盘,2、yum源指定光盘.3、安装
介绍:
libvirt服务:管理kvm虚拟机的生命周期
virt-install工具:创建安装虚拟机
qemu-kvm工具:使用qemu-img为虚拟机提供硬盘

Linux上的几种虚拟化软件

qemu  软件纯模拟全虚拟化软件,特别慢!
xen   性能特别好,需要使用专门修改之后的内核,兼容性差
KVM   需要cpu支持虚拟化,基于内核,不需要使用专门的内核,兼容行好,性能较好

准备条件

在window上安装TightVNC
tightvnc官网:http://www.tightvnc.com

vnc是一个跨平台的远程桌面软件,待会安装kvm虚拟机系统的时候使用

启动libvirtd服务
systemctl start libvirtd.service
systemctl status libvirtd.service

安装kvm虚拟机

建议虚拟机内存不要低于1024M,否则安装系统特别慢!
安装之前创建好目录,并带入系统文件
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
virt-install --virt-type kvm   指定类型  --os-type=linux     指定客户机  --os-variant rhel7  发行版本  --name centos7     --memory 1024   --vcpus 1   --disk /opt/centos2.raw,format=raw,size=10   --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso   --network network=default   --graphics vnc,listen=0.0.0.0   --noautoconsole执行完命令后,赶紧使用TightVNC登陆正在安装的虚拟机,默认端口是590010.0.0.11:5900看到熟悉的安装界面,倒计时中,赶紧上下键切换一下回车,不用调整内核,网卡也是eth0注意,最重要的一点,分区的时候,不要swap分区,选择(i will configure partitioning)然后不要选择LVM,选择标准分区(standard Partition)添加一个根分区(/),doneKDUMP取消掉网络(NETWORK & HOSTNAME) 打开时间选择 上海OK,进入安装然后设置密码

三、虚拟机日常管理

列表list  virsh list  处于运行状态的  virsh list --all  所有的
开机start  virsh start centos7(虚拟机名字)
关机shutdown
拔电源关机destroy
导出配置dumpxml  默认是输出到屏幕virsh dumpxml >centos7.xml  配置文件位于/etc/libvirt/qemu/centos7.xml  /opt/下的raw文件是模板文件,只要这两个文件在,就可以任意迁移虚拟机
删除undefine  
推荐:先destroy,在undefine
导入配置define  virsh define centos7.xml   
修改配置edit  有语法错误提示
重命名domrename 
注意:低版本不支持
挂起suspend
恢复resume
查询vnc端口号vncdisplay  新建的虚拟机的端口号会自增  virsh vncdisplay centos7  :1    表示5901
开机启动autostart

四、KVM虚拟机的console登陆

为什么要使用console链接

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

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

配置console链接

在centos7的kvm虚拟机中执行:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
reboot重启生效步骤:1、通过svn链接到虚拟机,查看IP2、链接客户机ssh root@192.168.122.2063、执行上面的命令4、reboot重启5、链接 virsh console centos76、ctrl+] 就会退回到客户机作业:centos6的虚拟机如何实现console链接?

五、KVM虚拟磁盘格式转换和快照管理

kvm虚拟机的两种常用格式

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

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

qemu-img的常用命令

创建虚拟磁盘
qemu-img  create  test.raw  10G
qemu-img create -f qcow2 test.qcow2 10G

查看虚拟磁盘信息
qemu-img info test.raw

调整虚拟磁盘容量大小
qemu-img resize test.raw +5G

磁盘格式转换,转换前关机
qemu-img convert -f raw -O qcow2  test.raw oldboy.qcow2 转换完成后,修改配置文件(两个地方,类型和路径)

实战

将现有的虚拟机的磁盘格式由raw转换为qcow2,并测试运行

快照管理

创建快照
virsh snapshot-create centos7

查看快照
virsh snapshot-list centos7

还原快照
virsh snapshot-revert centos7 --snapshotname 1516574134

删除快照
virsh snapshot-delete centos7 --snapshotname 1516636570快照空间只管创建,不管回收,删除之后,空间还被占用着

六、KVM虚拟机的克隆

完整克隆
    实现方法:
    virt-clone -o web01 --auto-clone
  克隆后,新的虚拟机后面多了-lone  查看以下两者的配置文件的不同  virsh dumpxml web01 > web01.xml  virsh dumpxml web01-clone > web01-clone.xml  vimdiff web01.xml web01-clone.xml    名字    uuid    磁盘文件    mac地址
链接克隆
    实现方法:
    shell脚本

手动实现完整克隆的步骤(100%成功)

1:克隆虚拟磁盘文件
cp centos7.qcow2 web03.qcow2
2:生成新的虚拟机配置文件
name修改
uuid删掉
disk路径/opt/web03.qcow2
mac地址删除
3:测试启动
virsh define web01.xml

链接克隆(占用空间特别的小)

qemu-img create -f qcow2 -b cetnos7.qcow2 web04.qcow2

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

链接克隆和完整克隆的区别就在于第一步,完整复制和撞见回血文件的区别

七、kvm虚拟机的桥接网络

为什么要使用桥接网络

我们运行虚拟机的目的是,在虚拟机中运行我们的业务,现在业务所需要的服务都已经运行了,可是除了在宿主机上能访问,其他人都访问不了!!!

创建桥接网络

创建桥接网络
1:virsh iface-bridge eth0 br0如果报错,无法成功修改,可以自己手工创建br和修改eth0

基于桥接网络创建虚拟机
2:virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0    这里指定了桥接网卡--graphics vnc,listen=0.0.0.0 --noautoconsole

通过vnc连接到虚拟机,查看ip,已经变成了10.0.0.131

将已有的虚拟机改为桥接网络

首先是关机状态1:virsh edit centos7

    <interface type='bridge'>
      <mac address='52:54:00:55:aa:fa'/>
      <source bridge='br0’/>
这里的default是系统配置的网路,可以通过virsh进入命令命令行输入net-edit  default看到如果促使dhcp分配的IP,就要修改一下配置
2:修改虚拟机ip地址
/etc/sysconfig/network-scripts/ifcfg-eth0修改:  BOOTPROTO="static"  删除UUID添加:  IPADDR="10.0.0.132"  NETMASK="255.255.255.0"  GATEWAY="10.0.0.254"  DNS=“223.5.5.5”保存,重启网络

通过vnc连接到虚拟机,查看ip,已经变成了10.0.0.132

kvm NAT模式网络原理图

kvm桥接网络原理图

八、kvm的虚拟添加技术

什么是热添加技术

热添加技术就是不停机的情况下,在线热添加硬盘,内存,cpu,网卡等设备,热添加技术一般都是在虚拟机资源不够了,又不能停机的情况下使用的,热添加技术是虚拟机相对于物理机的一个很大的优势,它让资源分配变得更灵活!

热添加的类型

1.热添加硬盘
  创建硬盘qemu-img create -f qcow2 centos7-add01.qcow2 5G  热添加硬盘virsh attach-disk web01 /opt/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2vdb:指定硬盘的名字,因为已经有vba了--live 热添加cache=none 不分配缓存要使用需要给分区扩展:硬盘扩容  虚拟机卸载硬盘  宿主机剥离硬盘virsh detach-disk  重置之前的硬盘  挂载----看到容量没变---删除原分区---修改分区表,让使用所有的空间  ---partprobe /dev/vdb(通知内核,调整)---查看还是没变  ---xfs_growfs /mnt(因为用的是xfs,如果是 ft4 用resize2fs /mnt  ---OK! 
2.热添加网卡
  添加网卡virsh attach-interface web04 --type bridge  --model  virtio --source br0  也可以指定network --source 就是default  一定要指定virtio   永久修改,要修该配置文件  在复制一样的,删除MAC,修改类型
3.热添加cpu
  安装参数:  添加参数maxvcpus=4virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1,maxvcpus=4 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole  执行报错:系统的原因  解决:maxvcpus 加了一个v ,上面的命令是正确的,不会报错  热添加cpuvirsh setvcpus web04 --count=2  永久修改,要修该配置文件  
4.热添加内存  添加了参数maxmemory=2048  安装参数virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus=1,maxvcpus=2 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0  --noautoconsole  热添加内存virsh setmem web04 1G  永久生效要改配置文件

九、虚拟机的热迁移

什么是热迁移

相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储,这次通过大家熟悉的nfs来实现,当然也可以采用Glusterfs等分布式文件系统来实现.

为什么要用热迁移

上一节我们学习了在线热添加技术,就很容易理解了。假设我初级只有一台16G内存的物理机,为了充分利用资源,我可能运行了8台2G内存的虚拟机,然后访问量增加,虚拟机的2G内存不够用了,需要扩容,扩容之前我们就需要先迁移一部分虚拟机到其他宿主机上了,有的业务特别核心,暂停的时间不能太长,这时候就要用到我们的热迁移了。

热迁移的过程

假设我们有2台宿主机kvm01和kvm02,在kvm01上挂起虚拟机vm01,发送vm的虚拟机配置文件和运行时内存中的数据到kvm02, 接受完毕,kvm02恢复vm01,热迁移完成。

迁移环境要求

步骤

一:在kvm01和kvm02上安装kvm和nfs,配置桥接网卡
二:在nfs01上安装配置nfs
三:kvm01和kvm02挂载共享目录/opt
四:安装一台基于桥接模式的虚拟机   /data目录下上传准备好的磁盘和配置文件  安装系统,指定我们自己的磁盘文件和配置
五:在kvm01上安装图形界面、vnc服务端和virt-manager
六:启动vnc服务端
七:使用vnc连接宿主机,使用virt-manager进行迁移
说明:详情可以访问的博客https://www.qstack.com.cn/archives/368.html

十、机房服务器知识

服务器宕机、硬盘坏了、网卡换了,就需要进机房了

一般建议安装远程控制卡,除非断网了,断电了,其他的都可以搞定

进入之前要预约,

服务器少的话,可以一台一台的插线检查,多的话可以使用KVM(keyboard video manager)

文档

十一、CND的原理

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!