OpenStack存储、成像、仪表盘与网络详解
立即解锁
发布时间: 2025-08-13 01:36:37 阅读量: 5 订阅数: 7 


OpenStack云应用开发实战指南
### OpenStack存储、成像、仪表盘与网络详解
#### 1. 公共容器与访问控制列表(ACLs)
在OpenStack中,如果应用程序仅在容器中存储公共文档,可使用OpenStack Swift ACLs将其标记为公共容器。临时URL密钥可作为账户元数据存储。ACLs可存储在容器级别(X - Container - Read)以允许公共访问或列出容器,也可存储在账户级别(X - Account - Access - Control)以允许其他账户访问该账户。
容器级ACLs格式为 `[item[,item…]]`,可组合使用。有两个概念可用:引用授权(如 `.referrer:example.com` 或 `.r:example.com` 以缩短列表长度)和列出容器对象的能力(`.rlistings`)。
以下是允许任何人访问并列出容器中公共文档的操作步骤:
1. 设置新的ACL:
```bash
$ swift post -r '.r:*,.rlistings' os-book
```
2. 列出容器 “os - book” 的元数据:
```bash
$ swift stat os-book
```
输出结果示例:
```plaintext
Account: AUTH_account
Container: os‐book
Objects: 42
Bytes: 0
Read ACL: .r:*,.rlistings
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Trans-Id: 5B44C388:D847_5CDEF18E:01BB_55C72C0D_155E:1586
X-Storage-Policy: Policy-0
Connection: close
X-Timestamp: 1439116292-30845
Content-Type: text/plain; charset=utf-8
```
#### 2. 块存储理解
使用OpenStack计算实例时,可能需要额外的存储,可将其作为卷挂载到实例中,这种存储称为 “块存储”。每个块在单个实例中作为独立卷使用,由OpenStack块存储服务(Cinder)提供。Cinder提供访问和挂载卷的目标,使其在实例中可用。
Cinder支持多种存储后端驱动,主要的存储后端技术如下表所示:
| 存储后端技术 | 描述 |
| ---- | ---- |
| Ceph | 分布式可扩展存储解决方案,可用于对象存储(RADOS)、块存储(RBD)和共享文件系统(Ceph FS)。Ceph块设备(RBD)可调整大小、支持精简配置,数据存储在RADOS中,并跨多个存储守护进程(OSD)进行条带化。 |
| Gluster | 分布式共享文件系统,可作为块存储后端和对象存储后端,在OpenStack中与网络文件存储(NFS)类似。 |
| ZFS | 与现有文件系统相比有巨大进步,支持几乎无限的存储大小,简化文件系统的管理和安全。在硬盘和文件系统之间有额外的抽象层(卷管理器),支持强大的快照系统,使用校验和和写时复制方法确保数据完整性,提供scrub功能检查数据完整性。 |
| LVM | 逻辑卷管理,允许将多个本地硬盘作为单个卷管理,类似于ZFS,但在单个服务器上。作为Nova驱动,可在Nova主机的实例中配置本地硬盘。 |
#### 3. 成像
OpenStack计算服务(Nova)存储和访问两种实例镜像:用于创建实例的模板和实例快照。计算服务使用成像服务(Glance)获取和存储这些镜像的数据和详细信息。
镜像详细信息包括:
- 镜像的可显示名称(如Debian Jessie)
- 磁盘格式(如QCOW2、RAW)
- 镜像大小和运行所需的最小资源
- 镜像状态(如排队、保存、活动)
- 镜像的校验和
镜像的主要使用场景有:
- 作为基础设施的基础镜像,使用配置工具从头创建和配置新实例。
- 从现有实例获取快照,用于创建具有相同配置的实例、恢复实例备份或调整实例大小。
- 使用标准镜像格式在不同基础设施、区域、提供商和虚拟机管理程序之间迁移实例。
镜像详细信息存储在关系数据库(默认MySQL)中,镜像数据可通过多种方式存储:
- 本地文件系统(默认存储解决方案)
- 块存储
- 对象存储
- VMware数据存储
常见的存储方式是使用基础设施本身存储镜像,可将其展平为单个文件(如QCOW2、RAW)存储在对象存储服务中,或使用块存储服务将其作为块存储。
不同的镜像格式如下表所示:
| 磁盘格式 | 描述 |
| ---- | ---- |
| Raw | 最简单的格式,是设备数据的无结构精确副本,通常文件较大,部分空间未使用。 |
| QCOW2 | QEMU Copy on Write,使用压缩策略,延迟存储大小分配,可扩展,支持写时复制功能。 |
| VHD | 虚拟硬盘,几乎是微软技术(Windows和Hyper - V)的标准,可直接附加到Windows系统,可直接修改、备份和恢复。 |
| VMDK | VMware默认镜像格式,支持多种配置策略,包括精简配置。 |
镜像的额外信息(如元数据)可存储在外部容器中,常见的容器格式是OVF(Open Virtualization Format),是基于XML描述文件的开放标准。
#### 4. 仪表盘
OpenStack包含名为Horizon的仪表盘项目,它是一个使用Django框架和OpenStack服务API构建的Web界面。
Horizon仪表盘提供的图形用户界面(GUI)是开始使用OpenStack及其组件的好方法,可通过简单的设置助手启动第一个实例,创建第一个Swift容器,管理一些资源。
当OpenStack项目较小时,使用GUI可简化日常操作,但当有数百或数千个实例和网络,且需要使用非基本功能时,GUI的扩展性不佳。此时,可使用命令行(CLI)或OpenStack API来管理账户或基础设施,实现自动化部署、管理和使用OpenStack资源。命令行实现了所有API,可用于测试功能、发现API方法及其请求和响应格式,也可编写脚本自动化日常管理任务。
#### 5. 网络
OpenStack的网络服务负责在云内以及云内实例与外部世界之间提供网络连接。OpenStack提供两种不同的网络服务:
- 旧版解决方案是Nova计算模块的一部分,称为nova - network或 “Nova网络”。
- Neutron项目提供新的网络解决方案,功能更强大、更灵活。
两种解决方案都提供两种类型的IP地址:
- 私有IP地址:VM实例自身可见的地址,用于云内实例之间的通信。
- 浮动IP地址:可从云外部(通常是公共互联网)访问的地址,通过网络地址转换(NAT)指向特定VM实例。浮动IP地址可在VM创建时关联,也可随时移动到其他VM。
OpenStack网络中的另一个重要概念是提供商网络和租户网络的区别:
- 提供商网络:由管理员在OpenStack中创建,提供物理网络基础设施的部分信息,用于管理云与物理网络之间的连接,可通过浮动IP地址提供外部访问,或为VM提供物理基础设施子网的IP地址。
- 租户网络:由普通用户创建,与其他租户隔离,由所有者控制,是否直接映射到底层物理网络取决于云管理员设置的分段策略。
Nova网络已被弃用,但一些现有云仍在使用。它提供简单的网络解决方案,拓扑和配置灵活性有限,租户对拓扑控制较少,通常配置为所有租户共享的单个 “扁平” 网络或每个租户一个VLAN。
Neutron网络是OpenStack中的新独立网络服务,作为软件定义网络解决方案,可创建复杂的租户拓扑,并与各种供应商的SDN产品集成。Neutron有独立的网络节点,处理高级服务(如负载均衡即服务、防火墙即服务、虚拟专用网络即服务),并提供与外部世界的连接。
在传统环境中部署三层应用需要购买和配置大量硬件设备,而在软件定义的世界中,复杂性转移到软件层。硬件层通常是统一的服务器机架,连接到脊叶网络架构。新应用的部署和退役无需为其专门配置硬件设备,通过自动化和纯软件网络设备在一致的硬件上覆盖网络,可大大缩短应用部署时间,实现可重复的模板化部署。
Neutron提供丰富的可插拔接口,允许第三方供应商集成到Neutron服务中,扩展其功能。
Neutron的核心对象模型包括:
- 网络:对应第2层广播域,类似于物理世界中的单个 “电线”,交换机通过转发以太网帧和VLAN划分广播域,Neutron的网络模型捕获了这一概念。
- 子网:提供第3层连接,提供IP地址,使Neutron路由器能够在网络之间传输流量。创建路由器时可指定高可用性(HA)或分布式虚拟路由器(DVR),但DVR有一些限制。
- 端口:与网络关联,类似于物理世界中的交换机端口,是连接到网络的点,在Neutron中,端口还自动关联一个或多个IP地址。
- 安全组:提供简单的防火墙功能,可定义入站和出站流量规则,默认安全组允许组内实例之间的流量和出站流量,但限制所有入站流量。
- 子网池:Kilo版本引入的概念,是IP网络前缀的集合,租户可从中分配子网,简化子网分配过程。
- 地址范围:Liberty版本引入的概念,代表唯一的第3层地址空间,用于防止多个用户意外创建重叠的IP地址空间,更好地控制路由。
Neutron的关键特性之一是覆盖网络,它是在物理网络上对网络流量进行分段的一种方式。从VM的角度看,似乎只有一个普通网络,但实际上是Neutron创建的假象,数据在数据中心的不同物理边界之间移动。覆盖网络可分离租户流量,充分利用底层物理基础设施。
最简单和最常见的覆盖网络形式是VLAN,它通过12位数字标记以太网帧,使物理网络设备能够区分不同VLAN的流量。但VLAN的12位标记最多只能提供4096个VLAN,在大型多租户云中可能不够用。OpenStack参考实现中使用的其他技术有虚拟可扩展局域网(VXLAN)和通用路由封装(GRE),它们基于第3层技术,通过将数据封装在IP数据包中来工作,可使覆盖网络跨越更大的网络。
以下是一个简单的mermaid流程图,展示Neutron网络中数据包的基本传输流程:
```mermaid
graph LR
A[VM] -->|发送数据包| B(Neutron网络)
B -->|根据配置| C{是否跨子网}
C -->|是| D(Neutron路由器)
C -->|否| E(同一子网传输)
D -->|处理| F(网络节点)
F -->|转发| G[外部网络或其他VM]
E -->|直接传输| G
```
### OpenStack存储、成像、仪表盘与网络详解
#### 6. 网络功能深入剖析
在OpenStack的网络体系中,Neutron网络的一些功能细节值得深入探讨。
##### 6.1 分布式虚拟路由器(DVR)
分布式虚拟路由器(DVR)是Neutron网络中的一个重要特性。在早期版本中,不同子网之间的所有第3层流量都要经过网络节点,即便这些流量是在同一计算节点上的VM之间。而在Juno版本中,DVR功能被添加进来,实现了计算节点上的本地路由。
不过,DVR也存在一些局限性。截至Kilo版本,DVR在处理东西向(VM之间)流量时与防火墙即服务(FWaaS)不兼容。并且,为了处理分布式浮动IP地址,计算节点需要有公共IP。
##### 6.2 安全组与防火墙即服务(FWaaS)
安全组提供了简单的防火墙功能,默认安全组允许组内实例之间的流量和出站流量,但限制所有入站流量。对于更复杂的安全需求,可以使用防火墙即服务(FWaaS)项目。
安全组规则的配置步骤如下:
1. 登录OpenStack控制台或使用命令行工具。
2. 找到安全组设置选项。
3. 定义入站和出站流量规则,例如允许特定IP地址范围的流量、特定端口的流量等。
以下是一个使用命令行创建安全组规则的示例:
```bash
# 创建一个新的安全组
openstack security group create my-security-group
# 添加入站规则,允许TCP端口22的流量
openstack security group rule create --proto tcp --dst-port 22 my-security-group
```
##### 6.3 子网池与地址范围
子网池和地址范围是Neutron网络中用于简化IP地址管理的重要概念。
子网池是Kilo版本引入的,它是IP网络前缀的集合,租户可以从中分配子网。这使得租户无需提前确定具体的子网,只需向子网池请求特定大小的子网即可。例如,云管理员可以创建一个子网池 `10.10.0.0/16`,租户可以请求从这个子网池中分配一个 `/24` 的子网。
地址范围是Liberty版本引入的,它代表唯一的第3层地址空间。在Neutron中,不同网络上可以创建相同的子网CIDR,这可能导致IP地址重叠。地址范围的引入可以防止多个用户意外创建重叠的IP地址空间,更好地控制路由。
#### 7. 存储与成像的优化建议
在OpenStack的存储和成像方面,有一些优化建议可以提高性能和效率。
##### 7.1 存储后端选择
不同的存储后端适用于不同的场景。例如:
| 存储后端 | 适用场景 |
| ---- | ---- |
| Ceph | 适用于需要高可用性、可扩展性和分布式存储的场景,如大规模的云环境。 |
| Gluster | 对于需要共享文件系统的场景较为合适,可作为块存储和对象存储后端。 |
| ZFS | 适合对数据完整性和管理简化有较高要求的场景,支持强大的快照和数据校验功能。 |
| LVM | 在单个服务器上管理多个本地硬盘时使用,可作为Nova驱动配置本地硬盘。 |
##### 7.2 镜像存储方式选择
镜像数据的存储方式也会影响性能。如果希望使用与块存储服务相同的存储基础设施,并且能够直接附加镜像而无需下载,可以选择将镜像作为块存储。如果主要使用成像服务存储大量快照作为备份,将镜像展平为单个文件存储在对象存储服务中可能更合适,这样可以方便地上传和下载镜像。
##### 7.3 镜像格式选择
不同的镜像格式具有不同的特点,选择合适的镜像格式可以提高性能和灵活性。例如:
- Raw格式适用于需要精确复制设备数据的场景,但文件较大,空间利用率低。
- QCOW2格式使用压缩策略,延迟存储大小分配,可扩展,支持写时复制功能,适合需要动态扩展和节省空间的场景。
- VHD格式在微软技术环境中使用方便,可直接附加到Windows系统。
- VMDK格式是VMware默认镜像格式,支持多种配置策略,适合在VMware环境中使用。
#### 8. 总结
OpenStack的存储、成像、仪表盘和网络功能构成了一个复杂而强大的云计算生态系统。通过合理使用公共容器与访问控制列表(ACLs),可以实现对容器的安全访问。不同的存储后端和镜像格式为用户提供了多样化的选择,以满足不同的需求。
仪表盘(Horizon)为初学者提供了友好的图形用户界面,而命令行和API则为高级用户提供了更强大的管理和自动化能力。网络服务中的Neutron项目提供了丰富的功能和灵活性,通过覆盖网络和各种网络对象的管理,实现了租户流量的分离和高效利用底层物理基础设施。
在实际应用中,用户需要根据自身的需求和场景,选择合适的存储后端、镜像格式、网络配置等,以充分发挥OpenStack的优势,构建高效、稳定的云计算环境。
以下是一个mermaid流程图,展示了在OpenStack中创建一个新实例的基本流程:
```mermaid
graph LR
A[选择镜像] --> B[选择网络]
B --> C[选择安全组]
C --> D[选择存储方式]
D --> E[创建实例]
E --> F{实例是否创建成功}
F -->|是| G[实例运行]
F -->|否| H[检查配置并重新创建]
```
0
0
复制全文
相关推荐





