云计算之OpenStack基础
云计算之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 这个层次的云操作系统。
云计算之OpenStack基础相关推荐
- 【转】《从入门到精通云服务器》第六讲—OpenStack基础
前五期的<从入门到精通云服务器>受到了广泛好评,收到留言,有很多读者对云计算相关的技术非常感兴趣.应观众要求,我们这期要安利一条纯技术内容.准备好瓜子.花生,随小编一起进入OpenStac ...
- 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读
目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...
- Openstack基础架构和各组件的关系
Openstack基础架构和各组件的关系 原创SL_World 最后发布于2017-12-12 15:05:04 阅读数 15817 收藏 展开 Openstack简介 OpenSt ...
- OpenStack 基础知识
OpenStack 基础知识 文章目录 OpenStack 基础知识 前言 一.虚拟化 1.I型虚拟化 2.II型虚拟化 二.KVM & Libvirt 前言 了解openstack之前需要掌 ...
- 云计算之OpenStack架构详解
总体框架: OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公 ...
- 华为云计算之储存基础知识
华为云计算之储存基础知识 一.磁盘接口 1.IDE接口 2.sata接口 ①sata接口介绍 ②sata接口特点 3.SCSI接口 ①scsi接口介绍 ②scsi接口连接示意图 4..SAS接口 5. ...
- 云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)
"云计算" 算是近年来最热的词了.现在 IT 行业见面不说这三个字您都不好意思跟人家打招呼. 对于云计算,学术界有各种定义,大家有兴趣可以百度一下. CloudMan 这里主要想从 ...
- 漫谈云计算与OpenStack的前世今生
漫谈云计算与OpenStack的前世今生 启迪云Tuscloud 2018-12-11 17:51:14 如今,大家天天听到媒体说云计算.OpenStack,它们到底是什么呢? 云计算(Cloud C ...
- 云计算系统测试技术基础
1.什么是云计算 云计算是云计算(Grid Computing ).分布式计算(Distributed Computing).并行计算(Parallel Computing).效用计算(Utility ...
最新文章
- linux创建ftp指定目录命令行,Linux-命令行建立FTP
- Android发展Singleton模式
- Chrome浏览器相关细节整理
- css background-attachment:fixed 固定背景、不随内容一起滚动
- OpenSSL原理与实现
- python代码计算矩形面积_Python面积计算器源代码
- Yii2 Start Process and File Loading
- 华硕笔记本的U盘启动
- matlab画图画点画直线
- python:实现希尔密码算法(附完整源码)
- 智象运维干货 | HP iLo4 Smash CLP命令行参考
- assume用法及意思_assume的用法和例句
- 用python做乘法口诀表_如何用python编写乘法口诀表
- 如何强制Windows在文件资源管理器中显示所有驱动器
- NP架构-汇聚层路由器完美选择
- linux 6.5光驱是什么意思,linux 6和5有什么不同
- 可可英语奇文老师 中高级词汇记忆方法(免费下载)
- 接受密码和用户名,若用户名为‘admin‘,密码为‘‘123456‘则显示用户登录成功,否则一直登录
- 机房温度远程监控方案
- 计算机开机出现ROM,求助电脑开机问题
热门文章
- linux数据库入门
- React+SpringBoot通过WebSocket实时统计在线人数
- java cqrs架构_CQRS框架:AxonFramework 之 Hello World
- 【收藏】它绝对是最适合自学的Python教材!
- iOS手机定位层级问题
- Android 4.4 使用 JuiceSSH(chroot)运行 Alpine Linux
- 打印机服务print spooler 无法启动 错误代码1068
- 【软件测试】大学毕业后顶着压力,巧合的开启了我人生的新篇章......
- 形象理解Api和SDK
- 两台电脑怎么在同一个路由下访问共享文件夹?​