一、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登陆正在安装的虚拟机,默认端口是5900
10.0.0.11:5900
看到熟悉的安装界面,倒计时中,赶紧上下键切换一下
回车,不用调整内核,网卡也是eth0
注意,最重要的一点,分区的时候,不要swap分区,选择(i will configure partitioning)
然后不要选择LVM,选择标准分区(standard Partition)
添加一个根分区(/),done
KDUMP取消掉
网络(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链接到虚拟机,查看IP
2、链接客户机ssh root@192.168.122.206
3、执行上面的命令
4、reboot重启
5、链接 virsh console centos7
6、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=qcow2
vdb:指定硬盘的名字,因为已经有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=4
virt-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 ,上面的命令是正确的,不会报错
热添加cpu
virsh 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)