KVM虚拟平台搭建使用

2023-05-16

一、KVM虚拟化介绍

KVM 全称 kernel-based virtual machine,由Qumranet公司发起,2008年被RedHat收购。
KVM实现主要基于Intel-V或者AMD-V提供的虚拟化平台,利用普通的Linux进程运行于虚拟态的指令集,模拟虚拟机监视器和CPU。KVM不提供硬件虚拟化操作,其IO操作等都借助QEMU来完成。

image_1apkng413147jg181jlq1j3kjhsm.png-16.4kB

KVM有如下特点:

  • guest作为一个普通进程运行于宿主机
  • guest的CPU(vCPU)作为进程的线程存在,并受到宿主机内核的调度
  • guest继承了宿主机内核的一些属性,比如huge pages(大页表)
  • guest的磁盘IO和网络IO会受到宿主机的设置的影响
  • guest通过宿主机上的虚拟网桥与外部相连

KVM整体架构

image_1apknjokv7q91f5cif312h6jpu13.png-122.4kB

每一个虚拟机(guest)在Host上都被模拟为一个QEMU进程,即emulation进程。
我们创建一个虚拟机后,用普通的ps 命令就可以查看到。

➜  ~ virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     kvm-01                         running ➜ ~ ps aux | grep qemu libvirt+ 20308 15.1 7.5 5023928 595884 ? Sl 17:29 0:10 /usr/bin/qemu-system-x86_64 -name kvm-01 -S -machine pc-i440fx-wily,accel=kvm,usb=off -m 2048 -realtime mlock=off -smp 2 qemu ....

可以看到,此虚拟机就是一个普通的Linux进程,他有自己的pid。并且有四个线程,线程数量不是固定的,但是至少会有三个(vCPU,IO,Signal)。其中有两个是vCPU线程,有一个IO线程还有一个信号处理线程。

➜  ~ pstree -p 20308
qemu-system-x86(20308)-+-{qemu-system-x86}(20353) |-{qemu-system-x86}(20408) |-{qemu-system-x86}(20409) |-{qemu-system-x86}(20412) 

虚拟CPU

guest的所有用户级别(user)的指令集,都会直接由宿主机线程执行,此线程会调用KVM的ioctl方式提供的接口加载guest的指令并在特殊的CPU模式下运行,不需要经过CPU指令集的软件模拟转换,大大的减少了虚拟化成本,这也是KVM优于其他虚拟化方式的点之一。

KVM向外提供了一个虚拟设备/dev/kvm,通过ioctl(IO设备带外管理接口)来对KVM进行操作,包括虚拟机的初始化,分配内存,指令加载等等。

虚拟IO设备

guest作为一个进程存在,当然他的内核的所有驱动等都存在,只是硬件被QEMU所模拟(后面介绍virtio的时候特殊)。guest的所有硬件操作都会有QEMU来接管,QEMU负责与真实的宿主机硬件打交道。

虚拟内存

guest的内存在host上由emulator提供,对emulator来说,guest访问的内存就是他的虚拟地址空间,guest上需要经过一次虚拟地址到物理地址的转换,转换到guest的物理地址其实也就是emulator的虚拟地址,emulator再次经过一次转换,转换为host的物理地址。后面会有介绍各种虚拟化的优化手段,这里只是做一个overview。

二、KVM安装

1.安装centos7服务器

点击完成,后开始安装

2.虚机开启虚拟化引擎配置

3.开启网卡ONBOOT,并重启网卡

4.查看CPU是否支持虚拟化


grep -E --color=auto "(vmx|svm)" /proc/cpuinfo  

5.安装KVM

virtualization             #提供虚拟机的环境,主要包含qemu-kvm

virtualization-client      #管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer

virtualization-platform    #提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client

virtualization-tools       #管理离线虚拟机镜像的工具,主要有libguestfs

gnome-desktop         #安装图形管理界面

yum -y group install gnome-desktop virtualization-tools virtualization-platform virtualization-client virtualization      #yum安装包组

6.KVM远程管理


[root@localhost ~]# which virsh      #查看虚拟机管理命令
/usr/bin/virsh
[root@localhost ~]# virsh list --all    #查看所有虚拟机
 Id    名称                         状态
----------------------------------------------------

7.使用qemu-kvm管理虚拟机

参数简介

CPU、Memory、SMP、NUMA


-cpu cpu     #select CPU (-cpu ? for list)
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
-m megs      #set vRAM size to megs MB [default=128]
-numa node[,mem=size][,cpus=cpu][,nodeid=node]

Storage Device


-drive option[,option[,option[,...]]]    #定义一个存储设备
子选项介绍:
 id=name                         #定义硬盘设备名称
 file=/path/to/somefile                #硬件映像文件路径
 if=interface_type                  #指定硬盘设备所连接的接口类型(控制器类型), 如ide, scsi, virio等
 index=i                         #设定同一种控制器类型中不同设备的索引号
 media=disk|cdrom                   #定义介质类型为硬盘(disk)还是光盘(cdrom)
 snapshot=on|off                    #指定当前硬盘设备是否支持快照功能
 cache=writethrough|writeback|none|unsafe    #定义如何使用物理机缓存来访问块数据
 format=format                    #指定映像文件的格式, 具体格式可参见qemu-img命令  

Display options  #显示选项用于定义虚拟机启动后的显示接口相关类型及属性等


-nographic                     #默认情况下, qemu使用SDL来显示VGA输出; 而此选项用于禁止图形接口, 此时, qemu类似一个简单的命令行程序, 其仿真串口被将被重定向到控制台
-curses                        #禁止图形接口, 并使用curses/ncurses作为交互接口
-alt-grab                      #使用Ctrl+Alt+shift组合键释放鼠标
-ctrl-grab                     #使用右Ctrl键释放鼠标
-sdl                          #启用SDL
-spice option[,option[,...]]           #启用spice远程桌面协议, 具体请参照qemu-kvm帮助手册
-vga [std|cirrus|vmware|qxl|xenfb|none]     #指定要仿真的VGA接口类型
-vnc display                  #默认情况下, qemu使用SDL显示VGA输出; 使用该选项, 可以让qemu监听在VNC上, 并将VGA输出重定向至VNC会话; 使用此选项, 必须使用-k选项指定键盘布局类型  

Network options  #简单介绍几种,更多可参考官方手册


NIC
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
# 创建一个新的网卡设备并连接至vlan n中;
# pc架构上默认的nic为e1000, macaddr用于为其指定MAC地址
# 使用"qemu-kvm -net nic,model=?"来获取当前平台支持的类型
# name用于指定一个在监控时显示的网卡设备名称


TAP
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][downscript=dfile]
#通过物理机的tap网络接口连接至vlan n中, 
#使用script=file指定脚本(默认为/etc/qemu-ifup)来配置当前网络接口
#使用downscript=dfile指定脚本(默认为/etc/qemu-ifdown)来撤销接口配置
#使用script=no和downscript=no可分别用来禁止执行脚本


USER
-net user[,option][,option][,...]    #在用户模式配置网络栈, 其不依赖于管理权限
子选项介绍:
 vlan=n                   #连接之vlan n, 默认n=0
 name=str                  #指定接口的显示名称, 常用于监控模式中
 net=addr[/mask]               #设定GuestOS可见的IP网络, 默认为192.168.1.0/24
 host=addr                  #指定GuestOS中看到的Host的IP地址, 默认为指定网络中的第二个, 即x.x.x.x
 dhcpstart=addr              #指定DHCP服务器地址池中16个地址的起始IP, 默认为第16个至第31个, 即x.x.x.x ~ x.x.x.x
 dns=addr                   #指定GuestOS可见的dns服务器地址, 默认为GuestOS网络中第三个地址, 即x.x.x.x

 

7.1 安装qemu-kvm


yum -y install qemu-kvm  

7.2 查看文件位置


rpm -ql qemu-kvm | grep qemu-kvm | head -2  

7.3 创建软连接到/usr/bin目录下


ln -s /usr/libexec/qemu-kvm /usr/bin  

 7.4 安装centos6.10虚机


qemu-kvm -m 128 -smp 1 -name "test" -hda /kvm/images/CentOS-6.10.iso            #内存128M  CPU 1块   

若此步报错,应该是主机未开启虚拟化,在bios中配置虚拟化即可

7.5 安装VNC客户端


yum -y install tigervnc  

7.6 切换图形管理界面连接VNC


startx &
#打开终端命令台
vncviewer :5900  

8.virt-install创建虚拟机并安装

8.1 创建磁盘


qemu-img create -f qcow2 /kvm/images/CentOS-6.10.qcow2 5G   #建一个格式为qcow2的磁盘  

8.2 安装系统


virt-install \
--name=centos6 \
--disk path=/kvm/images/CentOS-6.10.qcow2 \
--vcpus=1 --ram=1024 \
--cdrom=/kvm/images/CentOS-6.10.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--os-type=linux \
--os-variant=rhel6  

切换至图形界面可看到如下图

 

转载于:https://www.cnblogs.com/Huang-Niu/p/11376968.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KVM虚拟平台搭建使用 的相关文章

  • Centos7搭建KVM虚拟化环境

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 1 查看系统版本 root 64 openstack cat etc centos release CentOS Linux releas
  • 服务器配置虚拟kvm功能,服务器 配置虚拟kvm功能

    服务器 配置虚拟kvm功能 内容精选 换一换 使用外部镜像文件创建私有镜像时 xff0c 以上相关步骤操作需要在虚拟机内部完成 xff0c 强烈建议您在原平台的虚拟机实施修改后 xff0c 再导出镜像 使用Windows外部镜像文件创建私有
  • kvm的快照功能 (二、基于libvirt的快照)

    实例二 利用libvirt使用快照 virsh snapshot create domain name 一 创建虚机快照 名字自动生成 可在开机 关机 suspend等各种状态下做 virsh snapshot create test Do
  • linux编译安装kvm、qemu

    kvm作为主流虚拟化产品 其实它的用户层使用的是qemu 所以要安装使用kvm 一般需要安装kvm kmod以及qemu两部分 安装kvm kmod 1 首先下载kvm kmod源码并解压 2 进入源码目录 3 configure kern
  • Linux上启用kvm嵌套虚拟化功能

    kvm支持嵌套虚拟化 即可以在虚拟机中创建虚拟机 本文主要介绍如何在使用Intel处理器的CentOS7中开启KVM的嵌套虚拟化功能 kvm主要是通过内核模块来实现的 因此我们查看系统是否开启了kvm嵌套虚拟化 只需要 cat sys mo
  • 23 KVM管理虚拟机-使用VNC密码登录虚拟机

    文章目录 23 KVM管理虚拟机 使用VNC密码登录虚拟机 23 1 概述 23 2 前提条件 23 3 操作步骤 23 KVM管理虚拟机 使用VNC密码登录虚拟机 本章介绍使用VNC密码登录虚拟机的方法 23 1 概述 当虚拟机操作系统安
  • 关于对cpu的理解和kvm虚拟机到物理cpu的绑定

    这段时间一直在想 云计算除了虚拟化之外 还应该有其它的东西 那就是优化 因为我们虚拟出来资源之后怎么用 怎么划分 是并行也好 是租给用户使用也好 都要实现资源调度和使用的最优化 嗯 这是这段时间关于云计算的想法 下面分享一下最近两天做的一些
  • KVM——迁移KVM虚拟机

    一 KVM虚拟机迁移的方式 KVM平台中的KVM虚拟机迁移分为以下两种 1 冷迁移 静态迁移 我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘 进行冷迁移时 只要在目标主机上挂载这个nfs文件系统 就可以看到要迁移的那个虚拟机的磁
  • KVM-6、virsh 命令及功能详解

    1 虚拟机管理操作 attach device 从XML文件附加设备 attach disk 附加磁盘设备 attach interface 连接网络接口 autostart 自动启动一个域 blkdeviotune 设置或查询块设备I O
  • Linux 桌面虚拟化技术 KVM

    KVM 是 Kernel based Virtual Machine 的简称 是一个开源的系统虚拟化模块 自Linux 2 6 20之后集成在Linux的各个主要发行版本中 它使用Linux自身的调度器进行管理 所以相对于Xen 其核心源码
  • 59 KVM Skylark虚拟机混部-概述、架构及特性

    文章目录 59 KVM Skylark虚拟机混部 概述 架构及特性 59 1 Skylark概述 59 1 1 问题背景 59 1 2 总体介绍 59 2 架构及特性 59 2 1 总体实现框架 59 2 2 功耗干扰控制 59 2 3 L
  • 使用VMware完成KVM虚拟化实验并运行Centos

    本次实验在VMware中的Ubuntu18内安装KVM并运行centos 首先 在VMware下开启虚拟化 更新软件索引 apt get update 安装依赖 apt get install qemu kvm qemu virt mana
  • 29 KVM管理系统资源-调整虚拟CPU绑定关系

    文章目录 29 KVM管理系统资源 调整虚拟CPU绑定关系 29 1 概述 29 2 操作步骤 29 KVM管理系统资源 调整虚拟CPU绑定关系 29 1 概述 把虚拟机的vCPU绑定在物理CPU上 即vCPU只在绑定的物理CPU上调度 在
  • qemu-guest-agent windows下的监控开发

    windows下的qemu guest agent 简称qga 的名字叫做qemu guest agent win32 目前最新版的版本号是qemu guest agent win32 0 12 1 2 2 355 el6 4 9 x86
  • KVM源代码分析1:基本工作原理

    http www oenhan com kvm src 1 13年的时候准备挖 KVM源代码分析 的坑 陆陆续续2年过去了 坑也没有填上 当时是因为对KVM了解的肤浅 真正的理解必然要深入到代码级别 所谓 摈弃皮毛 看到血肉 看到真相 当时
  • 是否可以在 Azure 上运行 KVM

    Azure Fabric 似乎运行在 Hyper V 的定制版本上 是否可以在 Azure 上运行 KVM 虚拟化实例 使用嵌套虚拟化 我有一个基于 Debian 的自定义 VHD 比如说 根据本文档https learn microsof
  • Android模拟器和virtualbox不能同时运行

    每当我运行 Virtualbox 时 我都无法启动 Android 模拟器映像 反之亦然 AVD管理器中的错误消息是 ioctl KVM CREATE VM failed Device or resource busy ko failed
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • Android 模拟器和 OpenGL ES3:EGL_BAD_CONFIG

    我正在运行一个Android 虚拟设备 https developer android com studio run managing avds html在我的 Ubuntu 主机上 它使用 CPU ABI Intel Atom x86 我
  • Qemu-KVM:将访客物理地址转换为主机虚拟/主机物理地址

    我正在做一个需要翻译的项目qemu guest物理地址到主机虚拟 物理地址 我正在使用 VMI 虚拟机自省 来自省 qemu 进程 KVM VM 并读取存储在 virtio 环缓冲区描述符中的来宾物理地址 因此 我正在寻找一种简单的方法来将

随机推荐

  • 安装 protoc 的各种坑

    首先下载 protoc 2 6 1 https github com google protobuf releases download v2 6 1 protobuf 2 6 1 tar gz https pkgs org downloa
  • 在mysql中创建视图需要使用什么语句_mysql如何创建视图?创建语句是什么?

    在mysql中 xff0c 可以使用 CREATE VIEW 语句来创建视图 xff0c 语法格式为 CREATE VIEW AS xff1b 其中 不能包含FROM子句中的子查询 xff0c 不能引用预处理语句参数 推荐教程 xff1a
  • 正则表达式学习

    1 正则表达式规则 1 1 普通字符 字母 数字 汉字 下划线 以及后边章节中没有特殊定义的标点符号 xff0c 都是 34 普通字符 34 表达式中的普通字符 xff0c 在匹配一个 字符串的时候 xff0c 匹配与之相同的一个字符 举例
  • 在Windows、Mac和 Linux系统中安装Python与 PyCharm

    工欲善其事 必先利其器 xff0c 本文介绍 Python环境的安装和 Python的集成开发环境 IDE PyCharn的安装 一 Python安装 Windows Mac和 Linux 当前主流的 Python版本为2x和3x 由于 P
  • Linux入门-安装篇(Debian 服务器版)

    本文描述了安装一个Linux xff08 Debian xff09 服务器的全过程 xff0c 并附加了一些必要的参考文章 xff0c 通篇以Debian为基础 xff0c 以建立一个服务器 xff08 非桌面环境 xff09 为主要目的
  • MongoDB——写出错机制

    写出错机制 MongoDB的写操作命令默认是没有任何出错返回值的 xff0c 这减少了写操作的等待时间 xff0c 也就是说 xff0c 不管有没有写入到磁盘或者有没有遇到错误 xff0c 它都不会报错 这在大量插 入类似GPS定位坐标信息
  • git入门1

    2016 04 23 19 25 02 参考 xff1a http blog jobbole com 78960 Git bash中运行git log之后怎样终止这个命令 xff0c 按q 再按回车键 清屏 clear 查询用户名 git
  • mysql查看库表的大小_MySQL查看数据库大小和表大小的方法

    MySQL查看数据库大小和表大小的方法 其实很简单 xff0c 就不多说了 xff0c 基本上看得懂代码都明白 查看MySQL数据库大小 SELECT table schema Database Name sum data length 4
  • 按键控制led灯亮灭c语言实验报告,嵌入式STM32学习笔记之按键查询方式控制led灯的亮灭...

    其实接触STM32已经快半年了 xff0c 端断续续的也学习了一下的STM32的各个模块的基本功能 xff0c 刚开始的时候也是看比人的写的代码 xff0c 看懂了然后再去修改 xff0c 能够在自己的平台上实现基本的功能 xff0c 也就
  • iOS 开发比较实用的框架总结(上)

    iOS开发比较实用的框架总结 下拉刷新类型的框架 EGOTableViewPullRefresh https github com enormego EGOTableViewPullRefresh 最早的下拉刷新控件 SVPullToRef
  • Linux使用远程X Server显示图形

    背景 通常我们不希望在服务器上安装图形界面 xff0c 但有时候有些程序需要图形界面 xff0c 比如安装oracle的时候 此时 xff0c 可以配置让Linux使用远程的X Server进行图形界面显示 首先要明确的是Linux X W
  • Linux socket-编程入门(TCP server 端)

    原文完整内容 通常 xff0c socket编程总是Client Server形式的 xff0c 因为有了telnet xff0c 先不考虑client的程序 xff0c 先写一个支持TCP协议的server端 xff0c 然后用telne
  • Anaconda 安装和使用

    最近看了些关于数据分析的书 xff0c 想系统的整理下相关知识 xff0c 算是学习笔记吧 xff0c 也希望能帮到初学者 1 Anaconda介绍 安装python的方法有很多种 xff0c 数据分析方面比较常用Anaconda Anac
  • PTN设备中为什么不支持PHP,ptn和otn的区别是什么

    区别 xff1a OTN是光传输网 xff0c 是从传统的波分技术演进而来 xff0c 主要加入了智能光交换功能 xff0c 可以通过数据配置实现光交叉而不用人为跳纤 xff1b 而PTN是分组传输网 xff0c 是传送网与数据网融合的产物
  • UITableViewController的使用

    如果整个程序界面都只是使用UITableView来搭建 xff0c 一般需要如下步骤 xff1a xff08 1 xff09 向界面上拖一个UITableView xff08 2 xff09 设置数据源 xff08 3 xff09 设置代理
  • MongoDB——explain()和hint()

    explain explain 能够提供大量与查询相关的信息 对于速度比较慢的查询来说 xff0c 这是最重要的诊断工具之一 通过查看一个查询的explain 输出信息 xff0c 可以知道查询使用了哪个索引 xff0c 以及是如何使用的
  • s3c2440之点亮led

    原理是操作led 与 CPU 相连管脚的GPIO xff0c 具体操作哪个GPIO xff0c 需要查看原理图 将对应GPIO配置为输出模式 xff0c 并设置GPIO的对应位为低电平即可点亮led xff0c 相反 xff0c 设置对应位
  • ffmpeg中avframe的YUV格式数据到OpenCV中Mat的BGR格式转换

    ffmpeg实现音视频编解码是非常常用的工具 xff0c 视频解码出来的raw数据是yuv格式 xff0c 用来进行后续的图像处理一般是RGB格式的 所以需要从yuv到rgb或者bgr的转换 xff0c ffmpeg提供了相应的转换API函
  • chrome cookie存在什么地方_谷歌浏览器产生的cookie缓存怎么查看呢?Cookie的具体内容在哪里...

    软件安装 xff1a 谷歌浏览器 装机大全致力于收录最值得您拥有的精品应用 第一时间武装您的电脑变身电脑达人 我们将为您奉上 更贴心的分类方式 无论您喜欢音乐 视频 还是热衷教程 资讯 精准的分类方便您在装机大全中快速找到需要的应用 更简洁
  • KVM虚拟平台搭建使用

    一 KVM虚拟化介绍 KVM 全称 kernel based virtual machine xff0c 由Qumranet公司发起 xff0c 2008年被RedHat收购 KVM实现主要基于Intel V或者AMD V提供的虚拟化平台