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

这篇具有很好参考价值的文章主要介绍了【云计算 | OpenStack】从零开始使用libvirt创建一个kvm虚机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境:
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
libvirt创建虚拟机,云计算,云计算,openstack,linux

2、注意关机状态下开启虚机的虚拟化技术(不同厂商称呼不同,Intel称为Intel-VT,AMD称为AMD-V
libvirt创建虚拟机,云计算,云计算,openstack,linux

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有正常输出结果就是安装成功了
libvirt创建虚拟机,云计算,云计算,openstack,linux

注:如果没有开启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'/>
    libvirt创建虚拟机,云计算,云计算,openstack,linux
  • 元素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断链
    libvirt创建虚拟机,云计算,云计算,openstack,linux
[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
libvirt创建虚拟机,云计算,云计算,openstack,linux

  • 注意步骤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的具体位置
    libvirt创建虚拟机,云计算,云计算,openstack,linux

2、使用命令virsh start vm1开启套娃虚拟vm1
libvirt创建虚拟机,云计算,云计算,openstack,linux

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

4、使用virsh vncdisplay vm1查看vm1的vnc端口,此处为:0
libvirt创建虚拟机,云计算,云计算,openstack,linux

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

这里省略了os安装的过程(就跟用这个iso镜像起vmware虚机类似),安装完成后如下图
libvirt创建虚拟机,云计算,云计算,openstack,linux

注:如果在vmware虚机里打开vnc还是不行,可以从你的pc机上使用vnc。首先关闭vmware虚机的firewalld防火墙,然后官网下载一个vnc工具https://www.realvnc.com/en/connect/download/viewer/,安装后打开,输入ip:port即可登录vm1虚机
libvirt创建虚拟机,云计算,云计算,openstack,linux
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虚机
libvirt创建虚拟机,云计算,云计算,openstack,linux

4、使用vncviewer登录vm2,可以看到os直接起来了
libvirt创建虚拟机,云计算,云计算,openstack,linux

5、给vm2的虚拟网卡添加ip
libvirt创建虚拟机,云计算,云计算,openstack,linux

6、从vmware虚机中ping vm2虚机,同时ssh
libvirt创建虚拟机,云计算,云计算,openstack,linux文章来源地址https://www.toymoban.com/news/detail-781437.html

3. 总结

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

到了这里,关于【云计算 | OpenStack】从零开始使用libvirt创建一个kvm虚机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

    由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的。 本篇教程给新人用于学习游戏服务器的基本知识,给新人们一些学习方向,有什么错误的地方欢迎各位同行进行讨论。 本篇教程预计使用Java+Redis+Mongo 本着先完成再完美的原则,从最简单的

    2024年02月10日
    浏览(42)
  • 从零开始创建一个vue3+vite项目并集成element-plus、eslint以及prettier

    项目git地址, 欢迎修改提交,不足地方还请补充批评指正! 项目git地址 ESLint 是一个用于识别和报告在 ECMAScript/JavaScript 代码中发现的模式的工具,其目标是使代码更加一致并避免错误。 ESLint 是完全插件化的。每条规则都是一个插件,你可以在运行时添加更多。你还可以添

    2024年04月09日
    浏览(52)
  • Re.从零开始--基于UbuntuServer 20.04-OpenStack平台搭建_

    前言: 本文档基于ubuntu-server20.04版本和OpenStack Victoria搭建openstack环境 部署最小化Ubuntu-openstack满足基本服务;本文档均采用手动环境搭建 ubuntu源指定为阿里源,故搭环境需连接外网; ens33 ens34 节点名称 Ubuntu-controller 192.168.100.10 192.168.200.10 controller Ubuntu-compute 192.168.100.20 192.

    2024年01月20日
    浏览(38)
  • 云计算(五)—— OpenStack基础环境配置与API使用,使用cURL命令获取实例列表,理解OpenStack的身份认证和API请求流程。使用openstack命令创建Fedora虚拟机实例

    使用cURL命令获取实例列表 理解OpenStack的身份认证和API请求流程。 (1)复习OpenStack的认证与API请求流程的相关内容。 (2)熟悉cURL命令基本用法。 参照任务二中任务实现进行操作。 若demo用户已修改密码,则需要先把/root/keystonerc_demo文件中的password修改为你修改的密码 。 (

    2024年04月26日
    浏览(79)
  • 如何从零开始创建React应用:简易指南

    🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 🤖 洛可可白 :个人主页 🔥 个人专栏 :✅前端技术 ✅后端技术 🏠 个人

    2024年04月22日
    浏览(58)
  • Rust图形界面:从零开始创建eGUi项目

    egui系列:初步 首先,用cargo创建一个新项目,并添加eframe 尽管默认创建的项目只实现了输出Hello world功能,但添加了eframe库,所以下载需要一点时间。 创建成功后,直接把下面的代码写入main.rs文件中,这些代码来自egui的hello_world示例。 然后运行cargo run,结果如下所示 在e

    2024年02月01日
    浏览(47)
  • VitePress-01-从零开始的项目创建(npm版)

    本文介绍一下 VitePress 的项目创建的步骤。 主要用到的命令工具是 npm 。 本文的操作步骤是 从无到有 的创建一个完整的基本的【VitePress】项目。 根据官方文档的介绍,截止本文发稿时,需要使用 node.js 18+ 的版本。 可以使用 node -v 的命令查看版本。 如果不满足要求的,可以

    2024年01月20日
    浏览(32)
  • 如何从零开始开发一个小程序

    申请账号 小程序注册页 开发设置 登录 小程序后台 ,我们可以点击左侧菜单 “开发”-“开发管理”,点击后正文上方点击 “开发设置” ,就看到小程序的 AppID(小程序ID) 了 。 小程序的 AppID 相当于小程序平台的一个身份证,后续你会在很多地方要用到 AppID (注意这里要区别

    2024年02月10日
    浏览(45)
  • 从零开始实现一个RPC框架(五)

    这是系列最后一篇文章了,最后我们来为我们的rpc框架实现一个http gateway。这个功能实际上受到了rpcx的启发,基于这种方式实现一个简单的类似service mesh中的sidecar。 http gateway可以接收来自客户端的http请求并将其转换为rpc请求然后交给服务端处理,再将服务端处理过后的结果

    2024年04月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包