企业级虚拟化技术KVM管理

举报
yd_231620336 发表于 2024/09/22 09:50:53 2024/09/22
【摘要】 企业级虚拟化技术KVM管理⼀、GuestOS安装问题解析问题1:⽤图形安装guest os的时候卡住不动解决:升级系统 yum upgrade -y问题2:升级系统后安装guest os的时候还是卡住不动解决:需要在安装宿主机的时候安装兼容性程序(有的同学就没有安装也可以使?,这可能是bug)如果所有问题都排查过后还是安装不上guestos,最后的原因就是在安装宿主机系统的时候各 种兼容性软...

企业级虚拟化技术KVM管理

⼀、GuestOS安装问题解析

问题1:⽤图形安装guest os的时候卡住不动

解决:升级系统
 yum upgrade -y


问题2:升级系统后安装guest os的时候还是卡住不动

解决:需要在安装宿主机的时候安装兼容性程序(有的同学就没有安装也可以使?,这可能是bug)

如果所有问题都排查过后还是安装不上guestos,最后的原因就是在安装宿主机系统的时候各 种兼容性软件没有安装⽽且Yum也没有⾃动处理导致的


⼆、GuestOS升级配置

1. 修改配置⽂件(⽐如添加磁盘,那就添加如下配置)

<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/vm3-1.img'/>
     <target dev='vda' bus='virtio'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x16' function='0x0'/>
</disk>

特别注意:centos8⾥⾯硬盘和⽹卡的添加已经不能修改slot了,要求修改的是bus地址

2. 创建新的空磁盘卷:

[root@cloud.com ~]# qemu-img create	-f	qcow2	vm3-1.qcow2 10G

3. 重新定义:

[root@cloud.com ~]# virsh define /etc/libvirtd/qemu/vm3.xml

三、KVM存储

概念

          KVM必须要配置⼀个⽬录当作他存储磁盘镜像(存储卷)的⽬录,我们称这个⽬录为存储池

默认存储池

            /var/lib/libvirt/images/

1、存储池管理

1.创 建 基 于 ? 件 夹 的 存 储 池 ( ? 录 ) [root@cloud.com ~]# mkdir -p /data/vmfs

2.定义存储池与其?录
[root@cloud.com ~]# virsh pool-define-as vmdisk --type dir --target
/data/vmfs

3.创建已定义的存储池
(1)创建已定义的存储池
[root@cloud.com ~]# virsh pool-build vmdisk

(2)查看已定义的存储池,存储池不激活?法使?。
#virsh pool-list --all

4.激活并?动启动已定义的存储池
[root@cloud.com ~]# virsh pool-start vmdisk [root@cloud.com ~]# virsh pool-autostart vmdisk

这?vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘?件了。

5.在存储池中创建虚拟机存储卷
[root@cloud.com ~]# virsh vol-create-as vmdisk oeltest03.qcow2 20G -- format qcow2

注1:KVM存储池主要是体现?种管理?式,可以通过挂载存储?录,lvm逻辑卷的?式创建存储池, 虚拟机存储卷创建完成后,剩下的操作与?存储卷的?式?任何区别了。

注2:KVM存储池也要?于虚拟机迁移任务。

6.存储池相关管理命令
(1)在存储池中删除虚拟机存储卷
[root@cloud.com ~]# virsh vol-delete --pool vmdisk oeltest03.qcow2

(2)取消激活存储池
[root@cloud.com ~]# virsh pool-destroy vmdisk

(3)删除存储池定义的?录/data/vmfs
[root@cloud.com ~]# virsh pool-delete vmdisk

(4)取消定义存储池
[root@cloud.com ~]# virsh pool-undefine vmdisk

到此KVM存储池配置与管理操作完毕。


2、⽣产环境存储池使添加lvm和远程存储即可 3、磁盘格式

1. 磁盘镜像⽂件格式

     raw   原始格式,性能最好

     qcow    先去⽹上了解⼀下cow(写时拷⻉copy on write) ,性能远不能和raw相⽐,所以很快夭折了,所以出现了qcow2

      qcow2    性能上还是不如raw,但是raw不⽀持快照,qcow2⽀持快照。

     qed   现在默认安装好的⽤的是raw格式,所有做快照要把他转换成qcow2格式 什么叫写时拷⻉?

      raw⽴刻分配空间,不管你有没有⽤到那么多空间  

     qcow2只是承诺给你分配空间,但是只有当你需要⽤空间的时候,才会给你空间。 最多只给你承诺空间的⼤⼩,避免空间浪费

⼯作当中⽤哪个,看你⽤不⽤快照。

⼯作当中虚拟机会有多个备份,⼀个坏了,再起⼀个就⾏了,所有没必要⽤快照。 当然也不⼀定。数据绝对不会存储到本地。

2. 创建磁盘⽂件

qcow2格式磁盘件:
#qemu-img create -f qcow2 test.qcow2 20G

raw格式磁盘件:
#qemu-img create -f raw test.raw 20G

查看已经创建的虚拟磁盘: 
#qemu-img info test.qcow2


4、挂载磁盘


作为虚拟化环境管理员,你肯定遇到过虚拟机⽆法启动的情况。实施排错时,你需要对虚拟机的内部进

⾏检查。⽽Libguestfs Linux⼯具集可以在这种情况下为你提供帮助。利⽤Libguestfs找出损坏的虚拟机⽂件

Libguestfs允许在虚拟机上挂载任何类型的⽂件系统,以便修复启动故障。


使⽤Libguestfs,⾸先需要使⽤Libvirt。Libvirt是⼀个管理接⼝,可以和KVM、Xen和其他⼀些基于Liunx的虚拟机相互连接。Libguestfs的功能更加强⼤,可以打开Windows虚拟机上的⽂件。但是⾸先你 需要将虚拟机迁移到libguestfs可⽤的环境当中,也就是Linux环境。


假如你是vmware的ESXI虚拟机,为了将虚拟机迁移到Linux当中,你可以使⽤SSH连接到ESXi主机,这 意味着你⾸先需要启⽤ESXi主机上的SSH访问⽅式。完成之后,在Linux平台上运⾏下⾯的scp命令:

[root@cloud.com ~]# virt-df -h -d vm1
Filesystem	Size
vm1:/dev/sda1	484M
vm1:/dev/sdb1	3.5G vm1:/dev/VolGroup/lv_root
[root@cloud.com ~]# virt-filesystems -d vm1
/dev/sda1
/dev/sdb1
/dev/VolGroup/lv_root
挂载磁盘镜像分区:
[root@cloud.com ~]# guestmount -d vm1 -m /dev/vda1 --rw /mnt

注:


mtab⽂件在centos7的启动过程中⾮常有⽤,删掉会导致不能启动

四、KVM管理

1KVM基本管理

查看 启动 关闭 重启 重置 查看

查看虚拟机:
[root@cloud.com ~]# virsh list Id	Name	State
----------------------------------------------------
2	vm1	running


查看KVM虚拟机配置⽂件(X):

[root@cloud.com ~]# virsh list --all Id	Name	State
----------------------------------------------------
2	vm1	running

查看KVM虚拟机配置(X):
[root@cloud.com ~]# virsh dumpxml name

将node4虚拟机的配置保存?node6.xml(X):
[root@cloud.com ~]# virsh dumpxml node4 > /etc/libvirt/qemu/node6.xml

修改node6的配置(X):
[root@cloud.com ~]# virsh edit node6

如果直接
vim编辑器修改配置的话,需要重启libvirtd服务启动:
[root@cloud.com ~]# virsh start vm1 Domain vm1 started

暂停虚拟机:
#virsh suspend vm_name

恢复虚拟机:
#virsh resume vm_name

关闭:
方法1:
[root@cloud.com ~]# virsh shutdown vm1 Domain vm1 is being shutdown

方法2(X):
[root@cloud.com ~]# virsh destroy vm1 Domain vm1 destroyed

重启:
[root@cloud.com ~]# virsh reboot vm1 Domain vm1 is being reboote

重置:

[root@cloud.com ~]# virsh reset vm1 Domain vm1 was reset

删除虚拟机:
[root@cloud.com ~]# virsh undefine vm2 Domain vm2 has been undefined

注意:虚拟机在开启的情况下undefine是?法删除的,但是如果再destroy会直接被删除掉

虚拟机开机启动:
[root@cloud.com ~]# virsh autostart vm1

域 vm1标记为启动开始
[root@cloud.com ~]# ls /etc/libvirt/qemu/autostart/	//此?录默认不存在,在有开机启动的虚拟机时?动创建
vm1.xml
[root@cloud.com ~]# virsh autostart --disable vm1
域  vm1取消标记为?动开始

查看所有开机自启的guest os:
[root@cloud.com ~]# ls /etc/libvirt/qemu/autostart/

2、虚拟机克隆

1. 图形界⾯

Applications (左上⻆)-----> System Tools    >Virtual Machine Manager

关闭要克隆的虚拟机,右键点击虚拟机选择Clone

2. 字符终端,命令克隆

[root@cloud.com ~]# virt-clone -o vm1 --auto-clone WARNING	设置图形设备端?为?动端?,以避免相互冲突。
正在分配  'vm1-clone.qcow2'	| 6.0 GB	00:00:05
成功克隆 'vm1-clone'。
-o	origin

[root@cloud.com ~]# virt-clone -o vm1 -n vm2 --auto-clone WARNING	设置图形设备端?为?动端?,以避免相互冲突。
正在分配  'vm2.qcow2'	| 6.0 GB	00:00:06
成功克隆 'vm2'。

[root@cloud.com ~]# virt-clone -o vm1 -n vm2 -f
/var/lib/libvirt/images/vm2.img
正在克隆
vm1.img	| 8.0 GB	01:03
Clone 'vm2'	created successfully.


3、增量镜像

注意:扩展内容,了解即可

1、概述

实验⽬的:

        通过⼀个基础镜像(node.img),⾥⾯把各个虚拟机都需要的环境都搭建好,然后基于这个镜像建⽴起⼀个个增量镜像,每个增量镜像对应⼀个虚拟机,虚拟机对镜像中所有的改变都记 录在增量镜像⾥⾯,基础镜像始终保持不变。

功能:

      节省磁盘空间,快速复制虚拟机。

环境:

       基本镜像⽂件:node.img 虚拟机ID:node 增量镜像⽂件:node4.img 虚拟机ID:node4

要求:

      以基本镜像⽂件node.img为基础,创建⼀个镜像⽂件node4.img,以此创建⼀个虚拟机node4,虚拟机node4的改变将存储于node4.img中。

2、创建增量镜像⽂件

[root@cloud.com ~]# qemu-img create -b node.img -f qcow2 node4.img

[root@cloud.com ~]# qemu-img info node4.img

image: node4.img

file format: qcow2
virtual size: 20G (21495808000 bytes)

disk size: 33M

cluster_size: 65536

backing file: node.img (actual path: node.img)

注:该实验只是针对qcow2格式的镜像⽂件,未测试raw格式的镜像⽂件是否可⾏。

3、创建虚拟机node4XML配置⽂件

<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-KVM</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/virhost/KVM_node/node4.img'/>    #将原指向/virhost/KVM_node/node.img改为node4.img
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<interface type='bridge'>
<mac address='54:52:00:69:d5:f4'/>    #修改⽹卡MAC,防⽌冲突
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='bridge'>
<mac address='54:52:00:69:d5:e4'/>    #修改⽹卡MAC,防⽌冲突
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0' passwd='xiaobai'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>

4、根据xml配置定义虚拟机node4

[root@cloud.com ~]#virsh define /etc/libvirt/qemu/node4.xml

[root@cloud.com ~]#virsh start node4

5、测试

[root@cloud.com ~]# du -h node.img
[root@cloud.com ~]# du -h node4.img

[root@cloud.com ~]# dd if=/dev/zero of=test bs=1M count=200	#在虚拟机node4
上增量200M

[root@cloud.com ~]# du -h node.img

[root@cloud.com ~]# du -h node4.img



4、快照

为虚拟机vm8创建⼀个快照

[root@cloud.com ~]# virsh snapshot-create-as vm8 vm8.snap
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw

raw

使⽤⽂件来模拟实际的硬盘(当然也可以使⽤⼀块真实的硬盘或⼀个分区)。由于原⽣的裸格式,不⽀持snapshot也是很正常的。但如果你使⽤LVM的裸设备,那就另当别论。说到LVM还是⼗分的犀利的⽬前 来LVM的snapshot、性能、可扩展性⽅⾯都还是有相当的效果的。⽬前来看的话,备份的话也问题不

⼤。就是在虚拟机迁移⽅⾯还是有很⼤的限制。但⽬前虚拟化的现状来看,真正需要热迁移的情况⽬前 需求还不是是否的强烈。虽然使⽤LVM做虚拟机镜像的相关公开资料⽐较少,但⽬前来看牺牲⼀点灵活 性,换取性能和便于管理还是不错的选择。

qcow2

现在⽐较主流的⼀种虚拟化镜像格式,经过⼀代的优化,⽬前qcow2的性能上接近raw裸格式的性能, 这个也算是redhat的官⽅渠道了

对于qcow2的格式,⼏点还是⽐较突出的,qcow2的snapshot,可以在镜像上做N多个快照:

更⼩的存储空间

Copy-on-write support

⽀持多个snapshot,对历史snapshot进⾏管理

⽀持zlib的磁盘压缩

⽀持AES的加密

查看镜像⽂件格式:

[root@cloud.com ~]# qemu-img info /var/lib/libvirt/images/vm8.img
image: /var/lib/libvirt/images/vm8.img

file format: raw

virtual size: 10G (10737418240 bytes)

disk size: 10G

格式转换:

[root@cloud.com ~]# qemu-img convert -f raw -O qcow2
/var/lib/libvirt/images/vm8.img /var/lib/libvirt/images/vm8_qcow2.img

raw格式转换成qcow2格式

[root@cloud.com ~]# ls -l /var/lib/libvirt/images/

[root@cloud.com ~]# qemu-img info /var/lib/libvirt/images/vm8_qcow2.img

将虚拟机的硬盘指向转换后的qcow2.img

在虚拟机中创建⼀个⽬录,但⽬录中是空的

[root@cloud.com ~]# mkdir /test

[root@cloud.com ~]# ls /test

给虚拟机vm8创建第⼀个快照vm8.snap1

[root@cloud.com ~]# virsh snapshot-create-as vm8 vm8.snap1
[root@cloud.com ~]# qemu-img info /var/lib/libvirt/images/vm8_qcow2.img


在虚拟机中,给 /test 中复制2个⽂件

[root@cloud.com ~]# cp install.log anaconda-ks.cfg	/test

[root@cloud.com ~]# ls /test

anaconda-ks.cfg	install.log

给虚拟机vm8创建第⼆个快照vm8.snap2

[root@cloud.com ~]# virsh snapshot-create-as vm8 vm8.snap2

Domain snapshot vm8.snap2 created

[root@cloud.com ~]# virsh snapshot-list vm8

关闭虚拟机,恢复到第⼀个快照

[root@cloud.com ~]# virsh shutdown vm8

[root@cloud.com ~]# virsh snapshot-revert vm8 vm8.snap1

在虚拟机中,发现 /test ⽬录为空

[root@cloud.com ~]# ls /test

关闭虚拟机,恢复到第⼆个快照

[root@cloud.com ~]# virsh shutdown vm8

[root@cloud.com ~]# virsh snapshot-revert vm8 vm8.snap2

在虚拟机中,发现 /test 有拷⻉的2个⽂件

[root@cloud.com ~]# ls /test

anaconda-ks.cfg	install.log

查看虚拟机快照

[root@cloud.com ~]# virsh snapshot-list vm8

删除虚拟机快照

[root@cloud.com ~]# virsh snapshot-delete --snapshotname vm8.snap2 vm8

[root@cloud.com ~]# virsh snapshot-list vm8
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。