深入学习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,发现只丢了一个包 。

以上是 深入学习KVM 的全部内容, 来源链接: utcz.com/z/515599.html

回到顶部