当前位置: 首页 > article >正文

【KVM】虚拟化技术及实战

一,KVM简介

KVM全称为QEMU-KVM
KVM可以模拟内存,cpu的虚拟化,不能模拟其他设备虚拟化。
QEMU可以模拟I/O设备(网卡,磁盘等)
两者结合,实现真正意义上的虚拟化。

从rhel6版本开始,企业中默认内核xen不支持,由KVM作为内核模块实现的。

1,分类

平台虚拟化(计算机或操作系统),
资源虚拟化(内存,CPU等),
应用程序虚拟化(仿真,模拟,解析等)。

  • 操作系统虚拟化:Openvz 虚拟化出的vps,只可安装linux,不能安装windows系统。
  • 部分虚拟化:只是模拟底层硬件。
  • 全虚拟化:完整模拟

KVM和VMware都支持全虚拟化。

  • 超虚拟化
  • 硬件辅助虚拟化(借助外接硬件)

2,架构

QEMU为硬件模拟器,开源虚拟软件。
常用工具:hypervisor

来宾操作系统(GuestOS):
① 可加载的KVM模块
② 用于PC平台模拟(QEMU)

二,KVM安装

1,环境准备

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
vi /etc/sysconfig/selinux
SELINUX=disabled 
setenforce 0 

查看CPU是否支持VT技术:

cat /proc/cupinfo | grep -E 'vmx|svm'

2,安装

  • 主要的三个包:
    ①qemu-kvm (主包) ② libvirt(API接口) ③virt-manager(图形管理程序)

  • 各个版本安装

【centos6】:

yum groupinstall  "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y

【centos7】:

# 查看内核版本,一般3.10以上都行
uname -r

# 安装
yum install *qemu* *virt* librbd1-devel -y

安装报错的情况,需要升级系统版本 yum upgrade

【centos8】:
yum 组安装已经可以使用了,
问题:在进行组安装的时候会出现关于rpm版本的错误问题解决:

yum upgrade rpm -y

再单独安装virt-manager工具。

  • 启动服务:
systemctl start libvirtd
  • 查看模块加载
lsmod | grep KVM

3,删除

清理环境 ,卸载KVM:

yum remove `rpm -qa | egrep 'qemu|virt|KVM'` -y
rm -rf /var/lib/libvirt /etc/libvirt/

三,GuestOS安装

1,图形界面安装

打开安装界面:Virt-manager
在这里插入图片描述

图形安装需要先准备镜像文件:Cent0s-7-x86_64-DVD-1708.iso
接下来步骤一步步安装(类似VMmare)(略)

2, 完全文本方式安装

服务器和客户端 都没有图形的情况下,采用此种安装方式。
注意:此种安装方式,输入字母大小写不可控,不影响远程操作,而且内存要求2G以上才行。

#virt-install --connect qemu:///system -n vm6 -r 512 --diskpath=/virhost/vmware/vm6.img,size=7 --os-type=linux --os-variant=rhel6 --vcpus=1 --network bridge=br0 --1ocation=http://127.0.0.1/rhel6u4 -x console=ttyS0 --nographics

#virt-install --connect qemu:///system -n vm9 -r 2048 --diskpath=/var/lib/libvirt/images/vm9.img,size=7 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://192.168.100.230/centos7u3 -x console=ttys0 --nographics

安装完后,查看KVM支持的os版本:

man virt-install
osinfo-query os | grep centos

3,命令行安装(重点)

(1)虚拟机的组成部分

1.虚拟机配置文件

ls /etc/libvirt/qemu
networks  vm1.xml

2.储存虚拟机的介质

ls /var/lib/libvirt/images
vm1.img

后缀自定义,一般命名.img 或者.qemu2

(2)根据配置文件创建虚拟机

# 将配置文件拷贝
cd /etc/libvirt/qemu/
cp vm1.xml vm2.xml

# 将镜像文件复制(时间长)
cd /var/lib/libvirt/images/
cp m1.qcow2  vm2.img

(3)更改配置文件
在这里插入图片描述
在这里插入图片描述
【注意】:MAC地址更改,仅仅更改后面三段(后六位)

(4)创建虚拟机

virsh  define  /etc/libvirt/qemu/vm2.xml

(5)重启虚拟机

systemctl restart libvirtd

(6)宿主机开启路由转发:

# 配置文件加入ipv4
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

# 是否配置生效
sysctl -p

4,通过飞机驾驶舱安装和管理虚拟机

yum install -y cockpit
systemctl start  cockpit

浏览器访问:主机ip+9090
在这里插入图片描述
用户名和密码与服务器用户名密码相同

在这里插入图片描述

停止飞机驾驶舱:

systemctl start  cockpit.socket

查看端口9090 是否消失确认关闭:

netstat -lntp

5,安装过程问题解决

安装过程,卡住不动的情况下解决方案:
① yum upgrade -y
② 安装兼容程序
③ 可能qemu-kvm主包,错误的安装成了qemu-kvm-ev

四,KVM添加磁盘

对虚拟机器,升级配置

1.修改配置文件

(比如添加磁盘,那就添加如下配置)
在这里插入图片描述

2.创建新的空磁盘卷:

qemu-img create -f qcow2 /var/lib/libvirt/images/vm3-1.qcow2 10G

-f: 指定磁盘格式

3. 重新定义:

virsh define /etc/libvirtd/qemu/ym3.xml

五,KVM存储池

默认存储池:/var/lib/libvirt/images/

1、存储池管理

1.创建基于文件夹的存储池(目录)
mkdir -p /data/vmfs

2.定义存储池与其目录
virsh pool-define-as vmdisk --type dir --target /data/vmfs

3.创建已定义的存储池
(1)创建已定义的存储池: 
virsh pool-build vmdisk
(2)查看已定义的存储池,存储池不激活无法使用: 
virsh pool-list --a11

4.激活并自动启动已定义的存储池
virsh poo-start mdisk
virsh pool-autostart vmdisk
这里vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘文件了。

5.在存储池中创建虚拟机存储卷
virsh vol-create-as vmdisk oeltest03.qcow2 20G  --format qcow2
注1:KVM存储池主要是体现一种管理方式,通过挂载存储目录,lvm逻辑卷的方式创建存储池,虚拟机存储卷创建完成后,剩下的操作与无存储卷的方式无任何区别了。
注2:KVM存储池也要用于虚拟机迁移任务。

6.存储池相关管理命令
(1)在存储池中删除虚拟机存储卷
virsh vol-delete --pool vmdisk oeltest03.gcow2
(2)取消激活存储池
virsh pool-destroy vmdisk
(3)删除存储池定义的目录/data/vmfs
virsh pool-delete vmdisk
(4)取消定义存储池
virsh pool-undefine vmdisk

2、生成环境存储池使用

添加Ivm和远程存储即可

3、磁盘格式

磁盘格式名性能是否支持快照是否立刻分配空间
raw最快不支持立刻分配(空间资源浪费)
qcow一般--
qcow2较快支持不立刻分配(写时拷贝)
qed基本弃用--

什么叫写时拷贝?
raw立刻分配空间,不管你有没有用到那么多空间
qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费。

4、创建磁盘文件

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

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

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

六,KVM磁盘挂载

1,介绍

当遇到虚拟机无法启动,实施排错时,你需要对虚拟机的内部进行检查。
利用Libguestfs找出损坏的虚拟机文件。

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

2,操作

查看磁盘镜像分区信息:
virt-df -h -d vm1
或
virt-filesystems -d vm1/dev/sda1

挂载磁盘镜像分区:
guestmount -d vml -m /dev/vda1 --rw /mnt

取消挂载:
guestunmount /mnt

七,KVM虚拟机管理

1,基本管理

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

# 查看虚拟机:
virsh list
或
virsh list --a1l

# 查看KVM虚拟机配置文件(X):
virsh dumpxml name

# 将node4虚拟机的配置文件保存至node6.xm1(x):
virsh dumpxml node4 > /etc/libvirt/gemu/node6.xml

# 修改node6的配置文件(X):
virsh edit node6

# 如果直接用vim编辑器修改配置文件的话,需要重启1ibvirtd服务
启动:
virsh start vm_name
暂停虚拟机:
virsh suspend vm_name
恢复虚拟机:
virsh resume vm_name
关闭:
方法1:
virsh shutdown vm_name
方法2(X):
virsh destroy vm_name
重启:
virsh rebopt vm_name
重置:
virsh reset vm_name
删除虚拟机:
virsh undefine vm_name
注意:虚拟机在开启的情况下undefine是无法删除的,但是如果再destroy会直接
被删除掉

虚拟机开机自动启动:
virsh autostart vm_name

域vm_name标记为自动开始
1s /etc/libvirt/gemu/autostart/

域vm_name取消标记为自动开始
virsh autostart --disable  vm_name

查看所有开机自启的guest os:
1s /etc/libvirt/gemu/autostart/
virsh ist --a11 --autostart

八,KVM克隆

1,图形界面

Applications(左上角)---->System Tools ------>Virtual Machine Manager关闭要克隆的虚拟机,右键点击虚拟机选择Clone

2,终端命令克隆

virt-clone -o vm_name1 --auto-clone
virt-clone -o vm_name1 -n vm_name2 --auto-clone
virt-clone -o vm_name1 -n vm_name2 -f 'var/lib/libvirt/images/vm2.img

参数说明:
-o : 指定需要克隆的虚拟机名称
-n : 指定克隆出的虚拟机名称
-f ,–file :为新客户机使用新的磁盘镜像文件名称

九,KVM增量镜像

1,基础准备

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

2,创建增量镜像

# 创建增量镜像
qemu-img create -b node.img  -f qcow2 node4.img

# 查看是否创建成功
qemu-img info node4.img

参数说明:
-b:指定基础镜像
-f:指定镜像格式

3,创建虚拟机node4的XML配置文件

省略(上面已经介绍)

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

virsh define /etc/libvirt/qemu/node4.xml
virsh start node4

5,测试

查看生成镜像文件的大小,使用命令:du -h 文件名

6,快照

为虚拟机vm_name01创建一个快照vm_name01-1.snap

# 创建快照
virsh  snapshot-create-as  vm_name01  vm_name01-1.snap

# 查看指定快照文件格式
qemu-img info /var/lib/libvirt/images/vm2.qcow2

# 查看快照列表
virsh snapshot-list vm_name01

# 创建一块磁盘
qemu-img create -f raw /var/lib/libvirt/images/vm2-1.raw 2G

由于新磁盘格式为raw,可以挂载但是无法创建快照,因此,需要将raw格式转换成qcow2格式,具体操作如下:

# 将raw格式转换成qcow2格式 
qemu-img convert -O qcow2 [需要转换文件名].raw   [转换成的文件名].qcow2

# 查看信息
qemu-img info [转换成的文件名].qcow2

转换格式成功后,需要重新该配置文件vm2.xml后,定义并创建快照:

virsh define /etc/libvirt/qemu/vm2.xml

# 拍快照
Virsh snapshot-create-as vm2  vm2.snap2

# 恢复快照
virsh snapshot-revert  vm2 vm2.snap2

十,KVM网络

1,分类:

(1)网络分类:nat 和 isolated
(2)接口:bridge
(3)虚拟交换机: linux-bridge(linux自带) 和 ovs (open-Vswitch)

2,网络拓扑

(1)NAT网络拓扑
(2)隔离网络拓扑
(3)桥接网络拓扑

3,实验操作

# 查看交换机 包括其端口
brctl show

在这里插入图片描述

# 从交换机上把vnet0网卡删除:
brctl delif virbr0 vnet0

# 添加vnet网卡到交换机上:
brctl addif  virbr0 vnet0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看所有的网络:
virsh net-list

启动网络:
virsh net-start isolated200

开机自启动:
virsh net-autostart isolated200

查看一个guest主机的网络接口信息:
virsh domiflist vm2

【KVM相关项目】

1、迁移
  • 从物理机器迁移到KVM
  • 从KVM迁移到云主机
2、文件管理服务(ftp nfs jira+wiki)
3、日志服务

http://www.kler.cn/news/326766.html

相关文章:

  • defineExpose 显式导出子组件方法
  • 基于SSM的宠物领养管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
  • MAC M1 安装brew 配置环境变量,安装dart
  • 电影系统1-MovieStrip.vue
  • 一款基于 RBAC 的 Net8 后台管理框架,权限管理,前后台分离,支持多站点单点登录(附源码)
  • 基于Apache和Tomcat的负载均衡实验报告
  • 【30天玩转python】Web开发(Flask/Django)
  • 基于springboot框架的智能招聘系统的设计与实现3hlst
  • ruoyi网页刷新后报404
  • Python电能质量扰动信号分类(六)基于扰动信号特征提取的超强机器学习识别模型
  • VIM的使用总结
  • (c++)内存四区:1.代码区2.全局区(静态区)3.栈区4.堆区
  • 日常工作技术点总结
  • 关于uniapp wifi调用走过的坑
  • 应用层协议 --- HTTP
  • 将Docker镜像推送到阿里云仓库,使用Docker-compose将mysql、redis、jar包整合在一起
  • spring如何解决循环依赖
  • NAND Flash虚拟层垃圾回收机制
  • 【微信小程序前端开发】入门Day01 —— 小程序页面组成、组件使用及协同开发发布指南
  • 深度探索与实战编码:利用Python与AWS签名机制高效接入亚马逊Product Advertising API获取商品详情
  • Web端云剪辑解决方案,提供前端产品源码
  • 使用 MongoDB 在 Spring Boot 中构建安全的 RBAC 系统
  • 【GESP】C++一级练习BCQM3016,初识输入
  • 实用工具推荐---- PDF 转换
  • 利用 Local Data 导入文件到 OceanBase 的方法
  • elasticsearch实战应用JAVA案例
  • Codeforces Round 975 (Div. 2)(A,B,C,D线段树解法,E)
  • 浅谈音频采集方案
  • Elasticsearch深度攻略:核心概念与实践应用
  • 前端使用 Konva 实现可视化设计器(23)- 绘制曲线、属性面板