kvm虚拟机模式是net还是路由

kvm虚拟机模式是net还是路由,第1张

以VMware workstation为例,其虚拟网络设备有3种:

vmnet0(桥接模式),无实体虚拟网卡,其实就是一个协议而已,会在对应网卡上加入VMware bridge protocol桥接协议,其作用相对于使用一个虚拟交换机连接虚拟机和物理机网卡。

vmnet1(仅主机模式,hostonly),生成vmnet1虚拟网卡,并定义一个ip地址,虚拟机设置为仅主机模式,需要手动设置和vmnet1相同的子网网段,作用相同与vmnet0但由于vmnet1不接入其他网络,所以数据只在虚拟机和物理机间交换。

vmnet8(NAT模式,网络地址转换),生成vmnet8虚拟机网卡,并通过VMware NAT service提供网关和地址转换服务,VMware DHCP service提供虚拟机ip地址自动分配服务,通过vmnet8与虚拟机通讯。

物理机环境使用路由器上网,就选择桥接模式

物理机单机pppoe拨号上网,就选择NAT模式

不想虚拟机上网,就选择选择仅主机模式

如果物理主机网络中有路由器设备,就设置虚拟机网络适配器为桥接模式,这样虚拟机通过路由器的DHCP自动获取ip地址,也直接可以通过路由器上网,由于和主机处于同一网段基本联网也不存在问题!

如果物理主机是pppoe宽带拨号上网,就设置虚拟机网络适配器为NAT模式,以VMware workstation为例,NAT模式下需要主机控制面板——管理工具——服务中VMware NAT service提供网关服务,需要VMware DHCP service提供自动ip分配服务,vmnet8虚拟网卡提供和虚拟机通讯的功能,虚拟机自动获取和vmnet8相同网段的ip地址,通过VMware NAT service提供的2网关来上网。

{% note success %} poetry

<center style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px;">往事越千年,魏武挥鞭,东临碣石有遗篇。萧瑟秋风今又是,换了人间。 {% endnote %}</center>

kvm创建虚拟机的根本在于这样一条命令, virsh define vm-templatexml ,这条命令的核心就是创建一个虚拟机,之后或者之前的内容都是围绕着这条命令和这个虚拟机的。

所以,virsh define vm-templatexml 其本质是在安全可靠的前提下,将母机的资源通过kvm虚拟化的形式分配给子机。

所以主要考虑方向有两个

1、保障母机和子机的安全可靠,包括系统安全和网络安全

2、进行资源分配,包括网络资源、存储资源、计算资源等

该脚本考虑了母机分配资源不会超过母机承受范围的资源安全,其他系统层面和网络层面的安全问题还需考虑

完成过程

[0]

刚开始考虑当母机资源超过一定比例则程序退出,比如磁盘使用超过2/3,后来觉得这样不够灵活,改用百分比,默认50%

在设置百分比的时候有几点小问题

1、浮点数运算保留小数

使用scale可以准确保留小数,echo "scale=2;62/3" | bc 结果 2066

使用printf可以保留小数位,补零填充 printf %2f 结果2000

2、浮点数运算不保留小数

echo "123123"|sed "s/ //g"

代表0到多个,所以第一个命令中 只能替换掉小数点变成空

代表了小数点之后的1到多个

3、除法

echo "2 / 3" | bc 这个结果会显示为0

echo "scale=2 ;2 / 3" | bc 这个结果会显示为66

printf "%2f" echo "scale=2;2/3" | bc 这个结果会显示为066

[1]

刚开始的时候选择将subvm_configurationsh这个脚本cat进内存,然后用expect登录到子机的时候echo到文件,然后执行。后来发现expect输出的时候会把subvm_configurationsh脚本里的内容先执行一遍,而且还存在其他一些问题,比如说echo到文件的时候残缺不全、不换行、文件为空等。

后来采用磁盘共享的方式,在宿主机上创建一块磁盘,然后挂载到/tmp/share/这个目录,再将subvm_configurationsh脚本和ipinfo配置文件复制到该目录,之后在子机的XML文件中添加一块disk(vdc),登录进子机后,挂载vdc,此时就可以看到母机上/tmp/share/下的内容了。直接执行脚本即可。

磁盘共享也有一个缺点,就是文件内容不能实时刷新,比如在母机上改了ipinfo,只有子机重启后,子机上的ipinfo才可以刷新,鉴于/tmp/share/这个目录每个子机一生只有一次用到,所以这个问题暂时不需要解决。

[2]

创建子机

1、if ( vlanid != 0 && xenbrx not in brctl show ) 会报错网卡未找到导致虚拟机启动失败

2、vm-template模板不正确,包括<emulator>/usr/local/bin/qemu-system-x86_64</emulator>路径不正确,会导致虚拟机无法启动

3、disk的slot卡槽相同会导致虚拟机无法启动

4、需要注意的是,virsh define vm-template 这条命令的执行路径是/usr/local/etc/libvirt/qemu/vm-template,最后会在/usr/local/etc/libvirt/qemu/下生成vm$ipfmtxml的配置文件。

[3]

expect会有很多问题

1、命令不按顺序执行

2、传入的变量为空,且传入的变量下标是从0开始的;shell传入变量下标从1开始,0代表自身文件

3、set timeout $time 设置的时间不一定准确,设置了300秒延时,但未到300s,程序还是退出了,可以考虑直接设置 timeout 为-1

4、expect有多种写法,有expect << EOF ; expect eof ; 最正常的是上面用的

5、expect文件用的解释器是/usr/bin/expect,这里将loginsh使用cat写在了单独的文件中

[4]

1、subvm_configurationsh配置了两张网卡,格式化vdb数据盘,配置ssh

2、eth0为连接外网的网卡,使用tunnel,eth1为内网网卡,使用vlan

xenbrX为隧道入口,母机收到从xenbr361口收到的报文,就发给另一端隧道,从而实现连接外网

tunnel network ---- host(default router: subhost -> netowrk , throught interface & sh vlansh ) ---- subhost

母机收到vlan的报文,就在指定vlan的广播域内进行路由(不一定是母机进行路由)

vlan network ---- host(broadcast router: subhost ---> broadcast/vlanid throught 8021Q ) ---- subhost

expect合理用法

这个要了解你的ip分配是如何了。我的环境是物理机手动分配,虚拟机由DHCP分配,可以很好得被分配到同一个网段。桥接只是虚拟机的上网方式,不一定可以使虚拟机和主机可以通信。其实你设置了桥接以后,可以把虚拟机当做物理机来看待了。

我也是刚在学KVM,KVM还是有很多问题不感觉很奇怪的。

KVM(Kernel-based Virtual Machine)作为一个开源的系统虚拟化模块,已经成为虚拟机虚拟化技术的主流,在越来越多的Cloud环境中使用。为了保证Cloud环境的正常运行,需要在运维过程中对Cloud环境中的VM状态进行监控,比如CPU,内存,Disk,Disk I/O,Network I/O等信息,可以利用这些信息及时的调整分配Cloud环境的资源,保证VM的正常运行。Libvirt是基于KVM的上层封装,提供了 *** 作KVM的原生层接口,可以实现对虚拟机的日常管理 *** 作,如虚拟机的生命周期(创建,删除,查看,管理),开机,关机,重启,网络管理,存储管理等。本文以查看hypervisor的instance为例,讲述通过Libvirt-python模块,查看当前HOST的KVM虚拟机常用监控信息。文章主要包括如下几个方面的内容:

1、 Libvirt-python模块的简单介绍与环境安装配置;

2、 利用Python调用API获取 VM相关监控信息;

1 Libvirt-python模块的简单介绍与安装配置

Libvirt提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的客户 *** 作系统,是一种可以建立工具来管理客户 *** 作系统的 API。Libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API,适用于包括基于KVM/QEMU, Xen, LXC, OpenVZ, Virtualbox, VMware, PowerVM等多种虚拟机化技术的虚拟机。Libvirt-python是基于libvirt API的python语言绑定工具包,通过该包,可以使用python对VM进行日常管理 *** 作和监控数据获取。需要运行的Python监控程序可以在KVM的HOST中运行,也可以在基于KVM虚拟机化的任意环境运行,需要做的配置如下:

1) 环境准备:

安装python 26及以上

安装libvirt 12及以上

安装libvirt-client 12及以上

安装libvirt-python12及以上

以上环境如果已经在 *** 作系统中存在并且满足要求,不需要进行重复安装,可以在libvirt的官方网站选择不同的站点和适合自己 *** 作系统的安装包进行下载安装。

2) 验证安装环境:

安装完上述安装包后,在命令行运行rpm -qa | grep libvirt 查看相关安装信息是否正确如图:

在命令行运行python命令查看python环境

在命令行运行virsh进入virsh命令行窗口

执行list –all,列出所有虚拟机,执行dommemstat domainID验证windows虚拟机内存信息

unused代表虚机内部未使用的内存量,available代表虚机内部识别出的总内存量,那么虚机内部的内存使用量则是(available-unused)。

如果windows虚拟机中没有unused值,

按下一步安装virtio-win驱动和balloon service,并且启动balloon service

3) windows虚拟机Windows Virtio Drivers安装。

1、下载地址,根据自己需求下载相应版本,这里以下载Stable virtio-win iso为例。

2、安装驱动

3、安装Balloon Services,

在python应用运行环境验证servie,查看该VM 内存信息。

2 利用Python调用API获取 VM相关监控信息

21创建连接

Python的管理应用程序可以和域位于同一节点上,管理应用程序通过libvirt工作,以控制本地域,如下图:

也可以运行在远端,通过本地libvirt连接远端libvirt,以控制本地域,该模式使用一种运行于远程节点上的libvirtd守护进程。当在新节点上安装libvirt时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd。

提供不同的连接方式,注意连接使用过后需要关闭。

from __future__ import print_function

import sys

import libvirt

# conn = libvirtopen('qemu+ssh://IP/system'

conn = libvirtopen('qemu:///system')

if conn == None:

print('Failed to open connection to qemu:///system', file=sysstderr)

exit(1)

connclose()

22 列出Domains

connlistAllDomains(type)方法返回指定类型的domains列表,type参数可以设置以下类型

VIR_CONNECT_LIST_DOMAINS_ACTIVE

VIR_CONNECT_LIST_DOMAINS_INACTIVE

VIR_CONNECT_LIST_DOMAINS_PERSISTENT

VIR_CONNECT_LIST_DOMAINS_TRANSIENT

VIR_CONNECT_LIST_DOMAINS_RUNNING

VIR_CONNECT_LIST_DOMAINS_PAUSED

VIR_CONNECT_LIST_DOMAINS_SHUTOFF

VIR_CONNECT_LIST_DOMAINS_OTHER

VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE

VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE

VIR_CONNECT_LIST_DOMAINS_AUTOSTART

VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART

VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT

VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHO

如果设置为0,则返回所有活动和关机的domain

22 获取监控数据

VM的监控信息主要是CPU使用率,内存使用率,Disk使用率,Disk I/O,Network I/O。其中,CPU的使用率,Disk I/O,Network I/O并不能直接获取,需要经过计算获得。

221 CPU使用率

libvirt中并不能直接获取到虚拟机的CPU使用率,但是可以通过CPUTIME来计算出实际使用率。计算的公式为:

首先得到一个周期差:cpu_time_diff = cpuTimenow — cpuTimet seconds ago

然后根据这个差值计算实际使用率:%CPU = 100 × cpu_time_diff / ((now- seconds ago) × vcpus × 109)CPUtime可以使用domain的info函数获得,如下:

from __future__ import print_function

import sys

import libvirt

from xmldom import minidom

conn = libvirtopen('qemu:///system')

dom = connlookupByName(domName)

dominfo = dominfo()

print('The state is ' + str(dominfo[0]))

print('The max memory is ' + str(dominfo[1]))

print('The memory is ' + str(dominfo[2]))

print('The number of cpus is ' + str(dominfo[3]))

print('The cpu time is ' + str(dominfo[4]))

connclose()

info()函数返回一个数组,下标为4的值即为CPUTime。

222 内存使用率

内存的使用情况可以函数dommemoryStats()获得,如下:

from __future__ import print_function

import sys

import libvirt

domName = 'Fedora22-x86_64-1'

conn = libvirtopen('qemu:///system')

if conn == None:

print('Failed to open connection to qemu:///system', file=sysstderr)

exit(1)

dom = connlookupByID(5)

if dom == None:

print('Failed to find the domain '+domName, file=sysstderr)

exit(1)

stats = dommemoryStats()

print('memory used:')

for name in stats:

print(' '+str(stats[name])+' ('+name+')')

connclose()

exit(0)

可以在Virsh命令行中验证获取的值是否正确。

223 Disk使用率

对于一个VM的DISK,在DOMAIN XML的device根据标示获取,有关Disk部分的XML如下所示。

<devices>

<disk type='file' snapshot='external'>

<driver name="tap" type="aio" cache="default"/>

<source file='/var/lib/xen/images/fv0' startupPolicy='optional'>

<seclabel relabel='no'/>

</source>

<target dev='hda' bus='ide'/>

/这个'hda'就是需要的参数 /

<iotune>

<total_bytes_sec>10000000</total_bytes_sec>

<read_iops_sec>400000</read_iops_sec>

<write_iops_sec>100000</write_iops_sec>

</iotune>

<boot order='2'/>

<encryption type=''>

</encryption>

<shareable/>

<serial>

</serial>

</disk>

</devices>

使用函数domainblockInfo(disk,0)获得磁盘的总量和已使用量

224 Disk I/O

可以使用 domain blockStats ()方法,该方法需要传递一个Disk的参数,这个参数可以通过XML文件取得:

<devices>

<disk type='file' snapshot='external'>

<driver name="tap" type="aio" cache="default"/>

<source file='/var/lib/xen/images/fv0' startupPolicy='optional'>

<seclabel relabel='no'/>

</source>

<target dev='hda' bus='ide'/>

/这个'hda'就是需要的参数 /

<iotune>

<total_bytes_sec>10000000</total_bytes_sec>

<read_iops_sec>400000</read_iops_sec>

<write_iops_sec>100000</write_iops_sec>

</iotune>

<boot order='2'/>

<encryption type=''>

</encryption>

<shareable/>

<serial>

</serial>

</disk>

</devices>

225 Network I/O

可以使用 domaininterfaceStats()方法,该方法需要传递一个虚拟网卡接口的参数,这个参数可以通过XML文件取得:

<interface type='bridge'>

<mac address='00:16:3e:74:03:53'/>

<source bridge='xenbr0'/>

<script path='vif-bridge'/>

<target dev='vif10 '/>

/这个vif10就是需要的参数 /

</interface>

网卡的I/O值返回是一个数组,根据自己需要获取对应的值。

3 总结

通过对VM监控信息的获取,可以实时的了解Cloud环境中各个VM的负载和使用情况,合理的调配计算资源,或者关闭长时间没有使用的VM,做到Cloud资源的合理利用和运行环境的健康可靠性。

一 安装VNC

1 安装VNC服务端

(1)在Linux系统上安装VNC

yum -y install vnc-server

yum -y install tigervnc-server

(2)设置远程登录所需要的密码

输入vncserver后会提示输入密码

注:此密码是远程登录时所需要输入的密码

(3)进行vncserver配置

vi /etc/sysconfig/vncservers

设置以下配置值

VNCSERVRES=10000:root(其中10000为桌面号、root为用户名)

VNCSERVERARGS[2]=geometry800x600 –nolisten tcp –localhost

(4)进行防火墙配置允许远程连接VNC服务器

vi/etc/sysconfig/iptables

–A INPUT–m state –state NEW –m tcp –p tcp –dport 5901 –j ACCCEPT

(5)重启VNC和防火墙服务

servicevncserver restart

serviceiptables restart

2 安装VNC客户端

在Linux上安装vncviewer

在Windows上安装TigerVNC软件

二 创建KVM虚拟机

1 创建Linux虚拟机

(1)通过qemu-img创建一个7G的映像文件

qemu-img create –f qow2 Ubuntu1204img 7G

(2)创建一个Linux虚拟机

qemu-kvm –m 1024 –cdrom ubuntu-1204-desktop-i386iso –drive file= Ubuntu1204img;boot=on –boot d –nographic –vnc:2

注:-vnc与:2之间有空格

在另外一台机器上启动TigerVNC,输入1921680123:5902进行连接来进行安装 *** 作和观察安装进度

注:1921680123为本机IP,5902为相应端口号(5900+2)

2 创建Windows虚拟机

(1)制作包含virtio驱动的映像

安装UltraISO软件

下载win7iso, virtio-win-1116vfd,virtio-win-01-30iso

将virtio-win-01-30iso解压成文件夹

使用UltraISO打开win7iso,并将virtio-win-01-30复制到对应路径

将添加了virtio驱动文件夹的新win7iso文件另存为新的ios文件win7_virtioiso

qemu-img create –f raw win7_virtioimg 30G

qemu-kvm –m 1024 –cdrom win7_virtioiso –drivefile=win7_virtioimg,if=virtio,boot=on–fda virtio-win-116vfd –boot d –nographic –vnc :3

注:-vnc与:3之间有空格

在另外一台机器上启动TigerVNC,输入1921680123:5903进行连接来进行安装 *** 作和观察安装进度

注:1921680123为本机IP,5903为相应端口号(5900+3)

三 远程桌面虚拟化连接

在另外一台机器上启动TigerVNC,输入1921680123:593进行win7虚拟机登录

以上就是关于kvm虚拟机模式是net还是路由全部的内容,包括:kvm虚拟机模式是net还是路由、KVM实例总结、kvm安装虚拟机后,ip和主机不在一个网段啊,设置了桥接,也不行。可以帮帮我吗QQ:495231441等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9345039.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存