深入学习KVM

2020-04-18 16:01:12来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

深入学习KVM

深入学习KVM

一、环境准备

主机名 IP 操作系统 内存 硬盘
kvm01 10.0.0.11 centos7 4G 50G

优化:kvm01在安装系统的时候,不要使用自动分区,自动分区使用的LVM分区,在使用kvm的时候,特别卡!

  • 关闭selinux关
[root@kvm02 ~]# grep 'SELINUX=disabled' /etc/selinux/config
SELINUX=disabled
  • 闭firewalld
[root@kvm02 ~]# systemctl stop firewalld
[root@kvm02 ~]# systemctl disable firewalld
[root@kvm02 ~]# systemctl status firewalld

安装kvm管理工具

安装:
yum install libvirt virt-install qemu-kvm -y
介绍:
libvirt服务:管理kvm虚拟机的生命周期
virt-install工具:创建安装虚拟机
qemu-kvm工具:使用qemu-img为虚拟机提供硬盘

Linux上几种虚拟化软件

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

安装kvm虚拟机准备条件

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

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

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

安装虚拟机

建议虚拟机内存不要低于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.5-x86_64-DVD-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

二、虚拟机的日常管理

日常管理一:

  • 列表list
  • 开机start
  • 关机shutdown
  • 拔电源关机destroy

常用命令:

virsh list --all
virsh destroy centos7
virsh shutdown centos7
virsh start centos7

日常管理二:

  • 导出配置dumpxml
  • 删除undefine
  • 推荐:先destroy,在undefine
  • 导入配置define
  • 修改配置edit
  • 重命名domrename (注意:低版本不支持)
实例:
virsh dumpxml centos7 >centos7.xml
cat centos7.xml 
[root@kvm02 opt]# virsh define centos7.xml (备份的配置文件)
[root@kvm02 opt]# virsh list --all
mv centos2.raw centos7.raw
virsh edit centos7
virsh start centos7
virsh list --all
[root@kvm02 opt]# virsh domrename centos7 web01
Domain successfully renamed
[root@kvm02 opt]# virsh list --all
[root@kvm02 /]# virsh suspend web01
[root@kvm02 /]# virsh resume web01
[root@kvm02 /]# virsh vncdisplay web01
:0
[root@kvm02 /]# virsh autostart web01
域 web01标记为自动开始
[root@kvm02 /]# virsh autostart --disable web01

三、kvm虚拟机console登陆

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

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

在centos7的kvm虚拟机中执行:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"

reboot重启生效
使用console登录:
[root@kvm02 /]# virsh console web01
连接到域 web01
换码符为 ^]

四、kvm虚拟磁盘格式转换和快照管理

kvm虚拟机两种常用的格式

  • raw:裸格式,占用空间比较大,不适合远程传输,不支持快照功能,性能较好
  • qcow2:cow(copy on write)占用空间小,适合传输,支持快照,性能比raw差一点点
qemu-img create test.raw 10G
qemu-img info test.raw
qemu-img create -f qcow2 test.qcow2 5G
qemu-img info test.qcow2
qemu-img resize test.qcow2 +10G
qemu-img info test.qcow2 
修改磁盘格式:
qemu-img convert -f raw -O qcow2 test.raw test1.qcow2
[root@kvm02 opt]# qemu-img info test1.qcow2 
案例1:
将现有的虚拟机的磁盘格式由raw转换为qcow2,并测试运行
qemu-img convert -f raw -O qcow2 centos7.raw web01.qcow2
virsh edit web01
修改磁盘的配置文件
virsh start web01

快照管理:

创建快照
virsh snapshot-create centos7
查看快照
virsh snapshot-list centos7
还原快照
virsh snapshot-revert centos7 --snapshotname 1516574134
删除快照
virsh snapshot-delete centos7 --snapshotname 1516636570
实例:
虚拟机上创建文件:测试恢复快照后文件消失
dd if=/dev/zero of=/tmp/test.raw bs=100M count=1

virsh snapshot-create web01
virsh snapshot-list web01 
virsh snapshot-revert web01 --snapshotname 1586618763
virsh snapshot-list web01 
virsh snapshot-delete web01 --snapshotname 1586618763
virsh snapshot-list web01 

五、kvm虚拟机的克隆

完整克隆

实现方法:
	virt-clone -o web01 --auto-clone
	virsh dumpxml web01 >web01.xml
    virsh dumpxml web01-clone >web01-clone.xml
    vimdiff web01.xml web01-clone.xml 
    对比克隆前后的配置文件差异
    virsh domrename web01-clone web03
    对克隆机器重命名
    virsh list --all
    virsh edit web03

链接克隆
	实现方法:
	shell脚本

完整克隆:(手工克隆)

1:克隆虚拟磁盘文件
cp centos7.qcow2 web03.qcow2
2:生成新的虚拟机配置文件
name修改
uuid删掉
disk路径/opt/web03.qcow2
mac地址删除
3:测试启动
virsh define  web01.xml
实例:
cp web01.qcow2 web04.qcow2
vim web01.xml
virsh define web01.xml (virsh dumpxml web01 >web01.xml)
virsh list --all
virsh start web04

链接克隆

链接克隆实战:
基于原磁盘克隆磁盘:
qemu-img create -f qcow2 -b cetnos7.qcow2 web02.qcow2
创建克隆机器:(区别:--boot hd)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

案例:
[root@kvm02 opt]# qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
[root@kvm02 opt]# qemu-img info web02.qcow2 
[root@kvm02 opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm02 opt]# virsh list --all
[root@kvm02 opt]# virsh vncdisplay web02

六、kvm虚拟机的桥接网络

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

创建桥接网络
1:virsh iface-bridge eth0 br0
如果命令创建失败,可以手工进行创建:
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"(注意点)
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"(注意点)
BOOTPROTO="none"
IPADDR="10.0.0.12"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
[root@kvm02 opt]# 
基于桥接网络创建虚拟机(区别:--network bridge=br0)
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

将已有的虚机修改为桥接网络
1:virsh edit web02
    <interface type='bridge'>
      <mac address='52:54:00:55:aa:fa'/>
      <source bridge='br0’/>
2:修改虚拟机ip地址
/etc/sysconfig/network-scripts/ifcfg-eth0

kvm NAT模式网络原理图

kvm 桥接网络原理图

七、kvm虚拟机的热添加技术

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

热添加种类有:

  • 1.热添加硬盘
  • 2.热添加网卡
  • 3.热添加cpu
  • 4.热添加内存

热添加硬盘

[root@kvm02 opt]# qemu-img create -f qcow2 web02-add.qcow2 10G
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
虚拟机上配置:
fdisk /dev/vdb
mkfs.xfs /dev/vdb1
mount /dev/vdb1 /mnt
df -h
磁盘扩容案例:
虚拟机配置:
umount /mnt
宿主机配置:
[root@kvm02 opt]# virsh --help | grep disk
    attach-disk                    附加磁盘设备
    detach-disk                    分离磁盘设备
[root@kvm02 opt]# virsh detach-disk web02 vdb
成功分离磁盘
[root@kvm02 opt]# qemu-img resize web02-add.qcow2 +5G
Image resized.
[root@kvm02 opt]# qemu-img info web02-add.qcow2 
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
虚拟机配置:
fdisk /dev/vdb
d(删除重新配置)
mkfs.xfs /dev/vdb1
partprobe /dev/vdb
xfs_growfs /mnt(ext 格式的需要resize2fs /mnt)
mount /dev/vdb /mnt
df -h

热添加网卡

添加网卡
virsh attach-interface web02 --type bridge  --model  virtio --source br0

热添加CPU

安装参数:
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1,maxvcpus=4 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

热添加cpu
virsh setvcpus web02 --count=2

热添加内存:

安装参数
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus=1,maxvcpus=2 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0  --noautoconsole

热添加内存
virsh setmem web02 1G

八、kvm虚拟机的热迁移

热迁移:

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

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

热迁移过程:

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

热迁移环境准备:

主机名 ip 内存 网络 软件需求 虚拟化
kvm01 10.0.0.11 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
kvm02 10.0.0.12 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
nfs01 10.0.0.31 1G nfs

热迁移步骤

(一):在kvm01和kvm02上安装kvm和nfs,配置桥接网卡

yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y

systemctl start libvirtd.service

virsh iface-bridge eth0 br0

(二):在nfs01上安装配置nfs

yum install nfs-utils -y

mkdir /data

vim /etc/exports

/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)

systemctl restart rpcbind

systemctl restart nfs

(三):kvm01和kvm02挂载共享目录/opt

mount -t nfs 10.0.0.31:/data /opt

(四):安装一台基于桥接模式的虚拟机

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
(这里利用之前保存下来的硬盘,virsh edis web04,将已有的硬盘名称配置到配置文件中)
热迁移的命令:
virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe
将宿主机10.0.0.11上的kvm虚拟机web04迁移到10.0.0.12

(五):在kvm01上安装图形界面、vnc服务端和virt-manager

yum groups install "GNOME Desktop" -y

yum install tigervnc-server.x86_64 -y

yum install virt-manager -y

六:启动vnc服务端

vncserver :1 启动5901端口的vnc服务端

vncserver -kill :1 关闭5901端口的vnc服务端

七:使用vnc连接宿主机,使用virt-manager进行迁移

这时候会提醒输入密码,就是之前第6步的时候设置的vnc连接密码

![1587143636550](

连接成功。

在迁移的过程中,使用ping虚拟机的ip,发现只丢了一个包 。


原文链接:https://www.cnblogs.com/cuiyongchao007/p/12723705.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Linux笔记:用户和用户组

下一篇:Linux开发准备:Ubuntu14.04+Samba+MobaXterm+Source Insight 4.