明天要写的内容:
虚拟化的命令virsh管理,查看支持的模拟cpu,虚拟机cpu虚拟化,内存虚拟化,虚拟机迁移,修改内存,添加硬盘。如果还有时间写一下虚拟机调优,ksm大页存储,cache缓存。
由于时间的紧迫,没有来得及更新。后续会补充添加
首先今天学习下kvm网络虚拟化。
网络虚拟化是虚拟化中最复杂的部分,学习难度比较大。
为了让大家对虚拟化网络有直观认识,请看下图:
这是opensatck官网上给出的计算节点(可以理解为kvm虚拟机)虚拟网络的逻辑图,上面网络设备很多,层次也很复杂。
虚拟网络在复杂也是由一些基础组件构成。下面学习网络虚拟化最重要的东西:linuxbridge 和 vlan
linuxbridge基本概念
假设宿主机有1块网卡与外网连接的物理网卡eth0,上面跑了一个虚拟机vm1,现在有个问题就是如何让vm1能够访问外网?
至少有两种方案:
1.将物理网卡eth0直接分配给vm1,但是随之带来的问题:
宿主机没有网卡了,无法访问了;
新的虚拟机,比如vm2没有网卡
2.给vm1分配一个虚拟网卡vnet0,通过linuxbridge br0 将eth0和vnet()连接起来,如下图所示:
linuxbridge是linux上用来做tcp/ip二层协议交换的设备,其功能大家可以简单理解是一个二层交换机。
在上面的例子中,当有数据达到eth0时,br0会将数据转发给vnet0,这样vm1就能接收来自外网的数据,反过来,vm1发送数据给vnet0,br0也会将数据转发给eth0,从而实现与外网通讯。
下面我们增加一个虚拟机vm2,如图:
vm2的虚拟网卡vnet1也连接到br0上。现在vm1和vm2之前可以通讯,同时vm1,vm2也可以和外网通讯。
动手实践虚拟网络。
配置linuxbridge br0
编辑/etc/network/interfaces,配置Br0
下面用vmdiff展示了对/etc/network/interfaces的修改
有两点注意:
1.之前宿主机ip是通过dhcp配置在eth0上的,创建linuxbridge之后,ip必须放在br0
2.在br0的配置信息中注意最后一行 “bridge_ports eth0”,其作用是将eth0挂载到br0上
重启宿主机,查看ip配置,可以看到ip地址已经到br0上了
# ifconfig
br0 Link encap:Ethernet HWaddr 00:0c:29:8d:ec:be inet addr:192.168.111.107 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe8d:ecbe/64 RX packets:22573 errors:0 dropped:0 TX packets:2757 errors:0 dropped:0 collisions:0 txqueuelen:0 RX bytes:4927580 TX bytes:368895
eth0 Link encap:Ethernet HWaddr 00:0c:29:8d:ec:be inet6 addr: fe80::20c:29ff:fe8d:ecbe/64 RX packets:24388 errors:0 dropped:0 TX packets:2816 errors:0 dropped:0 collisions:0 txqueuelen:1000 RX bytes:5590438 TX bytes:411558
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host RX packets:146 errors:0 dropped:0 TX packets:146 errors:0 dropped:0 collisions:0 txqueuelen:0 RX bytes:10521 TX bytes:10521
virbr0 Link encap:Ethernet HWaddr 72:db:fb:f2:19:91 inet addr:192.168.122.1 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 RX packets:0 errors:0 dropped:0 TX packets:0 errors:0 dropped:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
用brctl show 查看当前linux bridge的配置,eth0已经挂载到br0上了
# brctl show
bridge name bridge id STP enabled interfacesbr0 8000.000c298decbe no eth0virbr0 8000.000000000000 yes
除了br0,大家应该注意到还有一个virbr0的bridge,而且virbr0上已经配置了ip地址192.168.122.1.virtbr0的作用我们在后面会介绍
在宿主机中,已经创建好了虚拟机vm1和vm2,现在处于关机状态
# virsh list --all
Id Name State
-------------------------------------
VM1 shut off
VM2 shut off
配置 VM1
使用virt-manager中查看一下vm1的网卡配置
可以看到虚拟网卡source device 我们选择的是br0,下面启动vm1,看发生什么
# virsh start VM1Domain VM1 started
# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000c298decbe no eth0 vnet0virbr0 8000.000000000000 yes
brctl show 告诉我们 br0 下面添加了一个 vnet0 设备,通过 virsh 确认这就是VM1的虚拟网卡。
# virsh domiflist VM1
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 rtl8139 52:54:00:75:dd:1a
VM1 的 IP 是 DHCP 获得的(设置静态 IP 当然也可以),通过 virt-manager 控制台登录 VM1,查看 IP。
# ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:00:75:dd:1a inet addr:192.168.111.106 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe75:dd1a/64 RX packets:400 errors:0 dropped:0 TX packets:101 errors:0 dropped:0 collisions:0 txqueuelen:1000 RX bytes:41950 TX bytes:12583
VM1 通过 DHCP 拿到的 IP 是 192.168.111.106,与宿主机(IP为192.168.111.107)是同一个网段。Ping 一下外网
root@VM1:~# ping www.baidu.com
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.from 180.97.33.108: icmp_seq=1 ttl=53 time=34.9 msfrom 180.97.33.108: icmp_seq=2 ttl=53 time=36.2 msfrom 180.97.33.108: icmp_seq=3 ttl=53 time=38.8 ms
没问题,可以访问。
另外,在 VM1 中虚拟网卡是 eth0,并不是 vnet0。vent0 是该虚拟网卡在宿主机中对应的设备名称,其类型是 TAP 设备,这里需要注意一下。
配置 VM2
跟 VM1 一样,VM2 的虚拟网卡也挂在 br0上,启动 VM1,查看网卡信息
# virsh start VM2
Domain VM2 started
# brctl show
bridge name bridge id STP enabled interfacesbr0 8000.000c298decbe no eth0 vnet0 vnet1virbr0 8000.000000000000 yes
br0 下面多了 vnet1,通过 virsh 确认这就是 VM2 的虚拟网卡。
# virsh domiflistVM2
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 rtl8139 52:54:00:cf:33:a1
VM2 通过 DHCP 拿到的 IP 是 192.168.111.108,登录 VM2,验证网络的连通性
Ping VM1
root@VM2:~# ping VM1
PING VM1 (192.168.111.106) 56(84) bytes of data.from 192.168.111.106: icmp_seq=1 ttl=64 time=4.54 msfrom 192.168.111.106: icmp_seq=2 ttl=64 time=1.63 msfrom 192.168.111.106: icmp_seq=3 ttl=64 time=2.16 ms
Ping 宿主机
root@VM2:~# ping 192.168.111.107
PING 192.168.111.107 (192.168.111.107) 56(84) bytes of data.from 192.168.111.107: icmp_seq=1 ttl=64 time=1.02 msfrom 192.168.111.107: icmp_seq=2 ttl=64 time=0.052 msfrom 192.168.111.107: icmp_seq=3 ttl=64 time=0.064 ms
Ping 外网
root@VM2:~# ping www.baidu.com
PING www.a.shifen.com (180.97.33.107) 56(84) bytes of data.from 180.97.33.107: icmp_seq=1 ttl=53 time=53.9 msfrom 180.97.33.107: icmp_seq=2 ttl=53 time=45.0 msfrom 180.97.33.107: icmp_seq=3 ttl=53 time=44.2 ms
可见,通过 br0 这个 Linux Bridge,我们实现了 VM1、VM2、宿主机和外网这四者之间的数据通信
centos6.7创建虚拟机:http://clovemfong.blog.51cto.com/3297559/1217837
centos6.7创建虚拟机注意事项,ifcfg-eth0,ifcfg-br0配置信息无空格.删除文件/etc/udev/rules.d/70-persistent-net.rules