云计算之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 比较

  • 理论上讲:
  1. Ⅰ型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比Ⅱ型要高;
  2. Ⅱ型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在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 程序 libvirtdAPI 库命令行工具 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基础相关推荐

  1. 【转】《从入门到精通云服务器》第六讲—OpenStack基础

    前五期的<从入门到精通云服务器>受到了广泛好评,收到留言,有很多读者对云计算相关的技术非常感兴趣.应观众要求,我们这期要安利一条纯技术内容.准备好瓜子.花生,随小编一起进入OpenStac ...

  2. 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读

    目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...

  3. Openstack基础架构和各组件的关系

    Openstack基础架构和各组件的关系 原创SL_World 最后发布于2017-12-12 15:05:04 阅读数 15817  收藏 展开 Openstack简介         OpenSt ...

  4. OpenStack 基础知识

    OpenStack 基础知识 文章目录 OpenStack 基础知识 前言 一.虚拟化 1.I型虚拟化 2.II型虚拟化 二.KVM & Libvirt 前言 了解openstack之前需要掌 ...

  5. 云计算之OpenStack架构详解

    总体框架: OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公 ...

  6. 华为云计算之储存基础知识

    华为云计算之储存基础知识 一.磁盘接口 1.IDE接口 2.sata接口 ①sata接口介绍 ②sata接口特点 3.SCSI接口 ①scsi接口介绍 ②scsi接口连接示意图 4..SAS接口 5. ...

  7. 云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)

    "云计算" 算是近年来最热的词了.现在 IT 行业见面不说这三个字您都不好意思跟人家打招呼. 对于云计算,学术界有各种定义,大家有兴趣可以百度一下. CloudMan 这里主要想从 ...

  8. 漫谈云计算与OpenStack的前世今生

    漫谈云计算与OpenStack的前世今生 启迪云Tuscloud 2018-12-11 17:51:14 如今,大家天天听到媒体说云计算.OpenStack,它们到底是什么呢? 云计算(Cloud C ...

  9. 云计算系统测试技术基础

    1.什么是云计算 云计算是云计算(Grid Computing ).分布式计算(Distributed Computing).并行计算(Parallel Computing).效用计算(Utility ...

最新文章

  1. linux创建ftp指定目录命令行,Linux-命令行建立FTP
  2. Android发展Singleton模式
  3. Chrome浏览器相关细节整理
  4. css background-attachment:fixed 固定背景、不随内容一起滚动
  5. OpenSSL原理与实现
  6. python代码计算矩形面积_Python面积计算器源代码
  7. Yii2 Start Process and File Loading
  8. 华硕笔记本的U盘启动
  9. matlab画图画点画直线
  10. python:实现希尔密码算法(附完整源码)
  11. 智象运维干货 | HP iLo4 Smash CLP命令行参考
  12. assume用法及意思_assume的用法和例句
  13. 用python做乘法口诀表_如何用python编写乘法口诀表
  14. 如何强制Windows在文件资源管理器中显示所有驱动器
  15. NP架构-汇聚层路由器完美选择
  16. linux 6.5光驱是什么意思,linux 6和5有什么不同
  17. 可可英语奇文老师 中高级词汇记忆方法(免费下载)
  18. 接受密码和用户名,若用户名为‘admin‘,密码为‘‘123456‘则显示用户登录成功,否则一直登录
  19. 机房温度远程监控方案
  20. 计算机开机出现ROM,求助电脑开机问题

热门文章

  1. linux数据库入门
  2. React+SpringBoot通过WebSocket实时统计在线人数
  3. java cqrs架构_CQRS框架:AxonFramework 之 Hello World
  4. 【收藏】它绝对是最适合自学的Python教材!
  5. iOS手机定位层级问题
  6. Android 4.4 使用 JuiceSSH(chroot)运行 Alpine Linux
  7. 打印机服务print spooler 无法启动 错误代码1068
  8. 【软件测试】大学毕业后顶着压力,巧合的开启了我人生的新篇章......
  9. 形象理解Api和SDK
  10. 两台电脑怎么在同一个路由下访问共享文件夹?​