云计算之OpenStack基础
- 一、OpenStack基础知识
- 二、虚拟化
- 2.1 虚拟化类型
- 2.1.1 Ⅰ型虚拟化
- 2.1.2 Ⅱ型虚拟化
- 2.1.3 比较
- 2.2 KVM(Ⅱ型虚拟化)
- 2.2.1 基本概念
- 2.2.2 Libvirt
- 2.2.3 CPU虚拟化
- 2.2.4 内存虚拟化
- 2.2.5 存储虚拟化
- 2.2.5.1 目录类型的 Storage Pool
- 2.2.5.2 LVM 类型的 Storage Pool
- 2.2.6 网络虚拟化
- 2.2.6.1 Linux Bridge网桥基本概念
- 2.2.6.2 Linux Bridge网桥配置
- 2.2.6.3 VLAN
- 三、云计算
- 3.1 基本概念
- 3.1.1 IT系统架构的发展过程
- 3.1.2 计算(CPU/内存)、存储和网络是 IT 系统的三类资源
- 3.1.3 云平台是一个面向服务的架构
- 3.2 云计算和 OpenStack
- 结束
一、OpenStack基础知识
- 计算节点:虚拟机实例的网络:
1)下图中A就是虚拟机VM1的虚拟网卡,和它相连的B是一个tap设备,通常是以tap开头的一段名称,它挂载在Linux Bridge qbr上面。tap
设备其实就是一个Linux内核虚拟化出来的一个网络接口,即虚拟网卡; - 计算节点:集成网桥(br-int)的网络:
1)集成网桥br-int
:是由OpenvSwitch虚拟化出来的网桥,但事实上它已经充当了一个虚拟交换机的功能了。br-int的主要职责就是把它所在的计算节点上的VM都连接到它这个虚拟交换机上面,然后利用br-tun的穿透功能,实现了不同计算节点上的VM连接在同一个逻辑上的虚拟交换机上面的功能,在br-int上面还有另一个端口E,它总是以patch-tun的形式出现,从字面就可以看出它是用来连接br-tun的。;
2)OpenvSwitch不支持现在的OpenStack的实现方式,因为OpenStack是把iptables规则丢在TAP设备中,以此实现了安全组功能。所以用了一个折衷的方式,在中间加一层,用Linux Bridge来实现,这就是qbr
网桥。在qbr上还存在另一个设备C,这也是一个TAP设备。C和br-int上的D连接在一起,形成一个连接通道,使得qbr和br-int之间顺畅通信。C通常以qvb开头,D通常以qvo开头; - 计算节点:通道网桥(br-tun)的网络:
1)通道网桥(br-tun):br-tun
同样是OpenvSwitch虚拟化出来的网桥,但是它不是用来充当虚拟交换机的,它的存在只是用来充当一个通道层,通过它上面的设备G与其他物理机上的br-tun通信,构成一个统一的通信层。这样的话,网络节点和计算节点、计算节点和计算节点这样就会点对点的形成一个以GRE
(GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的gre)为基础的通信网络,互相之间通过这个网络进行大量的数据交换。这样,网络节点和计算节点之间的通信就此打通了。而图中的G、H正是描述这一通信; - 网络节点:通道网桥(br-tun)的网络:
1)网络节点上也是存在一个br-tun,它的作用同计算节点上的br-tun,都是为了在整个系统中构建一个统一的通信层而存在的。所以,这一部分的网络同计算节点上的网络的功能是一致的。 - 网络节点:集成网桥(br-int)的网络:
1)网络节点上的br-int也是起了交换机的作用,它通过I、J与br-tun连接在一起。最终的要的是,在这个虚拟交换机上,还有其他两个重要的tap设备M、O,它们分别同N、P相连,而N、P作为tap设备则是分别归属两个namespace,router和dhcp(namespace
:用来实现隔离的一套机制,不同 namespace 中的资源之间彼此不可见),正如这两个namespace的名称所示,它们承担的就是router和dhcp的功能。
2)router是由l3-agent根据网络管理的需要而创建的,然后,该router就与特定一个子网绑定到一起,管理这个子网的路由功能。router实现路由功能,则是依靠在该namespace中的iptables实现的。
3)dhcp是l3-agent根据需要针对特定的子网创建的,在这个namespace中,l3-agent会启动一个dnsmasq的进程,由它来实际掌管该子网的dhcp功能。由于这个两个namespace都是针对特定的子网创建的,因而在现有的OpenStack系统中,它们常常是成对出现的。 - 网络节点:外部网桥(br-ex)的网络:
1)当数据从router中路由出来后,就会通过L、K传送到br-ex
这个虚拟网桥上,而br-ex实际上是混杂模式加载在物理网卡上,实时接收着网络上的数据包。至此,我们的计算节点上的VM就可以与外部的网络进行自由的通信了。当然,前提是我们要给这个VM已经分配了float-ip。
二、虚拟化
- 虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
- 物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
- 那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢:这个主要是通过一个叫做 Hypervisor 的程序实现的。根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:1型虚拟化和2型虚拟化
2.1 虚拟化类型
2.1.1 Ⅰ型虚拟化
- Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。
2.1.2 Ⅱ型虚拟化
- 物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。
2.1.3 比较
- 理论上讲:
- Ⅰ型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比Ⅱ型要高;
- Ⅱ型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
2.2 KVM(Ⅱ型虚拟化)
2.2.1 基本概念
- 在 x86 平台上最热门运用最广泛的虚拟化方案莫过于 KVM 了。OpenStack 对 KVM 支持得也最好。
KVM
全称是 Kernel-Based Virtual Machine,即 KVM 是基于 Linux 内核实现的。KVM有一个内核模块叫kvm.ko
,只用于管理虚拟 CPU 和内存;IO 的虚拟化,比如存储和网络设备由Linux内核和Qemu来实现。 - KVM作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。
2.2.2 Libvirt
Libvirt
是 KVM 的管理工具;Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。OpenStack 底层也使用 Libvirt,所以很有必要学习一下。- Libvirt 包含 3 个东西:后台 daemon 程序
libvirtd
、API 库
和命令行工具 virsh
;
1)libvirtd是服务程序,接收和处理 API 请求;
2)API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
3)virsh 是 KVM 命令行工具;
2.2.3 CPU虚拟化
- 查看 CPU 是否支持KVM虚拟化,在Linux系统中输入
grep -E '(vmx|svm)' /proc/cpuinfo)
命令,找到flags部分,如果其中输出有VMX或SVM,即表明支持虚拟化技术。- 一个 KVM 虚机在宿主机中其实是一个 qemu-kvm 进程,与其他 Linux 进程一样被调度,我们可以在运行一个虚拟机的宿主机上查看进程,先输入virsh list
查看宿主机中运行的虚拟机列表,再输入ps -elf | grep kvm1
查看结果:
- 虚机中的每一个虚拟 vCPU 则对应 qemu-kvm 进程中的一个线程:
- 上图中,宿主机有两个物理 CPU,上面起了两个虚机 VM1 和 VM2。VM1 有两个 vCPU,VM2 有 4 个 vCPU。可以看到 VM1 和 VM2 分别有2个和 4 个线程在两个物理 CPU 上调度。- CPU支持超配(overcommit),即虚机的 vCPU 总数可以超过物理 CPU 数量,这个特性使得虚机能够充分利用宿主机的 CPU 资源,但前提是在同一时刻,不是所有的虚机都满负荷运行。
2.2.4 内存虚拟化
- KVM 通过内存虚拟化共享物理系统内存,动态分配给虚拟机:
- 为了在一台机器上运行多个虚拟机,KVM 需要实现 VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)直接的地址转换。虚机 OS 控制虚拟地址到客户内存物理地址的映射 (VA -> PA),但是虚机 OS 不能直接访问实际机器内存,因此 KVM 需要负责映射物理内存到机器内存 (PA -> MA)。
- 内存也支持超配(overcommit),即所有虚机的内存之和可以超过宿主机的物理内存。
2.2.5 存储虚拟化
- KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。
- Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型。
- Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。
2.2.5.1 目录类型的 Storage Pool
-
KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool。那么 Volume 是该目录下面的文件了,一个文件就是一个 Volume。
-
如在创建虚拟机kvm1时,将镜像文件 cirros-0.3.3-x8664-disk.img 放到了 /var/lib/libvirt/images/目录下,文件 cirros-0.3.3-x8664-disk.img 也就是Volume,对于 kvm1 来说,就是它的启动磁盘了。
-
那 KVM 是怎么知道要把 /var/lib/libvirt/images 这个目录当做默认 Storage Pool 的呢?实际上 KVM 所有可以使用的 Storage Pool 都定义在宿主机的 /etc/libvirt/storage 目录下,每个 Pool 一个 xml 文件,默认有一个 default.xml,其内容如下:
-
注意:Storage Pool 的类型是 “dir”,目录的路径就是 /var/lib/libvirt/images。
-
在 virt-manager 中打开 kvm1 的配置页面,右键添加新硬件:
-
在默认 Pool 中创建一个 8G 的卷,点击 “Finish”:
-
可以看到新磁盘的信息:
-
在 /var/lib/libvirt/images/ 下多了一个 8G 的文件 kvm1.img:
-
使用文件做 Volume 有很多优点:存储方便、移植性好、可复制、可远程访问(
远程访问:是镜像文件不一定都放置到宿主机本地文件系统中,也可以存储在通过网络连接的远程文件系统,比如 网络文件系统NFS,或者是分布式文件系统中,比如 GlusterFS。这样镜像文件就可以在多个宿主机之间共享,便于虚机在不同宿主机之间做 Live Migration;如果是分布式文件系统,多副本的特性还可以保证镜像文件的高可用。
)。 -
KVM 支持多种 Volume 文件格式:在添加 Volume 时可以选择raw 是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。
-
qcow2 是推荐使用的格式,cow 表示 copy on write,能够节省磁盘空间,支持 AES 加密,支持 zlib 压缩,支持多快照,功能很多。vmdk 是 VMWare 的虚拟磁盘格式,也就是说 VMWare 虚机可以直接在 KVM上 运行。
2.2.5.2 LVM 类型的 Storage Pool
- 不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上 VG 中的 LV 也可以作为虚拟磁盘分配给虚拟机使用。不过,LV 由于没有磁盘的 MBR 引导记录,不能作为虚拟机的启动盘,只能作为数据盘使用。
- 这种配置下,宿主机上的 VG 就是一个 Storage Pool,VG 中的 LV 就是 Volume。LV 的优点是有较好的性能;不足的地方是管理和移动性方面不如镜像文件,而且不能通过网络远程使用。
- 下面举个例子。首先,在宿主机上创建了一个容量为 10G 的 VG,命名为 HostVG:
- 然后创建了一个 Storage Pool 的定义文件 /etc/libvirt/storage/HostVG.xml,内容为:
- 然后通过 virsh 命令创建新的 Storage Pool “HostVG”:
- 并启用这个 HostVG:
- 现在我们可以在 virt-manager 中为虚机 kvm1 添加 LV 的虚拟磁盘了:
- 点击 Browse:
- 可以看到 HostVG 已经在 Stroage Pool 的列表中了,选择 HostVG:
- 为 volume 命名为 newlv 并设置大小 100MB,点击 Finish:
- newlv 创建成功,点击 Choose Volume:
- 点击 Finish 确认将 newlv 作为 volume 添加到 kvm1:
- 新 volume 添加成功:
- 在宿主机上则多了一个命名为newlv的LV:
2.2.6 网络虚拟化
- 下图是OpenStack 官网给出的计算节点的虚拟网络逻辑图:
2.2.6.1 Linux Bridge网桥基本概念
- 假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是:如何让 VM1 能够访问外网?
- 至少有两种方案:
1)不推荐的方案: 将物理网卡eth0直接分配给VM1,但随之带来的问题很多: 宿主机就没有网卡,无法访问了;新的虚机,比如 VM2 也没有网卡;
2)推荐的方案: 给 VM1 分配一个虚拟网卡 vnet0,通过 Linux Bridge br0 将 eth0 和 vnet0 连接起来,如下图所
- Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能可以理解为是一个二层交换机或者 Hub。多个网络设备可以连接到同一个 Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。
- 在上面这个例子中,当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据;反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。
- 现在增加一个虚拟机VM2,如下图所示:VM2 的虚拟网卡 vnet1 也连接到了 br0 上。现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。
2.2.6.2 Linux Bridge网桥配置
配置 Linux Bridge br0
- 在宿主机中编辑 /etc/network/interfaces,配置 br0,下面用
vimdiff
展示了对 /etc/network/interfaces 的修改:
- 有两点需要注意:
1)之前宿主机的 IP 是通过 dhcp 配置在 eth0 上的;创建 Linux Bridge 之后,IP 就必须放到 br0 上;
2)在 br0 的配置信息中最后一行bridge_ports eth0
,其作用就是将 eth0 挂到 br0 上; - 重启宿主机,查看 IP 配置,可以看到 IP 已经放到 br0 上了:
- 用
brctl show
查看当前 Linux Bridge 的配置,eth0 已经挂到 br0 上了:
- 除了 br0,大家应该注意到还有一个 virbr0 的 Bridge,而且 virbr0 上已经配置了 IP 地址 192.168.122.1。virbr0 的作用我们会在后面介绍。
- 在宿主机中 提前创建好虚机 VM1 和 VM2,现在都处于关机状态,使用
virsh list --all
命令查看:
配置 VM1
- 我们在 virt-manager 中查看一下 VM1 的网卡配置:可以看到虚拟网卡的 source device 我们选择的是 br0;
- 启动 VM1:
- brctl show 告诉我们 br0 下面添加了一个 vnet0 设备,通过 virsh 确认这就是VM1的虚拟网卡:
- VM1 的 IP 是 DHCP 获得的(设置静态 IP 当然也可以),通过 virt-manager 控制台登录 VM1,查看 IP:
- VM1 通过 DHCP 拿到的 IP 是 192.168.111.106,与宿主机(IP为192.168.111.107)是同一个网段。
- Ping 一下外网:
- 可以访问。另外,在 VM1 中虚拟网卡是 eth0,并不是 vnet0。 vent0 是该虚拟网卡在宿主机中对应的设备名称,其类型是 TAP 设备,这里需要注意一下。
配置 VM2
- 跟 VM1 一样,VM2 的虚拟网卡也挂在 br0上,启动 VM2,查看网卡信息:
- br0 下面多了 vnet1,通过 virsh 确认这就是 VM2 的虚拟网卡:
- VM2 通过 DHCP 拿到的 IP 是 192.168.111.108,登录 VM2,验证网络的连通性:
- 可见,通过 br0 这个 Linux Bridge,我们实现了 VM1、VM2、宿主机和外网这四者之间的数据通信。
配置使用 virbr0
-
virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。
-
在 virt-manager 打开 VM1 的配置界面,网卡 Source device 选择 “default”,将 VM1 的网卡挂在 virbr0 上
-
启动VM1,brctl show 可以查看到 vnet0 已经挂在了 virbr0 上:
-
用 virsh 命令确认 vnet 就是 VM1 的虚拟网卡:
-
virbr0 使用 dnsmasq 提供 DHCP 服务,可以在宿主机中查看该进程信息:在 /var/lib/libvirt/dnsmasq/ 目录下有一个 default.leases 文件
-
当 VM1 成功获得 DHCP 的 IP 后,可以在该文件中查看到相应的信息:
-
上面显示 192.168.122.6 已经分配给 MAC 地址为 52:54:00:75:dd:1a 的网卡,这正是 vnet0 的 MAC。
-
之后就可以使用该 IP 访问 VM1 了:
-
没有问题,可以访问外网,说明 NAT 起作用了。
-
需要说明的是,使用 NAT 的虚机 VM1 可以访问外网,但外网无法直接访问 VM1。 因为 VM1 发出的网络包源地址并不是 192.168.122.6,而是被 NAT 替换为宿主机的 IP 地址了。
-
这个与使用 br0 不一样,在 br0 的情况下,VM1 通过自己的 IP 直接与外网通信,不会经过 NAT 地址转换。
2.2.6.3 VLAN
-
LAN 表示 Local Area Network,本地局域网:通常使用 Hub 和 Switch 来连接 LAN 中的计算机。一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。一个 LAN 表示一个广播域。 其含义是:LAN 中的所有成员都会收到任意一个成员发出的广播包。
-
VLAN 表示 Virtual LAN:一个带有 VLAN 功能的switch 能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。 简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。
-
比方说,有两组机器,Group A 和 B。我们想配置成 Group A 中的机器可以相互访问,Group B 中的机器也可以相互访问,但是 A 和 B 中的机器无法互相访问:
1)一种方法是使用两个交换机,A 和 B 分别接到一个交换机;
2)另一种方法是使用一个带 VLAN 功能的交换机,将 A 和 B 的机器分别放到不同的 VLAN 中。 -
请注意,VLAN 的隔离是二层上的隔离,A 和 B 无法相互访问指的是二层广播包(比如 arp)无法跨越 VLAN 的边界。但在三层上(比如IP)是可以通过路由器让 A 和 B 互通的。概念上一定要分清。 现在的交换机几乎都是支持 VLAN 的。
-
通常交换机的端口有两种配置模式: Access 和 Trunk。看下图:
-
Access 口:
这些端口被打上了 VLAN 的标签,表明该端口属于哪个 VLAN。 不同 VLAN 用 VLAN ID 来区分,VLAN ID 的 范围是 1-4096。Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。 Access 口只能属于一个 VLAN。 -
Trunk 口:
假设有两个交换机 A 和 B。 A 上有 VLAN1(红)、VLAN2(黄)、VLAN3(蓝);B 上也有 VLAN1、2、3那如何让 AB 上相同 VLAN 之间能够通信呢?办法是将 A 和 B 连起来,而且连接 A 和 B 的端口要允许 VLAN1、2、3 三个 VLAN 的数据都能够通过。这样的端口就是Trunk口了。 VLAN1、2、3 的数据包在通过 Trunk 口到达对方交换机的过程中始终带着自己的 VLAN 标签。 -
KVM 虚拟化环境下是如何实现 VLAN?如下图:
1)eth0 是宿主机上的物理网卡,有一个命名为 eth0.10 的子设备与之相连;
2)eth0.10 就是 VLAN 设备了,其 VLAN ID 就是 VLAN 10;
3)eth0.10 挂在命名为 brvlan10 的 Linux Bridge 上,虚机 VM1 的虚拟网卡 vent0 也挂在 brvlan10 上;
4)这样的配置其效果就是: 宿主机用软件实现了一个交换机(当然是虚拟的),上面定义了一个 VLAN10;
eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一个 Trunk 口。VM1 通过 vnet0 发出来的数据包会被打上 VLAN10 的标签;
5)eth0.10 的作用是:定义了 VLAN10;
6) brvlan10 的作用是:Bridge 上的其他网络设备自动加入到 VLAN10 中。 -
再增加一个 VLAN20,见下图:
-
这样虚拟交换机就有两个 VLAN 了,VM1 和 VM2 分别属于 VLAN10 和 VLAN20。对于新创建的虚机,只需要将其虚拟网卡放入相应的 Bridge,就能控制其所属的 VLAN。
-
VLAN 设备总是以母子关系出现,母子设备之间是一对多的关系。一个母设备(eth0)可以有多个子设备(eth0.10,eth0.20 ……),而一个子设备只有一个母设备。
-
在实验环境中实施和配置如下 VLAN 网络:
-
1)配置VLAN
编辑 /etc/network/interfaces,配置 eth0.10、brvlan10、eth0.20 和 brvlan20,下面用 vmdiff 展示了对 /etc/network/interfaces 的修改:
重启宿主机,ifconfig 各个网络接口:
用 brctl show 查看当前 Linux Bridge 的配置:eth0.10 和 eth0.20 分别挂在 brvlan10 和 brvlan20上 了
在宿主机中已经提前创建好了虚机 VM1 和 VM2,现在都处于关机状态
-
2)配置VM1
在 virt-manager 中将 VM1 的虚拟网卡挂到 brvlan10 上:
启动VM1:
查看 Bridge,发现 brvlan10 已经连接了一个 vnet0 设备:
通过 virsh 确认这就是 VM1 的虚拟网卡:
-
3)配置VM2
类似的,将 VM2 的网卡挂在 brvlan20 上:
启动VM2:
查看 Bridge,发现 brvlan20 已经连接了一个 vnet1 设备:
通过 virsh 确认这就是 VM2 的虚拟网卡:
-
4)验证 VLAN 的隔离性:为了验证 VLAN10 和 VLAN20 之间的隔离,我们为 VM1 和 VM2 配置同一网段的 IP。
配置 VM1 的 IP:
配置 VM2 的 IP:
Ping 测试结果: VM1 与 VM2 是不通的:
原因如下:
(1)VM2 向 VM1 发 Ping 包之前,需要知道 VM1 的 IP 192.168.100.10 所对应的 MAC 地址。VM2 会在网络上广播 ARP 包,其作用就是问 “谁知道 192.168.100.10 的 MAC 地址是多少?”
(2)ARP 是二层协议,VLAN 的隔离作用使得 ARP 只能在 VLAN20 范围内广播,只有 brvlan20 和 eth0.20 能收到,VLAN10 里的设备是收不到的。VM1 无法应答 VM2 发出的ARP包。
(3) VM2 拿不到 VM1 vnet0 的 MAC 地址,也就 Ping 不到 VM1。 -
5)Linux Bridge + VLAN = 虚拟交换机
现在对 KVM 的网络虚拟化做个总结
(1)物理交换机存在多个 VLAN,每个 VLAN 拥有多个端口。 同一 VLAN 端口之间可以交换转发,不同 VLAN 端口之间隔离。所以交换机其包含两层功能:交换与隔离。
(2)Linux 的 VLAN 设备实现的是隔离功能,但没有交换功能。一个 VLAN 母设备(比如 eth0),不能拥有两个相同 ID 的 VLAN 子设备,因此也就不可能出现数据交换情况。
(3)Linux Bridge 专门实现交换功能。
将同一 VLAN 的子设备都挂载到一个 Bridge 上,设备之间就可以交换数据了。
(4)总结起来,Linux Bridge 加 VLAN 在功能层面完整模拟现实世界里的二层交换机。eth0 相当于虚拟交换机上的 trunk 口,允许 vlan10 和 vlan20 的数据通过;eth0.10,vent0 和 brvlan10 都可以看着 vlan10 的 access 口;eth0.20,vent1 和 brvlan20 都可以看着 vlan20 的 access 口。
三、云计算
3.1 基本概念
3.1.1 IT系统架构的发展过程
- 要理解云计算,需要对IT系统架构的发展过程有所认识,请看下图:
- IT系统架构的发展到目前为止大致可以分为3个阶段:
1)物理机架构
这一阶段,应用部署和运行在物理机上。比如企业要上一个ERP系统,如果规模不大,可以找3台物理机,分别部署Web服务器、应用服务器和数据库服务器。如果规模大一点,各种服务器可以采用集群架构。但每个集群成员也还是直接部署在物理机上。 我见过的客户早期都是这种架构,一套应用一套服务器,通常系统的资源使用率都很低,达到20%的都是好的。
2)虚拟化架构
摩尔定律决定了物理服务器的计算能力越来越强,虚拟化技术的发展大大提高了物理服务器的资源使用率。这个阶段,物理机上运行若干虚拟机,应用系统直接部署到虚拟机上。虚拟化的好处还体现在减少了需要管理的物理机数量,同时节省了维护成本。
3)云计算架构
虚拟化提高了单台物理机的资源使用率,随着虚拟化技术的应用,IT环境中有越来越多的虚拟机,这时新的需求产生了:如何对IT环境中的虚拟机进行统一和高效的管理。有需求就有供给,云计算登上了历史舞台。
3.1.2 计算(CPU/内存)、存储和网络是 IT 系统的三类资源
- 云计算是一种实施模式,其中存储、服务器、应用等均通过互联网交付。它以即服务形式按需提供,通常采用即用即付模式
- 云”并不是某一物理位置,而是一种管理 IT 资源的方法,能够很大程度上取代本地设备和私有数据中心。在云计算模式下,用户可以访问经由远程提供商在线提供的虚拟计算、网络和存储资源。用户无需购买和维护大量的计算、存储和其他 IT 基础设施,也无需掌握管理设备所需的内部经验,一切均可交由云服务提供商处理。
- 通过云计算平台,这三类资源变成了三个池子。 当需要虚机的时候,只需要向平台提供虚机的规格。 平台会快速从三个资源池分配相应的资源,部署出这样一个满足规格的虚机。 虚机的使用者不再需要关心虚机运行在哪里,存储空间从哪里来,IP是如何分配,这些云平台都搞定了。
3.1.3 云平台是一个面向服务的架构
- 按照提供服务的不同分为 IaaS、PaaS 和 SaaS,如下图所示:
- IaaS(Infrastructure as a Service,基础设施即服务)提供的服务是虚拟机。
IaaS 负责管理虚机的生命周期,包括创建、修改、备份、启停、销毁等。 使用者从云平台得到的是一个已经安装好镜像(操作系统+其他预装软件)的虚拟机。 使用者需要关心虚机的类型(OS)和配置(CPU、内存、磁盘),并且自己负责部署上层的中间件和应用。 IaaS 的使用者通常是数据中心的系统管理员。 典型的 IaaS 例子有 AWS、Rackspace、阿里云等 - PaaS(Platform as a Service,平台即服务)提供的服务是应用的运行环境和一系列中间件服务(比如数据库、消息队列等)。
使用者只需专注应用的开发,并将自己的应用和数据部署到PaaS环境中。PaaS负责保证这些服务的可用性和性能。PaaS的使用者通常是应用的开发人员。典型的 PaaS 有 Google App Engine、IBM BlueMix 等 - SaaS(Software as a Service,软件即服务)提供的是应用服务。
使用者只需要登录并使用应用,无需关心应用使用什么技术实现,也不需要关系应用部署在哪里。SaaS的使用者通常是应用的最终用户。典型的 SaaS 有 Google Gmail、Salesforce 等
3.2 云计算和 OpenStack
- OpenStack 对数据中心的计算、存储和网络资源进行统一管理。 由此可见,OpenStack 针对的是 IT 基础设施,是 IaaS 这个层次的云操作系统。
结束
参考: https://www.xjimmy.com/openstack-5min