每天学习openstack(4)

来源:互联网 发布:淘宝超级会员要买多少 编辑:程序博客网 时间:2024/06/06 18:27

明天要写的内容:  

虚拟化的命令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


0 0