虚拟化逻辑架构: 创建KVM中的VM与实现VNC远程登录

目录

一、理论

1.virsh工具常用基础使用

2.qemu-kvm工具常用基础使用

3.KVM核心基础功能

二、实验

1.安装KVM环境管理工具并创建VM(虚拟机)

2.Windows使用VNC Viewer连接KVM中的VM(虚拟机)

三、问题

1.如何下载安装VNC Viewer

2.如何使用命令行创建及删除第2台虚拟机vm02(先创建存储方式)

3.如何使用命令行创建及删除第3台虚拟机vm03(不创建存储方式)

4.virt-install安装过程报错

5.如何使用命令行创建及删除CentOS 7 minimal虚拟机

6.virsh list为何查看不到qemu-kvm创建的虚拟机

7.如何查看KVM进程及端口号


一、理论

1.virsh工具常用基础使用

(1)虚拟机列表查看

1)Linux Shell模式
# virsh list
# virsh list --all
# virsh list --inactive

2) virsh模式
# virsh
# list
# exit

(2)开启

# virsh start vm01

(3)关闭

# virsh shutdown vm01

(4)重启

# virsh reboot vm01

(5)强制关闭

# virsh destroy vm01

(6)强制重启

# virsh reset vm01

(7)查看UUID

# virsh domuuid vm01

(8)暂停

# virsh suspend vm01

(9)恢复

# virsh resume vm01

(10) 删除

# virsh undefine vm01

2.qemu-kvm工具常用基础使用

(1)基于指定镜像创建(VNC端口号默认从5900开始加1)

qemu-kvm /root/Desktop/TinyCore-11.0.iso -m 128 -smp 1 -vnc    :1

(2)基于指定TinyCore镜像创建同时指定虚拟机名称

qemu-kvm /root/Desktop/TinyCore-11.0.iso -m 128 -smp 1 -vnc    :1 -name vm02

(3)创建10G虚拟机磁盘文件

qemu-img create -f qcow2  /var/lib/libvirt/images/vm02.qcow2 10G

(4)创建CentOS 7 minimal虚拟机

qemu-kvm -name vm02 /root/Desktop/CentOS-7-x86_64-Minimal-1708.iso -m 1024 -smp 1 -vnc  :12 -drive file=/var/lib/libvirt/images/vm02.qcow2,if=ide 

3.KVM核心基础功能

(1)KVM虚拟机配置XML文件

#每个KVM虚拟机创建完毕后需要生成对应的2个文件:
1)配置文件
虚拟机元数据XML格式记录,可以被libvirt调用,对KVM虚拟机开机加载配置文件
virt-manager (创建虚拟机vm01,默认情况下产生配置文件vm01.xml):
    /run/libvirt/qemu/vm01.xml   (运行中的虚拟机配置文件,已经被libvirtd加载,qemu-kvm)
    /etc/libvirt/qemu/vm01.xml   (持久化存储配置文件,虚拟机元数据,虚拟机配置在此文件记录)
virt-install
    /run/libvirt/qemu/vm02.xml   
    /etc/libvirt/qemu/vm02.xml   
qemu-kvm (不产生元数据)

2)磁盘文件
(文件系统+文件映射) Qcow(img) / Qcow2 (KVM存储管理)
qemu-img指定创建磁盘文件路径:
virt-manager(默认路径) =/var/lib/libvirt/images/vm01.qcow2
virt-install --disk path=/var/lib/libvirt/images

(2)KVM虚拟机配置XML文件内容

1)格式
<domain type='vkm'>
    <name>vm01</name>
    ……

2)修改(生产环境建议使用此方式)
# virsh edit vm01

3)重启服务
systemctl restart libvirtd.service

重要参数:

1)虚拟机域信息(虚拟元数据最高级别)
<domain type='vkm'>
    所有信息
</domain>

2)名字UUID
<name>vm01</name>
<UUID>……</UUID>

3)内存信息
<memory unit='KiB'>……</memory>
<currentmemory unit='KiB'>……</currentmemory>

4)vCPU核心数量
<vcpu placement='static'>1</vcpu>

5)os操作系统
<os>
    <type arch='x86_64' machine='……'>hvm</type>
    <boot dev='hd'/>
</os>

6)CPU模式
<cpu mode='custom' match='exact' check='partial'>
</cpu>

7)设备驱动类型
<devices>
    <emulator>/usr/libexec/quem-kvm</emulator>
</devices>

8)磁盘
<disk type=' file' device='disk'>
    <driver name='qemu' type='qcow2' />
    <source file='/var/lib/libvirt/images/vm01.qcow2' />
    <target dev='vda' bus='virtio' />
    <address type= 'pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' />
</disk>

9)光驱
<disk type=' file' device='cdrom'>
    <driver name= 'qemu' type='raw'/>
    <target dev='hda' bus='ide'/>
    <readonly/>
    <boot order='1'/>
    <address type= 'drive' controller='0' bus='0' target='o' unit='0'/>
</disk>

10)网卡
<interface type= 'network'>
    <mac address='……'/>
    <source network= 'default'/>
    <model type='virtio'/>
    <address type= 'pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' />
</interface>

11)图形信息(VNC)
<graphics type='vnc' port='5914' autoport='no' listen='0.0.0.0'>
    <listen type= 'address' address='0.0.0.0' /> 
</graphics>

12)显示信息cirrus 16M 虚拟显示卡
<video>
    <model type='cirrus' vram= '16384' heads='1' primary= 'yes'/>
    <address type='pci' domain='0x000O' bus='0x00' slot='0x02' function='0x0'/>
</video>

(3)KVM虚拟机CPU模式配置

KVM虚拟机支持三种CPU mode:

①   host-passthrough:

#特点: CPU指令集硬直通
libvirt令KVM 把宿主机的CPU指令集全部透传给虚拟机。因此虚拟机能够最大限度的使用宿主机CPU指令集,故性能是最好的。但是在热迁移时,它要求目的节点的CPU和源节点的一致。

#启动参数
--cpu host-passthrough

#配置参数
<cpu mode='host-passthrough'check='none'>
<topology sockets='4' cores='l' threads='1'/>
</cpu>

#启动测试
cp /var/1ib/1ibvirt/images/centos7-minimal-template.qcow2  /var/lib/libvirt/ images/centos7-minimal-host01.qcow2

#安装
virt-install
--boot hd \
--os-type=linux 
--os-vari ant=fedora18
--cpu host-passthrough \
--vcpus=1 --ram=2048
--disk=/var/lib/libvirt/images/centos7-minimal-host01.qcow2
--name=vm01
--network network=default

② host-model 

#特点
libvirt根据当前宿主机CPU指令集从配置文件/usr/ share/libvirt/cpu map.xml选择一种最相配的CPU型号。在这种mode下,虚拟机的指令集往往比宿主机少,性能相对host- passthrough 要差一 点,但是热迁移时,它允许目的节点CPU 和源节点的存在定的差异。
Libvirt对CPU提炼出标准的几种类型,在/usr/share/libvirt/cpumap.xm1中可以查到。


#启动参数
--cpu host

#配置参数
<cpu mode='host-model' check='partial'>
<model fallback='allow' />
</cpu>

#启动测试
cp /var/lib/libvirt/images/centos7-minimal-template.qcow2 /var/1ib/ibvirt/images/centos7-
minimal-host02.qcow2

#安装
virt-install \
--boot hd \
--os-type=linux \
--os-variant=fedora18 \
--Cpu host\
--vcpus=1 --ram=2048 \
--disk=/var/ib/libvirt/images/centos7-minimal-host02.qcow2 \
--name=vm02 \
--network network=default

③ custom

#特点 
这种模式下虚拟机CPU指令集数最少,故性能相对最差; :但是它在热迁移时跨不同型号CPU的能力最强。此外,custom模式下支持用户添加额外的指令集。

#启动参数-未增加指令集模式:
--cpu westmere-IBRS

#配置参数-未增加指令集模式
<cpu mode= 'custom' match='lexacti' check='partial'>
<model fallback='allow'>Westmere-IBRS</model>
</cpu>

#启动参数-增加指令集模式:
--cpu Broadwell-
IBRS, +vme,+ss,+vmx, +ht, +osxsave,+f16c,+rdrand,+hypervisor,tarat,+stibp,+pdpe1gb,-tsc-deadline,-bmil,-hle,-avx2,-bmi2,-invpcid,-rtm,-rdseed,-adx,-smap

#配置参数-增加指令集模式
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Broadwell-IBRS</model>


#启动测试
cp /var/lib/libvirt/images/centos7-minimal-template.qcow2 /var/lib/1ibvirt/ images/centos7-minimal-host03.qcow2

#安装
virt-install \
--boot hd \
--os-type=linux \
--os-variant= fedora18 \
--cpu SandyBridge-IBRS \
--vcpus=1 --ram=2048 \
--disk=/var/lib/libvirt/images/centos7-minimal-host03.qcow2 \
--name=vm03 \
--network network=default 

④三种mode的性能排序(理论)

host-passthrough > host-model > custom

⑤三种mode的热迁移通用性(理论)

custom > host-model > host-passthrough 

(4)KVM虚拟机CPU拓扑配置

①CPU拓扑

SMP,对称多处理器(Symmetric Multi-Processors,简称SMP)

socket:CPU颗数(虚拟插槽)

core:每个CPU中的物理内核数(虚拟硬件核心)

threads:超线程技术实现了CPU核的虚拟化,一个核被虚拟化出多个逻辑CPU,可以同时运行多个硬件线程(虚拟硬件线程)

vCPU:逻辑核心


#比如--vCPU 4 可以有如下几种组合
     逻辑核心  虚拟插槽   虚拟硬件核心   虚拟硬件线程
1) --vCPU 4,  sockets=1,     cores=1 ,   threads=4
2)  --vCPU 4,  sockets=1,     cores=2 ,   threads=2
3)  --vCPU 4,  sockets=2,     cores=1 ,   threads=2
4)  --vCPU 4,  sockets=2,     cores=2 ,   threads=1
5)  --vCPU 4,  sockets=4,     cores=1 ,   threads=1

②4插槽1核心1线程



#启动参数--vcpus 4,sockets=4,cores=1, threads=1

#配置参数
<cpu mode='host-passthrough' check='none' >
<topology sockets='4' cores='l' threads='1' />
</cpu>

#启动配置
cp /var/1ib/libvirt/images/centos7-minimal-template.qcow2 /var/lib/libvirt/images/centos7-minimal-host01.qcow2

#安装
virt-install \
--boot hd \
--os-type=1inux \
--os-variant=fedora18 \
--cpu host \
--vcpus=4,sockets=4,cores=1,threads=1 --ram=2048 \
--disk=/var/lib/libvirt/images/centos7-minimal-host01.qcow2 \
--name=vm01 \
--network network default



③1插槽1核心4线程


#配置参数
<cpu mode='host-passthrough' check='none'>
<topology sockets='1' cores='1' threads='4'/>
</cpu>

#启动配置
cp /var/1ib/libvirt/images/centos7-minimal-template.qcow2 /var/lib/1ibvirt/images/centos7-minimal-host02.qcow2

#安装
virt-install
--boot hd \
--os-type=linux \
--os-variant=fedoral8 \
--cpu host \
--vcpus=4,sockets=1,cores=1,thread=4 --ram=2048 \
--disk=/var/lib/libvirt/images/centos7-minimal-host02.qcow2 \
--name=vm02 \
--network network=default


(5)开展性能测试

#sysbench性能测试

1)软件安装
yum install -Y epel-release
yum install -y sysbench

2)单线程运行测试
sysbench cpu --threads-1 run

3)多线程运行测试
sysbench cpu --threads=4 run

4)结果说明
events per second   #每秒事件值越大,性能越强。

(6)KVM虚拟机CPU热插拔配置


#功能说明:
需要预先配置KVM虛拟机的最大vCPU参数才能使用。

#启动参数
--vcpus 2,maxvcpus=4

#配置参数
<vcpu placement='static' current="2">4</vcpu>

#启动配置
cp /var/lib/1ibvirt/images/centos7-minlumal-template.qcow2/var/lib/libvirt/images/centos7-
minimal-host01.qcow2

#安装
virt-install
--boot hd \
--os-type=1inux \
--os-variant= fedora18 \
--cpu host \
--vcpus=2,maxvcpus=4 \
--ram=2048 \
--disk=/vax/ib/libvirt/images/centos7-minimal-host01.qcow2 \
--name=vm01 \
--network network=default

#热插拔配置,增加到4核
virsh setvcpus vm01 4 --live

#修改启动配置
virsh setvcpus vm01 4 --config

(7)KVM虚拟机CPU嵌套虚拟化

#特点
嵌套式虚拟nested是一个可通过内核参数来启用的功能。它能够使一台虚拟机具有物理机CPU特性,支持vmx或者svm( AMD )硬件虚拟化。

#启用Nested:
echo 'options kvm intelnested=1' >/etc/modprobe.d/kvm-nested.conf

#卸载模块:
modprobe -r kvm_intel

#重新加载模块
modprobe kvm_intel

#查看Nested是否启用成功:
cat /sys/module/kvm_intel/parameters/nested
Y

#启动测试host-passthrough
cp /var/lib/libvirt/images/centos7-minimal-template.qcow2 /var/1ib/libvirt/ images/centos7-minimal-template.qcow2 /var/lib/libvirt/images/centos7-minimal-host01.qcow2

#安装
virt-install
--boot hd \
--os-type=linux \
--os-variant=fedoral8 \
--cpu host-passthrough \
--vcpus=1 --ram=2048 \
--disk=/var/lib/libvirt/images/centos7-minimal-host0l.qcow2 \
--name=vm01 \
--network network=default

#进入虚机中查看cpu是否透传成功:
1smod grep kvm


#启动测试custom
cp /var/lib/libvirt/images/centos7-minimal-template.qcow2 /var/1ib/1ibvirt/images/centos7-minimal-host03.qcow2

#安装
virt-install\
--boot hd \
--os-type=1inux \
--os-variant=fedora18 \
--cpu SandyBridge-IBRS, +vmx \
--vcpus=1 --ram=2048 \
--disk=/var/lib/libvirt/images/centos7-minimal-hosto3.qcow2 \
--name=vm03 \
-- network network=default

#进入虚机中查看cpu是否透传成功:
1smod grep kvm

(8) KVM虚拟机内存热插拔配置


#启动参数
--memory 512 , maxmemory=1024

#配置参数
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>524288</currentMemory>

#启动配置
cp /var/lib/libvirt/images/centos7-minimal-template.qcow2 /var/lib/libvirt/images/centos7-minimal-host01.qcow2

#安装
virt-install
--boot hd \
--os-type=1inux \
--os-variant=fedora18 \
--cpu host \
--vcpus=2 ,maxvcpus=4 \
--memory 512 , maxmemory=1024 \
--disk=/var/lib/libvirt/images/centos7-minimal-host01.qcow2 \
--name=vm01 \
--network network=default


#热插拔配置一增加到1024M
virsh setmem vm01 1048576 --live

#修改启动配置
virsh setmem vm01 1048576 --config



(9) KVM虚拟机内存热气球配置


#memballoon内存热气球
KVM、Xen、VMware等虚拟化平台都引入内存热气球(Ballon) 的概念,气球中的内存是可以供宿主机使用的,当宿主机内存使用紧张空余内存不多时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放其空闲的内存。

#memballoon有两种类型:
膨胀:虚拟机的内存被拿掉给宿主机
压缩:宿主机的内存还给虚拟机

#配置参数
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0' /> 
</memballoon>

#启动配置
cp /var/lib/libvirt/images/centos7-minimal-template.qcow2 /var/lib/libvirt/images/centos7-minimal-host01. qcow2

#安装
virt-install
--boot hd \
--os-type=linux \
--os-variant=fedora18 \
--cpu host \
--vcpus=2 , maxvcpus=4 \
--memory 512 \
--disk=/var/lib/libvirt/images/centos7-minimal-host01.qcow2 \
--name=vm01 \
--network network=default

#查看当前宿主机下的虚拟机的内存大小
# virsh qemu-monitor-command vm01 --hmp --cmd info balloon
balloon: actual=512

#进行热气球调整
virsh gemu -monitor-command vm01 --hmp --cmdballoon 384

#虚拟机查看内存热气球信息
yum install -y pciutils
lscpi | grep -i balloon
1smod | grep -i balloon

二、实验

1.安装KVM环境管理工具并创建VM(虚拟机)

(1) 采用本地ISO镜像方式作为镜像仓库

yum repolist  enabled


(2)采用软件包组方式安装

yum group list

(3)安装过程采用软件包组

yum   group install -y   "Virtualization Host"

(4)virsh工具(用来管理KVM的命令行工具)

yum install -y  virt-manager 

(5)virt-viewer(进入VM图形化与命令行界面的图形化工具)

yum install -y  virt-viewer

(6)新建虚拟机

(7)选择系统

(8)选择“是”

(9) 128m内存

(10)硬盘5G

(11)主机名,网络自定义

(12)删除网卡

(13)连接

(14)选择镜像

(15)确定

(16)选择启动项并应用

(17)点击开始安装

(18)选择第3个

(19)完成

(20)此模式没有网卡

(21) 查看

(22)打勾

(23) 都可以显示

(24)查看虚拟机

(25)查看已安装的virt

(26)进入虚拟化终端

(27)另一种方式进入图形化界面

(28)双击服务器也可以直接进入

(29)强制关机

(30)已关机

(31)选择挂载

(32)确定

(33)启动项可以选镜像

(34)显示关闭状态

virsh list --all

(35)修改命令

virsh edit vm01

(36)进入配置文件(与VIM文本操作类似)

(37) 修改图形配置这一段内容(添加端口与监听地址)

    <graphics type='vnc' port='5911' autoport='no' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>

(38)保存退出

(39)开机

virsh start vm01

(40)显示已开机

(41)查看网络

netstat -nltpu

2.Windows使用VNC Viewer连接KVM中的VM(虚拟机)

(1)进入VNC Viewer

(2)查看进程

(3)新建连接

(4)设置VNC客户端

(5)选项调整画质(可以选中或高)

(6)配置完成,双击进入

(7)点击继续

(8)进入

(9)控制台界面,切换账户重启

(10)选第3个

(11)进入命令行

(12)此模式无网卡

(13)重启

(14)选第一个模式

(15)再次进入

三、问题

1.如何下载安装VNC Viewer

 (1)下载地址

Download VNC Viewer for Windows | VNC® Connect

(2)选择语言

(3)点击下一步

(4)点击下一步

(5)允许创建桌面快捷方式

(6)完成

(7)系统提示

(8)进入系统

2.如何使用命令行创建及删除第2台虚拟机vm02(先创建存储方式)

(1)qemu-img为虚拟机创建存储

qemu-img create -f qcow2  /var/lib/libvirt/images/vm02.qcow2

(2)virt-install 完成安装

virt-install --cdrom/root/Desktop/TinyCore-11.0.iso \
--os-type=linux \
--os-variant=fedora18 \
--vcpus=1 --ram=128 \
--disk=/var/lib/libvirt/images/vm02.qcow2 \
--name=vm02 \
--network network=default  \
--graphics vnc,listen=0.0.0.0,port=5912

(3)删除vm02

virsh list

virsh shutdown vm02

virsh destroy vm02

virsh undefine vm02

3.如何使用命令行创建及删除第3台虚拟机vm03(不创建存储方式)

(1) virt-install 完成安装(size直接指定磁盘存储大小为6G)

virt-install --cdrom/root/Desktop/TinyCore-11.0.iso \
--os-type=linux \
--os-variant=fedora18 \
--vcpus=1 --ram=128 \
--disk=/var/lib/libvirt/images/vm03.qcow2,size=6 \
--name=vm03 \
--network network=default  \
--graphics vnc,listen=0.0.0.0,port=5913

(2)删除vm03

virsh list

virsh shutdown vm03

virsh destroy vm03

virsh undefine vm03

4.virt-install安装过程报错

(1)报错

ERROR   virConnect' object has no attribute ' baselineHypervisorCPU '

(2)原因分析

环境BUG,libvirt-python版本过低。

(3)解决方法

更新libvirt-python

yum update libvirt-python

5.如何使用命令行创建及删除CentOS 7 minimal虚拟机

 (1) virt-install 完成安装(size直接指定磁盘存储大小为10G)

virt-install --cdrom/root/Desktop/CentOS-7-x86_64-Minimal-1708.iso \
--os-type=linux \
--os-variant=fedora18 \
--vcpus=1 --ram=1024 \
--disk=/var/lib/libvirt/images/vm04.qcow2,size=10 \
--name=vm04 \
--network network=default  \
--graphics vnc,listen=0.0.0.0,port=5914

6.virsh list为何查看不到qemu-kvm创建的虚拟机

(1)原因

1)虚拟机运行状态
virsh读取虚拟机运行状态,获取虚拟机运行元数据,由libvirtd维护

2)virt-manager,virt-install
它们2个工具创建的虚拟机的元数据信息状态会向libvirtd注册

3)qemu-kvm
它是由virsh/virt-install/virt-manager用来启动VM的后端程序。
虽然qemu-kvm依赖于libvirt,但使用它创建VM后不会在libvirtd元数据虚拟机列表中注册任何正在运行的实例以及创建任何虚拟机配置文件。
一般用来临时创建虚拟机进行测试。

7.如何查看KVM进程及端口号

(1)查询进程

ps -ef | grep -v grep | grep -i kvm

(2)查询端口号

netstat -nltpu | grep -i kvm

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统上,可以使用KVM(Kernel-based Virtual Machine)创建虚拟机。KVM是一种基于内核的虚拟化技术,可以在Linux系统上运行多个虚拟机。 以下是在Linux系统上使用KVM创建虚拟机的步骤: 1. 确认主机支持虚拟化。使用以下命令检查主机是否支持虚拟化: ``` grep -E 'svm|vmx' /proc/cpuinfo ``` 如果输出包含"svm"或"vmx",则表示主机支持虚拟化。 2. 安装KVM和相关工具。使用以下命令安装KVM和相关工具: ``` sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager ``` 3. 创建虚拟网络。使用以下命令创建一个虚拟网络: ``` sudo virsh net-create network.xml ``` 其,network.xml是一个XML配置文件,用于定义虚拟网络的配置信息。 4. 创建虚拟机。使用以下命令创建一个虚拟机: ``` sudo virt-install --name vm-name --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm-name.qcow2,size=20 --network network=network-name --graphics vnc,listen=0.0.0.0 --os-type linux --os-variant ubuntu20.04 --cdrom /path/to/iso-image.iso ``` 其vm-name是虚拟机的名称,network-name是虚拟网络的名称,/var/lib/libvirt/images/vm-name.qcow2是虚拟机的磁盘镜像文件路径,20是虚拟机磁盘的大小(单位为GB),/path/to/iso-image.iso是用于安装操作系统的ISO镜像文件路径。 运行上述命令后,将会启动一个新的图形化窗口,用于安装操作系统。按照提示进行操作即可完成虚拟机的创建。 这些步骤可以让您在Linux系统上使用KVM创建虚拟机。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值