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

【kvm企业级虚拟化】之初级篇

目录

  • 一、kvm介绍
  • 二、kvm软件安装
  • 三、GuestOS安装
    • 第一种方式:图形化安装
    • 第二种方式:命令行模式安装
  • 四、GuestOS升级配置
  • 五、KVM存储
  • 六、磁盘格式
  • 七、创建磁盘文件
  • 八、KVM基本管理
  • 九、虚拟机克隆
  • 十、虚拟机快照
  • 十一、KVM网络管理
    • 1、kvm修改virbr0地址段:
    • 2、kvm虚拟机配置固定ip
    • 3、kvm新建一个虚拟网卡
    • 3、kvm虚拟机桥接网络

实验环境:redhat:9

一、kvm介绍

KVM(Kernel-based Virtual Machine)是一个基于 Linux 内核的开源虚拟化解决方案。它允许在同一台物理主机上运行多个虚拟机,每个虚拟机都可以运行自己的操作系统。KVM 利用了 Linux 内核中的虚拟化扩展(如 Intel VT-x 或 AMD-V 技术),使得它能够提供高性能的硬件辅助虚拟化。
kvm优势:

  • 高性能:KVM 利用硬件辅助虚拟化技术,因此能够提供接近原生性能的虚拟化体验。
  • 支持多种操作系统:KVM 可以运行各种不同类型的客户操作系统,包括 Linux、Windows、BSD 等。
  • 安全性:由于 KVM 是基于 Linux 内核的,因此能够受益于 Linux 的安全性特性,并且能够利用诸如 SELinux 等安全模块来增强虚拟化环境的安全性。
  • 灵活性:KVM 提供了丰富的管理工具和 API,使得用户能够轻松地管理虚拟化环境。
  • 成本效益:作为开源软件,KVM 没有额外的许可费用,并且能够充分利用现有的 Linux 基础设施。

KVM 被广泛应用于数据中心、云计算和虚拟化环境中,它已经成为许多企业和组织的首选虚拟化解决方案之一。

二、kvm软件安装

1、查看CPU是否支持VT技术
diff 命令可以查看两个配置文件的区别

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

2、清理环境:卸载KVM

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

3、安装软件

yum install qemu-kvm libvirt libguestfs-tools virt-install virt-manager libguestfs-tools

解释:

qemu-KVM: 主包,是由两个组件构成,kvm实现cpu,内存的虚拟化,qemu实现i/o的虚拟化
libvirt:API接⼝,管理虚拟机的

4、启动服务

systemctl start libvirtd

5、查看KVM模块加载

lsmod | grep kvm

三、GuestOS安装

“Guest OS” 是指在虚拟化环境中安装在虚拟机上的操作系统。在虚拟化技术中,物理服务器上的虚拟化软件(比如 KVM、VMware、VirtualBox 等)可以创建和管理多个虚拟机,每个虚拟机都运行着一个独立的操作系统,这些操作系统就是虚拟机的 “Guest OS”。

第一种方式:图形化安装

virt-manager      #调出图形化界面

第二种方式:命令行模式安装

虚拟机的组成部分:

1、虚拟机配置⽂件

[root@ctrol ~]# ls /etc/libvirt/qemu
centos7.0.xml  networks

2、储存虚拟机的介质

[root@ctrol ~]# ls /var/lib/libvirt/images/
centos7.0.qcow2

模板镜像+配置⽂件 ⽅式创建虚拟机

1.拷⻉模板镜像和配置⽂件
[root@ctrol ~]# cp /var/lib/libvirt/images/centos7.0.qcow2 /var/lib/libvirt/images/vm1.img
[root@ctrol ~]# cp /etc/libvirt/qemu/centos7.0.xml /etc/libvirt/qemu/vm1.xml2.修改配置文件
[root@ctrol ~]# vim /etc/libvirt/qemu/vm1.xml
修改的主要参数是:name,uuid,source位置,以及mac地址,mac地址前24位是厂商标识,不能修改,修改后24位。memory,currentMemory保持一致
[root@ctrol qemu]# diff vm1.xml centos7.0.xml 
9,10c9,10
<   <name>vm1</name>
<   <uuid>6818b9a0-45a7-4896-b43e-97afcfcf468e</uuid>
---
>   <name>centos7.0</name>
>   <uuid>6818b9a0-45a7-4786-b43e-97afcfcf468e</uuid>
16,17c16,17
<   <memory unit='KiB'>1008576</memory>
<   <currentMemory unit='KiB'>1008576</currentMemory>
---
>   <memory unit='KiB'>1048576</memory>
>   <currentMemory unit='KiB'>1048576</currentMemory>
44c44
<       <source file='/var/lib/libvirt/images/vm1.img'/>
---
>       <source file='/var/lib/libvirt/images/centos7.0.qcow2'/>
100c100
<       <mac address='52:54:00:58:45:9b'/>
---
>       <mac address='52:54:00:58:45:9a'/>3.创建虚拟机
[root@ctrol qemu]# virsh define /etc/libvirt/qemu/vm1.xml 
Domain 'vm1' defined from /etc/libvirt/qemu/vm1.xml4.重启一下
[root@ctrol qemu]# systemctl restart libvirtd5.宿主机开启路由转发功能
[root@ctrol qemu]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@ctrol qemu]# sysctl -p6、去虚拟机ping www.baidu.com
如果ping不通,但是ip能通,去/etc/resolve中写dns解析额地址

四、GuestOS升级配置

以下配置就是手动写配置文件添加磁盘
1、修改配置⽂件(⽐如添加磁盘,那就添加如下配置)

需要主要的是:dev='vdb' ,slot='0x00',添加source镜像存放目录<disk type='file' device='disk'>
<       <driver name='qemu' type='qcow2'/>
<       <source file='/var/lib/libvirt/images/centos7.0-1.qcow2'/>
<       <target dev='vdb' bus='virtio'/>
<       <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
<     </disk>

2、创建新的空磁盘卷

qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.0-1.qcow2 1G

3、重新定义

 virsh define /etc/libvirtd/qemu/centos7.0.xml

五、KVM存储

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

/var/lib/libvirt/images/

1、存储池管理

1.创建基于⽂件夹的存储池(⽬录)mkdir -p /data/vmfs
2.定义存储池与其⽬录virsh pool-define-as vmdisk --type dir --target /data/vmfs    #vmdisk是池的名字
3.创建已定义的存储池
(1) 创建已定义的存储池virsh pool-build vmdisk
(2) 查看已定义的存储池,存储池不激活⽆法使⽤
#virsh pool-list --all
4.激活并⾃动启动已定义的存储池
virsh pool-start vmdisk
virsh pool-autostart vmdisk
这⾥vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘⽂件了。
5.在存储池中创建虚拟机存储卷
virsh vol-create-as vmdisk oeltest03.qcow2 20G --
format qcow2
注1:KVM存储池主要是体现⼀种管理⽅式,可以通过挂载存储⽬录,lvm逻辑卷的⽅式创建存储池,虚拟机存储卷创建完成后,剩下的操作与⽆存储卷的⽅式⽆任何区别了。

2.存储池相关管理命令

(1)在存储池中删除虚拟机存储卷
virsh vol-delete --pool vmdisk oeltest03.qcow2
(2)取消激活存储池
virsh pool-destroy vmdisk
(3)删除存储池定义的⽬录/data/vmfs
virsh pool-delete vmdisk
(4)取消定义存储池virsh pool-undefine vmdisk

六、磁盘格式

raw:原始格式,性能最好
qcow2:性能上还是不如raw,但是raw不⽀持快照,qcow2⽀持快照。

七、创建磁盘文件

创建磁盘⽂件
#qemu-img create -f qcow2 test.qcow2 20G
建⽴raw格式磁盘⽂件:
qemu-img create -f raw test.raw 20G
查看已经创建的虚拟磁盘⽂件:
qemu-img info test.qcow2

查看虚拟机磁盘:

[root@ctrol qemu]# virsh domblklist vm1目标   源
-----------------------------------------vda    /var/lib/libvirt/images/vm1.imgsda    -

八、KVM基本管理

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

查看虚拟机:
virsh list --all
查看KVM虚拟机配置⽂件:
virsh dumpxml vm1
修改配置⽂件:
virsh edit vm1 
如果直接⽤vim编辑器修改配置⽂件的话,需要重启libvirtd服务(这种方式就不需要)
暂停虚拟机:virsh suspend vm_name
恢复虚拟机:virsh resume vm_name
关闭: virsh shutdown vm1
虚拟机开机⾃动启动: virsh autostart vm1
删除虚拟机开机自启:virsh autostart --disable vm1
查看所有开机自启的虚拟机:virsh list --all --autostart   #会生成你一个autostart的目录,/etc下
重启:virsh reboot vm1
删除虚拟机: virsh undefine vm2

查看虚拟机的VNC端口
虚拟机的vnc端口默认从5900开始,每个虚拟机分配一个端口;

[root@ctrol qemu]# virsh vncdisplay vm1
127.0.0.1:0

查看虚拟机的网络地址

virsh domifaddr vm1

九、虚拟机克隆

1、图形化界面
2、字符命令克隆

virt-clone -o vm1 -n vm2 --auto-clone    # -n 的参数是取名字   -o 是源镜像virt-clone -o vm1 -n vm2 -f /var/lib/libvirt/images/vm2.img   #-f  是使用现有的镜像克隆

十、虚拟机快照

查看镜像文件格式:
qemu-img info /var/lib/libvirt/images/vm1.img 把raw格式转换成qcow2格式:
qemu-img convert -f raw -o qcow2 /var/lib/libvirt/images/vm8.img /var/lib/libvirt/images/vm8_qcow2.img

给虚拟机vm1创建第⼀个快照

virsh snapshot-create-as vm1 vm1.snap

查看虚拟机的快照

virsh snapshot-list vm1

恢复到第⼀个快照

 virsh snapshot-revert vm1 vm1.snap

删除虚拟机快照

virsh snapshot-delete --snapshotname vm1.snap vm1

十一、KVM网络管理

KVM虚拟网络介绍:
libvirt服务安装后,默认会安装一块virbr0的虚拟网卡(虚拟交换机),libvirt在创建KVM虚拟机后,默认使用了一个名为default的nat网络。地址段为192.168.122.0/24,为虚拟机提供网络服务。
dhcp分配到虚拟机的ip列表在以下文件查看:
cat /var/lib/libvirt/dnsmasq/default.conf

查看网卡

virsh net-list

1、kvm修改virbr0地址段:

可以修改网段,也可以用默认网段,如需修改通过如下方式:

virsh net-edit default 

然后再重新定义网络,default网络的配置文件:

virsh net-define /etc/libvirt/qemu/networks/default.xml 

停止网卡(关闭虚拟机)

virsh net-destroy default

启动网卡:

virsh net-start default

重启libvirtd:

systemctl restart libvirtd

2、kvm虚拟机配置固定ip

cd /etc/sysconfig/network-scripts/  #找到网卡编辑
把dhcp改为none,添加IPADDR,NETMASK,GATEWAY,DNS1等
然后systemctl restart network

3、kvm新建一个虚拟网卡

一、图像化方式
二、命令行方式

virsh net-dumpxml default > /etc/libvirt/qemu/networks/net1.xml   #创建一个net1网卡的配置[root@ctrol ~]# cat  /etc/libvirt/qemu/networks/net1.xml 
<network><name>net1</name><uuid>243f2a7c-696c-4834-81d1-bca8e7d8878b</uuid><forward mode='nat'><nat><port start='1024' end='65535'/></nat></forward><bridge name='virbr1' stp='on' delay='0'/><mac address='52:54:01:12:2e:9b'/><ip address='192.168.100.1' netmask='255.255.255.0'><dhcp><range start='192.168.100.2' end='192.168.100.254'/></dhcp></ip>
</network>
需要注意的是name,uuid,网桥名,mac地址,改哈ip就行virsh net-create /etc/libvirt/qemu/networks/net1.xml  #根据配置文件进行创建
virsh net-list --all   #查看网卡[root@ctrol ~]# virsh net-autostart net1  #开机自启
网络net1标记为自动启动给vm1虚拟机修改网卡:
virsh edit vm1
然后再启动该虚拟机

3、kvm虚拟机桥接网络

在KVM虚拟机中,Bridge (桥接)模式可以让KVM虚拟机和宿主机共享一个物理网络设备来连接网络,这样KVM虚拟机可以访问外部网络,而外部网络也可以直接访问KVM虚拟机,Bridge桥接模式使用非常方便,应用也非常广泛。

查看虚拟机网卡类型
virsh domiflist vm1

在虚拟机中配置桥接网络:

nmcli con add ifname br0 type bridge con-name br0
nmcli con add type bridge-slave ifname ens160 master br0
nmcli con mod br0 ipv4.addresses 192.168.85.200/24 ipv4.gateway 192.168.85.2 ipv4.dns 223.5.5.4 ipv4.method manual autoconnect yes
nmcli con up br0

相关文章:

  • uniapp直接连接wifi(含有ios和安卓的注意事项)
  • MySQL通过SQL语句进行递归查询
  • python 蓝桥杯之并查集
  • 自动驾驶功能场景 逻辑场景 具体场景解释
  • 【Linux系统】线程
  • 复盘-word
  • 公众号IP白名单已添加服务器IP 122.88... 依然给出 40164 错误
  • 探索Java多线程开发
  • CSS3基础2
  • MySQL中的JOIN操作
  • Day19:信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间
  • PostgreSQL常用命令汇总
  • WPF DataGrid常用属性
  • AHU 数据库 实验五
  • 【论文整理】自动驾驶场景中Collaborative Methods多智能体协同感知文章创新点整理
  • 【5+】跨webview多页面 触发事件(二)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CODING 缺陷管理功能正式开始公测
  • CSS3 变换
  • java8 Stream Pipelines 浅析
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • React 快速上手 - 07 前端路由 react-router
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • ------- 计算机网络基础
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 译自由幺半群
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​queue --- 一个同步的队列类​
  • (2022 CVPR) Unbiased Teacher v2
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (二)JAVA使用POI操作excel
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)appium-desktop定位元素原理
  • (一)插入排序
  • (转)jQuery 基础
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET 中 GetProcess 相关方法的性能
  • .NET开发人员必知的八个网站
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @ConditionalOnProperty注解使用说明
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ C++ ] STL_list 使用及其模拟实现
  • [04] Android逐帧动画(一)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]