博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/07/18 kvm虚拟化(04)
阅读量:3925 次
发布时间:2019-05-23

本文共 5062 字,大约阅读时间需要 16 分钟。

如何去使用kvm命令行工具去尝试管理虚拟机当中的,比如创建虚拟机的时候的,指明硬盘说明文件,光盘什么文件的,来尝试安装虚拟机实例,

企业在用虚拟机的实例的时候,很多时候显示不是关键的,更多的是磁盘io和网络

kvm的网络建构是如何进行

没准将来使用的是虚拟机管理平台

网络模型,同一个物理服务器上,启动两个虚拟机实例,这两个虚拟机通信,需要有虚拟网卡,需要介入到2层的通信设备上,交换机(网桥)

对于linux系统,这个网卡构建是独特的,可以通过名称空间中来实现,窗口一个成对的以太网设备,并将其一部分关联到主机上,另外一部分送到,虚拟机实例内部来,虚拟网络名称空间就可以隔离网络的,基于内核中的网络名称空间技术,实现可以创建多个网络,使用容器的时候,就是实现网络名称空间隔离,来构建出多个用户空间的,几个核心技术之一,网卡是成对出现的,可以把一对当作一半放到虚拟机上,另外一半放到虚拟交换机上。
创建出这么一对网卡,ip命令即可实现
ip link add 添加一个设备,还可以指定类型,veth虚拟的以太网卡
在这里插入图片描述
veth虚拟以太网卡
在这里插入图片描述
linux内建有模块可以让你创建桥接接口,直接在内核模拟出一个交换机设备,而这个内核模块输出的应该是系统调用
在这里插入图片描述
brctl命令行工具 show 可以显示你有几个桥设备
在这里插入图片描述
添加网桥addr
addif 向桥添加一个虚拟网卡,
delbr删除桥
delif 删除桥上的网络接口
peer另外一端
创建一堆虚拟网卡,一半关联桥上,相当于把网线插进来,把另外一半放到虚拟机上、
add 随便起个名字veth。1 type类型,
12 是一对网卡设备
在这里插入图片描述
给它个地址并激活这个设备,彼此间就能通信 了,
网络名称空间,list可以列出已经有多少空间
add可以添加 空间 router
可以把刚才创建的接口一半扔到router1里
在这里插入图片描述set可以指明哪个设备在这里插入图片描述
在这里插入图片描述
show的时候就看不到2了,exec在哪个名称空间使用命令,网卡没有激活所有不显示在这里插入图片描述
这就是一个网卡怎么去创建一半一半,如果把网卡激活各自赋予地址,它们是可以进行通信的,相当于veth就是个虚拟机一样,虚拟的是网络地址空间
在本机的vethx。1也给个地址
在这里插入图片描述
在这里插入图片描述
现在可以ping通
在这里插入图片描述

现在就可以删除网卡了

在这里插入图片描述

创建一个内部通信的桥

在这里插入图片描述
还没有激活,ifconfig -a显示,激活可以使用ifconfig br-int up
在这里插入图片描述
就能显示了
在这里插入图片描述
相当于一半在虚拟机上,插网线类似
在这里插入图片描述
在每个虚拟机上需要指定两个nat选项
第一个用来指明自己一段网卡怎么创建
第二个指明添加到哪个网络中去
在这里插入图片描述
网络选项:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v] 指明网卡怎么创建
为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,
virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:

-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]: 加入到哪个桥	通过物理的TAP网络接口连接至vlan n;	script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup	downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown	ifname=NAME:自定义接口名称;		/etc/qemu-ifup + 参数(是你的网卡接口)			#!/bin/bash		#		bridge=br0		if [ -n "$1" ];then 判定网卡接口是否非空			ip link set $1 up  如果不空就激活			sleep 1			brctl addif $bridge $1  添加到这个桥上来			[ $? -eq 0 ] && exit 0 || exit 1 如果正常添加了就退出返回0 		else			echo "Error: no interface specified."			exit 1		fi

在这里插入图片描述

在这里插入图片描述
-n测一下有没有语法错误
在这里插入图片描述
在这里插入图片描述
下一次启动虚拟机的时候,就可以尝试连接到这个网络上来了、
qemu会创建网卡,一半链接桥一半链接虚拟机上
启动两个实例
可以使用 --daemonize 以守护进程方式运行
-m 256m 内存
-name c1 名字
-smp 2个核心
-drive 映像文件
media 媒介 磁盘
-net 加哪个桥上去 tap可以设置脚本,script
-vnc 显示为0
-daemonize 以守护进程方式运行
mac地址开头必须是 54:54:00 因为是kvm得到的,后面自己去些即可
在这里插入图片描述
在这里插入图片描述
创建另外一个虚拟机在这里插入图片描述
**br-int已经关联了两个网卡 ,tap0,tap1
**在这里插入图片描述
每个网卡都有两半,tap0另外一半在c1上,tap1在c2上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
他们之前可以通信,但是无法和外部通信,因为这个桥是在主机没有地址的,宿主机通信没办法实现
在这里插入图片描述
br-init虽然叫桥,但是显示是个网卡,如果配置个地址,就相当于宿主机的网卡,直接可以当网卡用
跟宿主机就可以通信了,这就是仅主机了
在这里插入图片描述
在这里插入图片描述
也可以变为nat,物理机有网卡连接到外部网络中去的,如果打开了宿主机的核心转发,这两个虚拟主机指向254,254收到报文以后,2层到网桥用,3层当网卡路由用,
报文发给宿主机,宿主机发现报文地址不是自己,找一个网卡转发出去
在这里插入图片描述
配置网关
在这里插入图片描述
在这里插入图片描述
最后一条记录
按照道理对方收到,但是是不知道你在什么位置的,所以用了地址转换
在这里插入图片描述
其实是67去ping的68在这里插入图片描述
现在已经使用nat模式了,现在是外部访问不到里面的
在这里插入图片描述
在c1主机上试图去启动ssh服务
在这里插入图片描述
现在是路由信息不可到达,要有dnat规则
在这里插入图片描述
如果目标地址是172.16.0.67 目标端口是 22922 -j DNAT为10…1.1.1的22端口
在这里插入图片描述
-p指定端口
在这里插入图片描述
如果有两个虚拟机和两个宿主机,每宿主机都跑了虚拟机实例,现在期望两个宿主机上的虚拟机能互相通信,最简单就是每个宿主机上的虚拟机都用桥接,但是这样主机就等于暴露在外部网络,所有端口都能被人访问
A主机是私有网络,要想被外部访问,加一个DNAT规则才可以
B主机是私有网络
事实上就是两个宿主机的网卡在进行通信,那就再两个虚拟机上做vpn,是可信可达的
在这里插入图片描述
要想两个虚拟机之间无障碍通信,用叠加网络的方式,隧道网络模型,可以想象成vpn模式,非加密的隧道网络,比如
可以使用GRE,建立一个4层的udp协议隧道,中间的2层的任何报文都可以通过隧道发往另外一台交换机上,这两台交换机好像就直接用网线链接起来了一样,就等 两个都在同一个2层网络,
需要借助一个物理网络,构建出一个隧道网络来,
在这里插入图片描述
哪怕物理上是隔离的,链接交换机,再交换机上基于端口划分vlan
现在A1和A2可以通信,B1B2可以通信
在这里插入图片描述
没准一家公司中的A1A2配置了不同的网络地址,还期望双方路由以后互相通信,中间就需要设置虚拟的路由,不光是交换机设备,linux内核在内核级就支持,虚拟路由设置叫NATNS,可以当虚拟路由来用
现在交换机和路由都是软件实现的,但是彼此他通信还是要硬件设备的,每一个网络设备都是自制系统,对我们是不利的
SDN,交由软件统一控制和驱动的网络
NFV,将来建立云化的IDC的话,这些技术需要了解
一般不会用内核里的桥更多的是使用OVS开放的虚拟交换机(OPEN Vswitch
在这里插入图片描述
刚才的地址是自己配置的,能否自己获取,启动一个dhcp服务器即可,在刚才的交换机那里,设置一个dhcp服务,只负责这个网段的
在这里插入图片描述
dnsmsq,是非常轻量化的,dns转发器和dhcp服务器
在这里插入图片描述
man dnsmsq
在这里插入图片描述
在这里插入图片描述
监听所有地址
在这里插入图片描述
-i表示只监听在哪个端口上
在这里插入图片描述
在这里插入图片描述
dhcp地址池
在这里插入图片描述
-i仅监听 在哪个网卡接口上
选项,42代表ntp-server
在这里插入图片描述
-Fdhcp地址范围,-O 3,网关,
在br-init上 67号端口已经被监听 了
在这里插入图片描述
一旦在网络名称空间中,地址什么冲突了,再启用一个名称空间即可,把这个dnsmsq单独运行再网络名称空间 中

在这里插入图片描述

1,2成对出现,没有问题
在这里插入图片描述
一半放到网络名称空间去,因此先去激活前一半,添加到桥br-int上,类似插网线到交换机上
在这里插入图片描述
add一个dhcpserver,y。2添加到dhcpsrv的虚拟机上,启动dnsmasq
在这里插入图片描述
现在dnsmsq已经运行起来了
在这里插入图片描述
现在重启第二个虚拟机查看能否获取地址
在这里插入图片描述
获取到地址了
在这里插入图片描述
网关指向254
在这里插入图片描述
到此dhcp服务功能的再单机下构建网络

网络选项:

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v] 为虚拟机定义网卡
为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,
virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:

-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:  把网卡另外一头插到交换机上去	通过物理的TAP网络接口连接至vlan n;	script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup	downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown

在这里插入图片描述

示例1:

~]# qemu-kvm -name c2 -smp 2,maxcpus=4,sockets=2,cores=2 -m 128 -drive file=/images/kvm/cos-i386.qcow2,if=virtio -vnc :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup
示例2:
~]# qemu-kvm -name winxp -smp 1,maxcpus=2,sockets=1,cores=2 -m 1024 -drive file=/data/vms/winxp.qcow2,media=disk,cache=writeback,format=qcow2 file=/tmp/winxp.iso,media=cdrom -boot order=dc,once=d -vnc :1 -net nic,model=rtl8139,macaddr=52:54:00:00:aa:11 -net tap,ifname=tap1,script=/etc/qemu-ifup -daemonize

要想启动多个centos虚拟机,需要先安装centos7虚拟机,当作模板,复制模板几个,完全克隆,每个虚拟机之间是没有关系的,当然也可以每个虚拟机间做快照,去克隆出多个链接克隆来,

但如果基于同一个镜像文件复制多份,启动很多的虚拟机,很多信息是冲突的,尤其是mac地址,
我们需要装好系统后,把里面的地址删除,比如mac地址,把当面主机的私有信息,比如主机名之类的,全部删除,
下次重启再初始化即可,
cloud-init 是一系列的初始化脚本,这个脚本可以尝试把你删除的mac地址i,初始化出来,在这之前要剥离与内核相干的东西
没必要自己去创建,因为centos官方给你做好了镜像文件,也要继续cloud-init做一些初始化
在这里插入图片描述
或者基于OZ的工具做初始化
在这里插入图片描述
kvm管理起来太麻烦了,还是建议用其他的管理工具,virsh命令行工具,对于虚拟机的管理,是基于xml文件来实现的
其他命令还挺好用,比qemu-kvm容易些
在这里插入图片描述

转载地址:http://wckgn.baihongyu.com/

你可能感兴趣的文章
Sqlite日期和时间函数不求人
查看>>
在SQLite中使用索引优化查询速度
查看>>
标准C处理类似INI配置文件的键值型文档
查看>>
配置文件的读取,纯C代码
查看>>
UML用例图中包含(include)、扩展(extend)和泛化(generalization)三种关系详解
查看>>
基于蓝牙设备的移植
查看>>
linux中的时间函数
查看>>
Linux系统中的计时机制及相关时间函数
查看>>
strftime函数
查看>>
linux下的时间函数使用
查看>>
C语言问题集-- 把 struct tm 或一个字符串转换成 time_t
查看>>
hp unix下strptime的使用
查看>>
C语言中如何求任意一个int型数组的长度?
查看>>
蓝牙基带数据传输机理分析
查看>>
各种文件后缀名与打开方式大全
查看>>
利用Java的Properties 类读取配置文件信息
查看>>
用java读写ini配置文件
查看>>
java读取和修改ini配置文件实例代码
查看>>
网络字节序与主机字节序
查看>>
inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
查看>>