KVM技术介绍、使用qemu-kvm构建简单的虚拟网络

KVM是什么?

KVM(Kernel-Based Virtual Machines)是一个基于Linux内核的虚拟化技术, 可以直接将Linux内核转换为Hypervisor从而使得Linux内核能够直接管理虚拟机, 能够直接调用Linux内核中的内存管理、进程管理子系统来管理虚拟机

KVM是Qumrannet公司的产品, 在2007年2月被收录进 Linux 2.6.20 版本的内核, 后被RedHat收购, KVM依赖于 HVM 技术

虚拟化从另一个方面来说又分为两种类型:

  • Type-I: Hypervisor直接运行在硬件上
  • Type-II: Hypervisor运行在OS上

KVM技术特点

我们之前所介绍的Xen技术其实已经算的上比较奇葩了, Hypervisor上运行一个特权域来模拟IO设备并管理其他用户域; 但是KVM技术更为奇葩, 只要当前系统(Linux)装载了KVM模块, Linux内核就直接变成Hypervisor, 可以直接在系统上运行相关的管理命令来创建、删除…KVM虚拟机

qemu-kvm介绍

其实KVM没有自己的管理工具栈, Xen有xm, xl, xapi…, 但是KVM只提供了调用接口, 可以通过调用这个接口来管理KVM虚拟机。

RHELCentOS 中一般有两套工具可以选择, 我们这次先了解 Qemu

实际上qemu是一个模拟器, 可以实现诸多高大上的功能, 例如: 模拟CPU(Power PC, X86…)、模拟IO设备(鼠标、硬盘、网卡、显卡…), 但是模拟出来的设备性能都不是很好, 我们还可以通过Xen/KVM来对Qemu进行加速, 从而Qemu实现虚拟化, 实现虚拟化的Qemu可以直接使用物理机的CPU、内存资源、还能够半虚拟化IO设备来提升性能

qemu-kvm选项:

qemu-kvm主要有以下几个选项:

  • -snapshot: 创建快照
  • -m: 指定内存大小
  • -smp: 指定处理器个数
  • -cpu: 指定CPU类型
  • -name: 设置虚拟机名称
  • -vnc: 使用vnc连接
  • -boot: 指定启动相关的选项
  • -net: 指定网卡相关的选项
  • -drive: 指定硬盘/光盘相关的选项

最简单的实例: qemu-kvm -m 512 -smp 2 -name “simple-test” -drive file=/data/kvm/simpe-test.img

qemu-kvm net选项介绍:

net nic: 创建一个新的网卡接口

用法: 可以指定VLAN, MAC地址, 模式, 网卡名称, IP地址…  -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]

net tap: tap是Linux内核中的虚拟网络设备, 与虚拟机中的网卡通过二层数据包通信

用法: 可以指定VLAN, 网卡名称, 接口名称, 默认配置脚本 “/etc/qemu-ifup,qemu-ifdown”  -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]

net socket: 使用TCP套接字连接VLAN N连接到另一个QEMU虚拟机的远程VL

用法:  -net socket[,vlan=n][,name=name][,fd=h][,listen=[host]:port][,connect=host:port]

虚拟网络简单介绍:

事实上我们经常与虚拟网络打交道, 例如VMWare的各种网卡接口, VPS中的Vnet网卡….这些都是运行在虚拟网络中的, 我们这次来简单说一说虚拟网络的几种类型

下面的介绍中 "内部网络"指的是虚拟机所在的网络, "外部网络"指的是宿主机之外的网络

隔离模型:

其实隔离模型就是我们VMWare中的VMNet1, VMNet2之类称为仅主机模式的模型;  大概的意思就是, 一个没有连接外部网络的”交换机”, 只能够与内部(本网段)主机进行通信

路由模型:

当我们宿主机中有一块网卡接在原本是隔离模式网络的”交换机”上, 并且我们的宿主机开启了路由核心转发的功能以后, “交换机”连接的各主机将网关指向宿主机的网卡(添加路由), 就能够实现将数据报文发送给外部网络.

但是我们再想想, 数据报文虽然能够发出去了, 但是目标主机如何回应呢? 对方主机并没有特定的路由条目, 所以路由模式一般很少使用

NAT模型:

在VMWare中也有这个模式可供选择, 其实就是SNAT的实现而已, 将源主机(“隔离模型”)中的各主机的源地址在宿主机的POSTROUTING链转换为宿主机某个网卡的地址从而实现外部网络与内部网络(虚拟机)能够通信  NAT模型用的较多, 算是路由模型的改进吧.

桥接模型:

我们可以画出一个大概的虚拟网络的拓扑图, 其实我们也可以用桥设备来实现”内部网络”与外部网络的通信, 桥接的原理大家可以参考 Linux下网桥的介绍 用的不多, 据说安全性不高

虚拟网络的简单实现

我们简单的介绍了虚拟网络的四种模型, 现在我们就来简单的构建一个虚拟网络(桥接模型), 我这里为了实验方便, 所以使用经过马哥修改后的Cirros系统

创建网桥

提供脚本

创建KVM虚拟机

创建–>测试  单击查看大图

总结

虚拟网络算是虚拟化技术中的难点, 以后在我的文章中会经常出现, 敬请期待

文章内容浅尝辄止, 大家有更好的见解可以提出, 觉得我写的不错, 可以点一波赞~(≧▽≦)/~  作者: AnyISaIln QQ: 1449472454  感谢: MageEdu

  • 版权声明: 本文源自互联网, 于5个月前,由整理发表,共 2341字。
  • 原文链接:点此查看原文