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

KVM虚拟化

1. 虚拟化技术

虚拟化,通过模拟计算机的硬件,实现同一台计算机上同时运行多个操作系统       

2. 虚拟化软件的差别

qemu                软件模拟全虚拟化,速度慢,兼容性好!

xen(半)        性能最好,需要修改内核,兼容性差~ redhat 5.5  

kvm                  全虚拟机,硬件支持cpu,内置在linux模块,不需要使用专门的内核 centos6  kvm,性能好,兼容性好

3. 安装kvm虚拟化管理工具

# 本文以centos8(4u4g 50g磁盘)为例,已配置阿里源

yum install libvirt virt-install qemu-kvm -y
systemctl start libvirtd
virt-install --virt-type kvm --os-type=linux --os-variant rhel7.0 --name centos8 --memory 1024 --vcpus 1 --disk /opt/centos1.raw,format=raw,size=20 --cdrom /opt/CentOS-8.1.1911-x86_64-dvd1.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

使用vnc连接安装镜像

4. KVM常用命令

virsh list                           # 查看vm列表,关机的不显示
virsh list --all                     # 查看所有vm列表
virsh start centos7(vmname)        # 启动centos7
virsh shutdown centos7               # centos7关机
virsh destroy centos7                # centos7关电源
virsh reboot centos7                 # centos7重启
virsh dumpxml centos7                # 导出centos7配置,显示在屏幕上
virsh dumpxml centos7 > vm_centos7.xml    # 将centos7配置导入到centos7.xml中
virsh undefine  centos7                   # 删除centos7,实际vm文件还在,virsh list查看不到
virsh define vm_centos7.xml               # 导入配置
virsh suspend centos7                     # 挂起centos7
virsh resume centos7                      # 恢复挂起centos7
virsh autostart centos7                   # 设置centos7开机自启动
virsh autostart --disable centos7         # 取消centos7开机自启
virsh edit centos7                        # 修改centos7配置文件

虚拟机配置文件位置 /etc/libvirt/qemu/name.xml

centos7 console登录

1. 需要登录到虚拟机内部,执行命令

grubby --update-kernel=ALL --args="console=ttys0,115200n8

2. kvm上执行

virsh console centos7 

5. 磁盘管理

raw  裸格式,占用空间大,不支持快照,不方便管理,读写性能好

qcow2   qcow(copy on write)占用空间小,支持快照,性能比raw差,方便传输

常用命令

qemu-img info centos1.raw                # 查看centos1.raw磁盘信息
qemu-img create -f qcow2 test.qcow2 2g   # 创建2g test.qcow2磁盘
qemu-img resize test.qcow2 +1g           # 将test.qcow2磁盘增加1g
qemu-img resize test.qcow2 5g            # 将test.qcow2磁盘调整到5g   # 无法缩减容量
qemu-img resize test.qcow2 --shrink 3g   # 将test.qcow2磁盘调整到3g   # 慎用
qemu-img convert -f raw -O qcow2 /opt/centos1.raw /opt/centos1.qcow2 -c   
                                         # 将centos1.raw转换成centos1.qcow2
    -f                                   # 旧磁盘格式
    -O                                   # 新磁盘格式
    -c                                   # 压缩

# 注意,转换磁盘格式后需要用virsh edit vmname修改配置文件(磁盘格式,路径),转换后原磁盘还在原路径

6. 快照管理

virsh snapshot-create centos7                         # 给centos7创建快照,快照名称默认
virsh snapshot-create-as centos7 centos7.snapshot     # 给centos7创建centos7.snapshout名称快照
qemu-img info centos7.qcow2                           # 查看centos7.qcow2的快照(需关机)
virsh snapshot-list centos7                           # 查看centos7快照(需关机)


virsh snapshot-delete centos7 1738238979              # 删除centos7的1738238979快照

7. 链接克隆与完整复制

1. 手动克隆虚拟机

qemu-img convert -f qcow2 -O qcow2 -c test.qcow2 web1.qcow2    # 以test.qcow2磁盘为模板创建web1.qcow2磁盘
virsh dumpxml centos7 > vm_web1.xml                            # 导出centos7的配置文件到vm_web1.xml中
vim vm_web1.xml            # 修改name,删除uuid,删除mac address,修改磁盘
virsh define vm_web1.xml   # 导入vm_web1.xml

2. 自动克隆

virt-clone -o web1 -n web2 --auto-clone     # 以web1为模板自动克隆web2

3. 链接克隆

qemu-img create -f qcow2 -b web2.qcow2 web3.qcow2    # 以web2为目标链接克隆web3磁盘
virsh dumpxml web2 > vm_web3.xml                     # 将web2配置导入vm_web3.xml中
vim vm_web3.xml                                      # 修改vm_web3.xml(名称,磁盘;删除uuid,mac)
virsh define vm_web3.xml                             # 导入vm_web3.xml

链接克隆脚本

#!/bin/bash
old_vm=$1
new_vm=$2

# 生成磁盘文件
old_vm_disk=`virsh dumpxml web2 | grep 'source file' | awk -F "'" '{print $2}'`
disk_path=`dirname $old_vm_disk`

qemu-img create -f qcow2 -b $old_vm_disk ${disk_path}/${new_vm}.qcow2

# 生成配置文件
virsh dumpxml $old_vm > /tmp/${new_vm}.xml

# 修改新vm配置文件
# 修改名称
sed -ri "s#(<name>)(.*)(<\/name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
# 删除vm uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
# 删除mac
sed -i '/<mac address>/d' /tmp/${new_vm}.xml
# 修改磁盘
sed -ri "s#(<source file='>)(.*)('/>)#\1${disk_path}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml
# 导入新vm
virsh define /tmp/${new_vm}.xml
# 开启vm
virsh start $new_vm

8. KVM虚拟机的桥接网络

创建桥接网卡

virsh iface-bridge ens160 br0   # 创建桥接网络
virsh iface-unbridge br0        # 取消桥接网卡

新虚拟机使用桥接模式

# 默认NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7.0 --name centos7 --memory 2048 --vcpus 2 --disk /opt/centos1.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-Minimal-2003.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
# 桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7.0 --name centos7_2 --memory 2048 --vcpus 2 --disk /opt/centos7_2.raw,format=raw,size=5 --cdrom /opt/CentOS-7-x86_64-Minimal-2003.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

修改现有虚拟机使用桥接模式

<interface type='bridge'>
<source bridge='br0'/>

常见问题

1. libvirtd服务报错  internal error: Failed to start QEMU binary /usr/libexec/qemu-kvm for probing: qemu-kvm: cannot initialize crypto: Unable to initialize gcrypt

解决方法:

yum upgrade libgcrypt -y

2. centos8 vnc连接时需要关闭防火墙

systemctl stop firewalld


http://www.kler.cn/a/527346.html

相关文章:

  • 0 基础学运维:解锁 K8s 云计算运维工程师成长密码
  • 列表(列表是什么)
  • Pandas进行MongoDB数据库CRUD
  • 赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。
  • DeepSeek-R1 模型及GRPO算法学习
  • docker中运行的MySQL怎么修改密码
  • 基于51单片机和WS2812B彩色灯带的流水灯
  • Baklib助力企业实现高效灵活的基于云的内容中台转型
  • 基于springboot+vue的母婴护理知识共享系统
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》039-使用JavaScript的方式实现动画效果
  • 10.4 LangChain核心架构揭秘:模块化设计如何重塑大模型应用开发?
  • SpringBoot AOP 和 事务
  • AI应用部署——streamlit
  • 基于Rectified Flow FLUX的图像编辑方法 RF-Solver
  • 17.2 图形绘制5
  • Streamlit入门
  • 04树 + 堆 + 优先队列 + 图(D1_树(D2_二叉树(BT)(D2_刷题练习)))
  • “星门计划对AI未来的意义——以及谁将掌控它”
  • Ethflow Round 1 (Codeforces Round 1001, Div. 1 + Div. 2)(A,B,C,E1)
  • hot100(4)
  • 对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
  • Baklib推动企业知识管理创新与效率提升的全面探讨
  • 计算机网络 性能指标相关
  • Python——基本数据类型——字符串类型
  • 代码随想录刷题day20|(哈希表篇)15.三数之和
  • 机器学习6-全连接神经网络2