环境:
os镜像:CentOS-7-x86_64-Minimal-2009.iso
qemu-kvm:qemu-kvm.x86_64 10:1.5.3-175.el7_9.6
Libvirt:libvirt-4.5.0-36.el7.x86_64

1. 背景

1.1 KVM

基于内核的虚拟机KVM (Kernel-Based Virtual Machine)需要两个条件:硬件支持全虚拟化、操作系统为Linux。KVM只支持对虚拟机的虚拟CPU、虚拟内存进行管理和调度;针对其他的虚拟外设,KVM需要借助另一个虚拟化项目Qemu

1.2 Libvirt

针对不同的Hypervisor(如KVMXen和其他商业虚拟化软件等),Libvirt提供了一种统一的管理方式(简单理解就是统一接口,都可以使用xml文件来创建虚机)。Libvirt是一个软件集合,包括API库、后台运行程序(Libvirtd)和命令行工具(virsh)。

2. 实践

2.1 准备一台vmware虚机

1、创建一个centos镜像为CentOS-7-x86_64-Minimal-2009.iso,2核2G的虚拟机,镜像可以到Centos官网下载http://ftp.sjtu.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

2、注意关机状态下开启虚机的虚拟化技术(不同厂商称呼不同,Intel称为Intel-VT,AMD称为AMD-V

2.2 安装KVM

1、确认虚机正常联网后,直接使用yum工具安装KVM
yum install -y qemu-kvm
2、启用kvm内核模块modprobe kvm

2.3 安装Libvirt

1、使用yum工具直接安装yum install -y libvirt
2、启动libvirtd服务,使用virsh list有正常输出结果就是安装成功了

注:如果没有开启libvirtd服务,直接使用virsh命令,一般会有如下报错:
error: failed to connect to the hypervisor error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory

2.4 准备Libvirt配置文件

前文说到virshLibvirt自带的命令行工具。通过virsh命令可以对虚拟机的CPU、内存、网络和磁盘等各种资源进行管理, 而xml配置文件就是对这些资源进行描述的

1、先来准备一个xml文件,各字段简要的含义xml中已有注释,官网:https://libvirt.org/format.html 提供了完整虚机xml文件说明

<domain type='kvm'>  //如果是Xen,则type='xen'#虚拟机整体信息<name>vm1</name> //虚拟机名称,同一物理机唯一<uuid>fd3535db-2558-43e9-b067-314f48211343</uuid>  //同一物理机唯一,可用uuidgen生成<memory>524288</memory>  //单位为KB<currentMemory>524288</currentMemory>  //memory这两个值最好设成一样<vcpu>1</vcpu> //vcpu个数#系统信息<os><type arch='x86_64'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?<boot dev='cdrom'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动;之后可以修改为'hd'<bootmenu enable='yes'/>  //表示启动按F12进入启动菜单</os>#硬件资源特性<features><acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口<apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器<pae/>   //Physical Address Extension,物理地址扩展</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> //如果是Xen则是/usr/lib/xen/binqemu-dm#硬盘配置<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/home/CentOS-7-x86_64-Minimal-2009.iso'/><target dev='hdb' bus='ide'/><readonly/><address type='drive' controller='0' bus='1' unit='0'/></disk><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/home/vm1.qcow2'/><target dev='vda' bus='virtio'/></disk>#添加网络配置,基于网桥<interface type='bridge'><source bridge='br0'/><target dev='vnet0'/><alias name='net0'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface>#配置vnc<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'><listen type='address' address='0.0.0.0'/></graphics></devices>
</domain>
  • 系统信息里的boot元素有属性dev='cdrom',意在从光驱启动,安装os。结合硬盘配置里的元素<source file='/home/CentOS-7-x86_64-Minimal-2009.iso'/>,所以我们先要将使用的.iso镜像上传到/home目录下
  • xml中共有两个disk元素,第一块是cdrom,第二块是qcow2格式的硬盘,使用cdrom安装的os最终会落到第二块qcow2的盘里,使其成为一个可启动盘。使用命令qemu-img create -f qcow2 vm1.qcow2 10G在home目录下创建vm1.qcow2,对应元素<source file='/home/vm1.qcow2'/>
  • 元素interface意在给虚机添加一个虚拟网卡,这里配置的是基于网桥的虚拟网卡。元素<source bridge='br0'/>表明该虚拟网卡落在linux网桥br0上。所以我们先使用命令brctl addbr br0添加网桥br0,然后up网桥同时给网桥添加一个地址ifup br0 && ip a add 192.16.1.10/24 dev br0(这种是临时方式,可以通过添加配置文件使网桥永久生效,建议使用配置文件的方式,实际操作时后续vnc里安装os会导致网桥ip丢失,导致vnc断链
[root@localhost home]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
[root@localhost home]#

2.5 使用xml文件开启虚拟机

1、使用virsh define纳管vm1

  • 注意步骤2.1里开启虚拟化技术,否则会报错:
    error: Failed to define domain from vm1.xml error: invalid argument: could not find capabilities for arch=x86_64 domaintype=kvm
  • xml文件中的元素<emulator>/usr/libexec/qemu-kvm</emulator>,可以使用find / -name qemu-kvm找到qemu-kvm的具体位置

2、使用命令virsh start vm1开启套娃虚拟vm1

3、通过vnc工具查看虚拟机
首先使用命令yum install -y tigervnc-1.8.0-21.el7.x86_64安装vncviewer(具体版本可以使用yum provides查看下)

4、使用virsh vncdisplay vm1查看vm1的vnc端口,此处为:0

5、使用vncviewer ip:port查看套娃虚机,可以看到进入了os安装界面(这里直接在vmware里操作可能会无法启动vnc,可以使用mobaxterm等终端工具)

这里省略了os安装的过程(就跟用这个iso镜像起vmware虚机类似),安装完成后如下图

注:如果在vmware虚机里打开vnc还是不行,可以从你的pc机上使用vnc。首先关闭vmware虚机的firewalld防火墙,然后官网下载一个vnc工具https://www.realvnc.com/en/connect/download/viewer/,安装后打开,输入ip:port即可登录vm1虚机

6 安装完成后,原来的vm1.qcow2变成了1.7G大小,后面就可以用这个可启动盘来创建虚机

2.6 使用vm1.qcow2创建vm2

1、可以先复制一份镜像cp /home/vm1.qcow2 /home/vm2.qcow2
2、修改xml文件(主要包括name、uuid、boot、disk、interface等元素)

<domain type='kvm'>  //如果是Xen,则type='xen'#虚拟机整体信息<name>vm2</name> //虚拟机名称,同一物理机唯一<uuid>fd3535gb-2558-43e9-b067-314f48211343</uuid>  //同一物理机唯一,可用uuidgen生成<memory>524288</memory>  //单位为KB<currentMemory>524288</currentMemory>  //memory这两个值最好设成一样<vcpu>1</vcpu> //vcpu个数#系统信息<os><type arch='x86_64'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?<boot dev='hd'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动<bootmenu enable='yes'/>  //表示启动按F12进入启动菜单</os>#硬件资源特性<features><acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口<apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器<pae/>   //Physical Address Extension,物理地址扩展</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> //如果是Xen则是/usr/lib/xen/binqemu-dm<disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/home/vm2.qcow2'/><target dev='vda' bus='virtio'/></disk>#添加网络配置,基于网桥<interface type='bridge'><source bridge='br0'/><target dev='vnet1'/><alias name='net1'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface>#配置vnc<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'><listen type='address' address='0.0.0.0'/></graphics></devices>
</domain>

3、启动vm2虚机

4、使用vncviewer登录vm2,可以看到os直接起来了

5、给vm2的虚拟网卡添加ip

6、从vmware虚机中ping vm2虚机,同时ssh

3. 总结

  • 一开始没有可启动盘时,将vm从光驱启动,从vnc进入虚机,开始安装,可以获得可启动盘,也就是制作了带系统的image镜像
  • 有了这个带系统的image镜像,可以多次拷贝重复利用,创建虚机时直接从硬盘启动

【云计算 | OpenStack】从零开始使用libvirt创建一个kvm虚机相关推荐

  1. 【KVM系列08】使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机

    第八章 使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 1. QEMU/KVM 迁移的概念 1.1 迁移效率的衡量 1.2 KVM 迁移的原理 1.3 使用命令行的方式做动态迁移 ...

  2. 【KVM系列06】Nova 通过 libvirt 管理 QEMU/KVM 虚机

    第六章 Nova 通过 libvirt 管理 QEMU/KVM 虚机 1. Libvirt 在 OpenStack 架构中的位置 2. Nova 中 libvirt 的使用 2.1 创建 QEMU/K ...

  3. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

    KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain] 学习 KVM 的系列文章: (1)介绍和安装 (2)CP ...

  4. KVM之Nova通过libvirt管理QEMU/KVM虚机

    学习 KVM 的系列文章:  (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接 ...

  5. KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]...

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  6. KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机

    1. QEMU/KVM 迁移的概念 迁移(migration)包括系统整体的迁移和某个工作负载的迁移.系统整理迁移,是将系统上所有软件包括操作系统完全复制到另一个物理机硬件机器上.虚拟化环境中的迁移, ...

  7. 8.使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]

    1. QEMU/KVM 迁移的概念 迁移(migration)包括系统整体的迁移和某个工作负载的迁移.系统整理迁移,是将系统上所有软件包括操作系统完全复制到另一个物理机硬件机器上.虚拟化环境中的迁移, ...

  8. 【云计算 | Openstack】KVM虚机通过dhcp自动获取地址

    环境: os:centos7 1. 背景 前文 [云计算 | OpenStack]从零开始使用libvirt创建一个kvm虚机 中的虚机使用的是基于Linux网桥的虚拟网卡,如下xml文件中的定义 # ...

  9. 远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)

    上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机.其实 virt-manager 也可以管理其他宿主机上的虚机.只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即 ...

最新文章

  1. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结
  2. extern “C”的作用详解
  3. 关于Nowpaper
  4. Android实现CoverFlow效果
  5. 让VC编译的程序链接到系统的 msvcrt.dll 的方法
  6. 掩膜区域内像素值_MRI ADC值是怎么来的?咱们来手算一下
  7. C++ 函数参数的默认值和占位参数
  8. IPC——流套接字通信
  9. 第八章应用安全工程备考要点及真题分布
  10. 中科大计算机竞赛夺冠,中科大斩获全国唯一特等奖,力压清华捧得华为毕昇杯...
  11. matlab图像大作业,MATLAB图像大作业
  12. 【CF 应用开发大赛】智能静音android应用
  13. Git (10)-- 打标签(git tag)
  14. 算法十大排序(含动图)
  15. chrome浏览器调试css
  16. [原译]Lambda高手之路第二部分
  17. mysql 递归查找父节点_MySQL递归查询父子节点
  18. 通达信 c 语言,通达信C
  19. 硬盘“AHCI”模式和“IDE”模式的区别
  20. Kotlin技术 - 委托和代理

热门文章

  1. VSFTP 显示与系统时间不相符的解决方式
  2. dota数据集标注改coco标注
  3. coco2017数据集标注格式说明
  4. Hypermesh前处理+Abaqus有限元分析
  5. 6.5 【加密和安全】- 重合指数 无线网络
  6. 分子模拟榨干GPU性能的参数建议
  7. Docker学习笔记六:Docker搭建企业级私有仓库
  8. 广联达安装电气桥架电缆布置要点
  9. WebKit:WebBrowser的架构
  10. 国家统计局一季度经济数据