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虚拟平台搭建使用 的相关文章

  • kvm虚拟化_KVM 虚拟化环境搭建 - WebVirtMgr

    前文 KVM 虚拟化环境搭建 ProxmoxVE 已经给大家介绍了开箱即用的 PVE 系统 xff0c PVE 是方便 xff0c 但还是有几点问题 xff1a 第一 xff1a 始终是商用软件 xff0c 虽然可以免费用 xff0c 但未
  • 虚拟化(KVM)

    虚拟化介绍 VMware Workstation就是虚拟化 虚拟化简单讲 xff0c 就是把一台物理计算机虚拟成多台逻辑计算机 xff0c 每个逻辑计算机里面可以运行不同的操作系统 xff0c 相互不受影响 xff0c 这样就可以充分利用硬
  • kvm故障-虚拟机通过镜像创建虚后无法加载eth0网卡,显示网卡为ens3

    虚拟机通过镜像创建虚后无法加载eth0网卡 显示网卡为ens3 一 首先创建eth0网卡文件配置好 cd etc sysconfig network scripts TYPE Ethernet PROXY METHOD none BROWS
  • kvm常见故障及解决

    一 启动虚拟机Connection reset by peer virsh start vmhost1error Failed to start domain vmhost1error Unable to read from monitor
  • QEMU-KVM基本操作

    本文主要介绍KVM虚拟机的一些基本实践操作 对KVM虚拟机的管理操作主要是基于libvirt的命令行工具virsh进行的 一 安装与启动 1 KVM模块检查 1 查看当前Linux系统核心是否包含KVM模块 Linux内核2 6 20及以上
  • CentOS 7 virt-install 命令行方式(非图形界面)安装KVM虚拟机

    环境及网卡配置请参考 https blog csdn net mshxuyi article details 98305715 创建镜像目录 mkdir p home vms virt install 配置文件 virt install n
  • kvm qemu内幕介绍

    kvm qemu内幕介绍 标签 虚拟化io数据结构linux内核优化磁盘 2012 09 14 11 10 6923人阅读 评论 4 收藏 举报 分类 linux 56 版权声明 本文为博主原创文章 未经博主允许不得转载 目录 1 硬件虚拟
  • Linux上启用kvm嵌套虚拟化功能

    kvm支持嵌套虚拟化 即可以在虚拟机中创建虚拟机 本文主要介绍如何在使用Intel处理器的CentOS7中开启KVM的嵌套虚拟化功能 kvm主要是通过内核模块来实现的 因此我们查看系统是否开启了kvm嵌套虚拟化 只需要 cat sys mo
  • 关于对cpu的理解和kvm虚拟机到物理cpu的绑定

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

    文章目录 33 KVM管理设备 配置虚拟机PCIe控制器 33 1 概述 33 2 配置PCIe Root PCIe Root Port和PCIe PCI Bridge 33 2 1 简化配置方法 33 2 1完整配制方法 33 KVM管理
  • 详解KVM虚拟化原理

    详解KVM虚拟化原理 KVM架构 KVM Kernel based Virtual Machine 包含一个为处理器提供底层虚拟化 可加载的核心 模块kvm ko kvm intel ko或kvm amd ko 使用QEMU QEMU KV
  • KVM无法进入virt-manager,提示Unable to init server: Could not connect: Connection refused

    1 KVM virt manager不能以root用户进入 需切换成普通用户或者sudo用户 2 需要配置ssh 密钥 3 需要安装Xming或者Xmanager等KVM可用等图形界面软件 无法连接kvm 设置用户到组 一定要当前用户不要r
  • ovirt-node和ovirt-engine相连遇到的问题解决办法

    1 Host 192 168 70 7 does not comply with the cluster Default emulated machines The Hosts emulated machines are
  • 云安全技术——kvm虚拟化技术

    目录 10 1 kvm简介 10 2 在CentOS 7 图形化界面下安装KVM 使用IDEA开发读写MySQL数据库程序 实验目的 了解 CentOS7图形化界面的部署方法 了解 KVM的组成和作用 了解 KVM的技术架构 了解KVM的安
  • kvm之多网卡队列开启设置

    背景 目前基于dpdk数据平面开发套件的应用越来越多 而dpdk对于上层应用运行时 服务的进程数多于1时 要求网卡支持多队列 否则项nginx这种多进程应用程序只能再默认配置下运行 只能启动一个worker 要求 在kvm虚机中将网卡设置支
  • KVM热迁移

    KVM热迁移 介绍 KVM热迁移的前提是拥有共享存储 以下通过NFS实现KVM热迁移 迁移过程 将一处于运行状态的KVM虚拟机从节点kvm 01迁移到kvm 02后继续运行 准备 主机准备 hostname IP地址 系统 配置 kvm 0
  • 当 KVM-QEMU 打开时,Intel-PT 不记录任何数据包

    我尝试在主机上使用 Intel PT 同时在客户机上运行通用软件程序 所以我期望主机中运行的 Intel PT 将记录所有相关数据包 如 PIP FUP TSC 等 以及所有基于 VM 的数据包 如 VMCS 我使用以下命令 perf kv
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • update-alternatives:错误:arptables 的替代 /usr/sbin/arptables-legacy 未注册;不设置

    我在 Buster 主机上有 Debian 10 Buster KVM 来宾计算机 尝试切换到旧版iptables在以下虚拟机上Debian 维基 https wiki debian org iptables update alternat
  • qemu kvm:如何获取性能监控中断?

    我在操作系统内核中编写了一些函数 以便在指令计数器溢出时发出性能监控中断 PMI 它在我的机器 Intel core i5 上运行良好 但是当我使用 qemu 在 qemu 上运行它时 qemu system x86 64 enable k

随机推荐

  • 安装 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提供的虚拟化平台