当前位置: 首页 > article >正文

浅谈云计算18 | OpenStack架构概述

OpenStack架构概述

    • 一、OpenStack核心组件探究
      • 1.1 计算组件Nova
      • 1.2 镜像组件Glance
      • 1.3 身份认证组件Keystone
      • 1.4 网络组件Neutron
      • 1.5 块存储组件Cinder
      • 1.6 对象存储组件Swift
      • 1.7 控制面板组件Horizon
      • 1.8 计量组件Ceilometer
      • 1.9 编排组件Heat
    • 二、OpenStack组件逻辑关系揭秘
      • 2.1 组件间的依赖关系
        • 2.1.1 直接依赖关系
        • 2.1.2 间接依赖关系
      • 2.2 组件通信机制
        • 2.2.1 基于HTTP协议的通信
        • 2.2.2 基于AMQP协议的通信
        • 2.2.3 基于数据库连接的通信
      • 2.3 以新建云主机为例的组件协同流程

在这里插入图片描述

随着信息技术发展,云计算改变企业 IT 架构与运营方式。OpenStack 作为关键技术,在云计算领域优势独特、功能卓越,是开源云计算领军者。其重要性体现在多方面:提升资源管理效率与灵活性,统一整合物理资源并按需分配,可动态调整;为私有云、公有云、混合云等各类云服务提供技术支持与解决方案;促进云计算生态系统繁荣,吸引众多参与者推动其创新,催生出商业产品和服务。

在这里插入图片描述

虽然OpenStack 在资源管理及云服务提供方面具备类似操作系统的功能,但它并非传统意义上可独立运行的完整操作系统。因其缺少完备的设备驱动体系与丰富本地操作 UI,且依赖 Linux 等底层操作系统及其他组件,如数据库软件、容器技术等,以协同实现云计算环境下的各项功能 。

一、OpenStack核心组件探究

在这里插入图片描述

1.1 计算组件Nova

Nova 是 OpenStack 的计算组件,负责虚拟机从创建到销毁的全生命周期管理。创建时,用户请求先到 Nova - API,经格式和参数验证、以及另一个核心组件Keystone 身份验证后,传递给 Nova - Scheduler。Nova - Scheduler 依据各计算节点资源状况和调度策略,选定承载节点,将任务分给节点上的 Nova - Compute。Nova - Compute 与底层虚拟化技术交互,按配置创建虚拟机并配置网络。运行中,Nova 实时监控虚拟机状态,遇性能瓶颈或故障时,按策略调整资源或迁移。用户不再需要时,Nova 按流程销毁虚拟机,释放资源,确保 OpenStack 高效稳定运行,为用户提供可靠服务 。

在这里插入图片描述

1.2 镜像组件Glance

Glance 是 OpenStack 的镜像组件,负责镜像存储、查询与管理,为虚拟机创建提供基础资源。它兼容性强,支持多种镜像格式。qcow2 格式用于 QEMU 模拟器,能动态扩展磁盘空间,有效避免浪费,适用于磁盘需求不确定的场景;raw 格式以原始方式存储数据,无额外结构,磁盘 I/O 性能佳,适用于大数据分析等对读写速度要求高的场景 。此外,Glance 还支持 VMDK(常用于 VMware 虚拟机,在企业级环境兼容性和稳定性好)、VDI(用于 VirtualBox 虚拟机)等常见格式,满足不同用户和场景的多样化需求,保障虚拟机创建与运行顺利进行。

在这里插入图片描述

1.3 身份认证组件Keystone

Keystone 是 OpenStack 的身份认证组件,保障云计算平台安全与用户管理。它负责用户和服务的身份验证,实施基于角色的访问控制,确保资源访问授权。

在认证机制上,Keystone 支持多种方式。常见的用户名和密码认证,通过与数据库中用户信息比对确认身份。企业常用的 LDAP 等外部认证,能与企业已有用户管理体系集成,实现统一管理。此外,还支持单点登录,用户一次认证即可访问多个相关应用系统,提升体验与效率。

授权方面,Keystone 采用 RBAC 模型,按角色分配权限。如管理员有全面管理权限,普通用户权限受限,审计员负责审计监控。用户认证后获含角色和权限信息的临时令牌,访问服务时需携带。服务将令牌送 Keystone 验证,确认权限后才执行请求。

Keystone 还包含服务目录,记录各服务的名称、类型、端点等信息。用户借此查询所需服务的端点,以便在复杂的云计算环境中高效访问资源。

1.4 网络组件Neutron

Neutron 是 OpenStack 的网络组件,负责网络虚拟化,为用户提供灵活强大的网络配置与管理功能。可在物理网络基础上创建多个隔离的虚拟网络,满足不同用户对网络架构的多样需求。Neutron 支持多种网络拓扑结构,像大型数据中心常用的 VXLAN 技术,借此打破物理网络限制,提升网络灵活性与扩展性。网络安全方面,它提供防火墙、入侵检测、流量监控等服务。如金融机构云计算平台,通过配置防火墙规则过滤流量、利用入侵检测防范攻击,保障数据安全。

实际应用中,其优势显著。例如企业云计算环境下,能为各业务部门建独立虚拟网络实现隔离,保障数据安全,还能根据部门需求定制网络,如为研发部门保障网络性能。在多租户的公有云平台,为每个租户打造专属虚拟网络,租户可自由定义网络元素并灵活调整网络资源。
在这里插入图片描述

1.5 块存储组件Cinder

OpenStack 中 Cinder 的架构由 API 服务层、调度服务层、存储后端和数据库构成。API 服务层作为对外接口接收并初步验证用户请求;调度服务层依据资源状况和调度策略选择合适存储后端;存储后端实际存储数据,支持 LVM、Ceph 等多种类型;数据库用于存储卷相关信息。Cinder 的作用是为云计算环境提供持久化存储服务,支持灵活的存储管理,如创建、扩展存储卷及进行快照操作,还能适配多种存储后端以满足不同应用场景需求。

在这里插入图片描述

1.6 对象存储组件Swift

Swift 是 OpenStack 的对象存储组件,以独特分布式存储架构与高容错特性,在云计算数据存储领域至关重要。它借一致性哈希算法实现数据均衡分布,节点变动时数据迁移影响小。通过多副本存储与纠删码技术保障数据完整可用,适用于金融、医疗等对数据可靠性要求高的场景。实际应用中,Swift 在数据备份和归档方面表现卓越。如大型企业用其备份业务数据,借分布式存储与多副本机制跨地域保护数据,便于恢复;在数据归档场景,它以对象形式存储历史数据,借高效索引检索机制便于查找,高容错特性确保数据长期安全。

在这里插入图片描述

1.7 控制面板组件Horizon

Horizon 作为 OpenStack 的控制面板组件,通过直观便捷的 Web 界面,极大简化了用户管理和操作云平台资源的流程,无需复杂命令行或 API 知识就能全面管理各类资源。在虚拟机管理上,界面清晰呈现虚拟机详细信息,支持简单创建、灵活配置,包括选择镜像、设定资源规格、配置网络,且可实时监控与便捷处理故障及性能问题;网络管理方面,用户能直观查看拓扑结构,可视化创建并配置不同类型网络及相关参数,还能设置防火墙规则保障网络安全;存储管理中,能便捷查看存储卷详情,快速创建、挂载存储卷,还能对其进行扩展和快照操作,便于满足存储需求、备份及恢复数据。

在这里插入图片描述

1.8 计量组件Ceilometer

Ceilometer 是 OpenStack 的计量组件,在云计算平台资源管理与监控体系中极为关键。它全面监控物理和虚拟资源,收集如服务器 CPU 使用率、内存消耗、网络流量,以及虚拟机运行时长、资源分配量等数据。这些数据在计费上,为云服务提供商提供精确依据,使其能按实际资源使用量制定公平合理的计费策略,提升计费透明度与合理性;在监控层面,为系统管理员提供系统运行状态信息,助其实时掌握资源使用情况,及时发现性能瓶颈和异常,采取应对措施,同时通过趋势分析预测资源需求,提前规划调配,保障系统稳定运行并避免资源浪费 。

在这里插入图片描述

1.9 编排组件Heat

Heat 是 OpenStack 的编排组件,借助遵循特定语法结构的模板,为用户提供强大的自动化部署功能,简化复杂云环境搭建与管理。模板基本结构含参数、资源和输出部分:参数部分可定义部署时动态传入的值,增加灵活性;资源部分详细定义需创建的各类云资源及关键信息;输出部分则设定部署完成后返回给用户的信息。用户准备好模板文件后,可通过命令行工具(先配置好 OpenStack 环境变量获权限,用openstack stack create命令)或 API 进行部署,Heat 会读取解析模板,按序创建资源并处理依赖关系。如企业搭建测试环境,通过编写含多虚拟机资源定义的模板,参数化配置各虚拟机信息,一次性完成部署,提高效率、减少错误,助力业务发展。

在这里插入图片描述

二、OpenStack组件逻辑关系揭秘

2.1 组件间的依赖关系

2.1.1 直接依赖关系

在OpenStack的架构体系中,各组件之间存在着紧密的直接依赖关系,这些关系如同链条一般,将各个组件有机地连接在一起,共同支撑起整个云计算平台的稳定运行。以Nova与Glance、Cinder等组件的关系为例,Nova作为计算组件,在虚拟机的创建过程中,对Glance镜像组件和Cinder块存储组件有着直接且关键的依赖。

在这里插入图片描述

当用户请求创建一个新的虚拟机时,Nova首先需要从Glance中获取所需的虚拟机镜像。Glance就像是一个镜像仓库,存储着各种操作系统、应用程序以及配置信息的镜像文件。Nova通过与Glance的API进行交互,发送获取特定镜像的请求。Glance接收到请求后,会根据请求的参数,在其存储的镜像库中查找对应的镜像,并将镜像的相关信息返回给Nova。这个过程中,Nova对Glance的依赖是直接且即时的,没有Glance提供的镜像,Nova就无法创建出符合用户需求的虚拟机。例如,在一个企业的软件开发测试环境中,开发人员需要创建多个具有不同操作系统和软件配置的虚拟机来进行测试。此时,Nova会根据开发人员的需求,从Glance中获取包含特定操作系统和测试工具的镜像,然后基于这些镜像在计算节点上创建虚拟机,为开发测试工作提供基础环境。

Nova与Cinder之间同样存在着直接依赖关系。在虚拟机创建过程中,除了需要镜像外,还需要为虚拟机分配持久化的存储资源,这就需要借助Cinder块存储组件的支持。Nova会向Cinder发送请求,要求为虚拟机创建相应的存储卷,并将存储卷挂载到虚拟机上。Cinder接收到请求后,会在存储后端创建一个指定大小的存储卷,并将存储卷的相关信息返回给Nova。Nova再将这些信息传递给虚拟机,使得虚拟机能够识别并使用该存储卷进行数据的存储和读取。在实际应用中,如企业的数据库服务器虚拟机,需要大量的存储空间来存储业务数据。通过Nova与Cinder的紧密协作,能够为数据库服务器虚拟机创建足够大的存储卷,确保数据库能够稳定运行,高效地存储和处理海量数据。这种直接依赖关系使得Nova在虚拟机的创建、运行和管理过程中,能够与Glance和Cinder进行高效的数据交互和功能协同,保障了云计算平台的计算和存储功能的正常实现。

2.1.2 间接依赖关系

除了直接依赖关系外,OpenStack组件之间还存在着通过Keystone认证实现的间接依赖关系。Keystone作为OpenStack的身份认证组件,在整个系统中扮演着至关重要的角色,它如同一个“门卫”,负责对所有用户和服务进行身份验证和授权管理。

在这里插入图片描述

当用户尝试访问OpenStack的其他组件时,首先需要通过Keystone进行身份认证。用户向Keystone发送包含用户名和密码等认证信息的请求,Keystone会对这些信息进行验证。如果验证通过,Keystone会为用户生成一个临时令牌,并将该令牌返回给用户。这个令牌就像是一把“钥匙”,代表着用户的身份和权限。用户在后续访问其他组件时,需要携带这个令牌,以证明自己的合法身份和访问权限。

例如,当用户想要通过Nova创建一个虚拟机时,用户会向Nova发送创建虚拟机的请求,同时携带从Keystone获取的令牌。Nova在接收到请求后,并不会直接处理该请求,而是会将令牌发送给Keystone进行验证。Keystone会根据令牌中的信息,验证该令牌的有效性以及用户是否具有创建虚拟机的权限。只有在Keystone确认令牌有效且用户权限符合要求后,才会向Nova返回验证成功的信息。此时,Nova才会开始处理用户创建虚拟机的请求,与其他组件(如Glance、Cinder等)进行交互,完成虚拟机的创建过程。

同样,其他组件之间的交互也需要通过Keystone的认证。当Nova需要从Glance获取镜像时,Nova会向Glance发送请求,并携带用户的令牌。Glance接收到请求后,也会将令牌发送给Keystone进行验证。只有在Keystone验证通过后,Glance才会将镜像信息返回给Nova。这种通过Keystone认证实现的间接依赖关系,确保了OpenStack系统中各个组件之间的通信安全和访问控制。它使得只有经过授权的用户和服务才能进行相应的操作,有效防止了未经授权的访问和恶意攻击,保障了整个云计算平台的安全性和稳定性。

2.2 组件通信机制

2.2.1 基于HTTP协议的通信

在OpenStack中,众多组件之间借助RESTful API,通过HTTP协议实现高效通信,这一通信方式在组件交互中占据着核心地位。以Nova与Glance的交互为例,当Nova需要获取特定的虚拟机镜像以创建虚拟机时,就会向Glance发起HTTP请求。Nova通过调用Glance的RESTful API,发送包含所需镜像标识的GET请求,GET /v2/images/{image_id},其中{image_id}为具体的镜像标识符。Glance接收到请求后,会在其镜像存储库中查找对应的镜像,并将镜像的相关信息,如镜像的格式、大小、存储位置等,通过HTTP响应返回给Nova。这种基于HTTP协议的通信方式,使得Nova能够快速、准确地获取到创建虚拟机所需的镜像资源,确保虚拟机创建流程的顺利进行。

再如,用户通过Horizon控制面板与OpenStack各组件进行交互时,也是基于HTTP协议。当用户在Horizon界面上请求创建一个新的虚拟机时,Horizon会将用户的请求转化为一系列针对Nova、Glance、Neutron等组件的HTTP请求。Horizon会向Nova发送一个包含虚拟机配置信息的POST请求,POST /v2.1/servers,请求体中包含虚拟机的名称、规格、所使用的镜像ID等详细信息。同时,Horizon会向Glance发送获取镜像信息的请求,以及向Neutron发送网络配置相关的请求。各组件接收到这些HTTP请求后,会进行相应的处理,并将结果通过HTTP响应返回给Horizon,Horizon再将最终的结果展示给用户。这种基于HTTP协议的交互方式,使得用户能够通过直观的Web界面,方便地对OpenStack平台进行各种操作,极大地提高了用户体验和操作效率。

2.2.2 基于AMQP协议的通信

消息队列在OpenStack组件内部通信中发挥着关键作用,其中AMQP协议被广泛应用。以Nova内部的调度通信为例,当Nova - API接收到用户创建虚拟机的请求后,会将该请求发送到消息队列中。Nova - Scheduler作为消息队列的消费者,会监听这个消息队列。一旦接收到创建虚拟机的请求消息,Nova - Scheduler会根据系统中各个计算节点的资源使用情况,进行复杂的调度计算,选择出最合适的计算节点来承载新的虚拟机。在这个过程中,消息队列起到了缓冲和异步处理的作用。由于创建虚拟机的请求可能会在短时间内大量涌入,如果没有消息队列进行缓冲,Nova - Scheduler可能会因为瞬间的高负载而无法及时处理所有请求,导致系统响应变慢甚至崩溃。而通过消息队列,请求被逐个处理,Nova - Scheduler可以按照一定的顺序和策略,有条不紊地进行调度工作,大大提高了系统的稳定性和可靠性。

在Nova内部,当计算节点上的Nova - Compute完成虚拟机的创建或其他操作后,也会通过消息队列向Nova - API发送操作结果的消息。Nova - API再根据这些消息,向用户返回相应的响应。这种基于消息队列的异步通信方式,使得各个组件之间的耦合度降低,提高了系统的可扩展性和灵活性。当需要对Nova - Scheduler的调度算法进行升级或修改时,由于消息队列的存在,不会影响到其他组件的正常运行,只需要对Nova - Scheduler自身进行相应的调整即可。同样,当计算节点的数量发生变化,增加或减少计算节点时,通过消息队列的缓冲和协调作用,系统能够快速适应这种变化,确保虚拟机的创建和管理工作不受影响。

2.2.3 基于数据库连接的通信

在OpenStack中,部分组件之间通过数据库连接实现数据共享和状态同步,这种通信方式在保证组件之间数据一致性和协同工作方面具有重要意义。以Nova与Cinder的关系为例,Nova在创建虚拟机时,需要为虚拟机分配存储资源,这就涉及到与Cinder的交互。Nova会将虚拟机对存储资源的需求信息,如存储卷的大小、类型等,写入到数据库中特定的表中。Cinder会定期查询数据库,获取这些存储需求信息。当Cinder接收到创建存储卷的请求后,会在存储后端创建相应的存储卷,并将存储卷的相关信息,如存储卷的ID、状态、所在存储节点等,更新到数据库中。Nova再通过查询数据库,获取存储卷的最新状态和信息,从而完成虚拟机与存储卷的关联配置。

在这种基于数据库连接的通信方式中,数据库就像是一个信息共享的“枢纽”,各个组件通过对数据库中数据的读写操作,实现了信息的传递和状态的同步。当多个组件同时对数据库进行读写操作时,需要确保数据的一致性和完整性。为了实现这一点,OpenStack采用了一系列的数据库事务管理机制和锁机制。在Cinder创建存储卷的过程中,为了防止其他组件在存储卷创建完成之前读取到不完整的信息,会对数据库中的相关记录加锁。只有当存储卷完全创建成功,并将所有相关信息准确无误地更新到数据库后,才会释放锁,允许其他组件读取该存储卷的信息。这种基于数据库连接的通信方式,虽然在一定程度上增加了系统的复杂性,但却能够有效地保证组件之间数据的一致性和可靠性,为OpenStack平台的稳定运行提供了坚实的基础。

2.3 以新建云主机为例的组件协同流程

在OpenStack平台上新建云主机时,多个组件会紧密协同工作,共同完成这一复杂的任务。

在这里插入图片描述

用户首先通过Horizon控制面板或命令行接口向Keystone发起身份认证请求,这是整个流程的起始点。用户提交包含用户名和密码的认证信息,Keystone接收到请求后,会迅速在其数据库中进行验证。若验证通过,Keystone会为用户生成一个唯一的身份令牌(Token),并将其返回给用户。这个令牌就像是一把“钥匙”,代表着用户在OpenStack平台上的合法身份和相应权限。

拿到令牌后,用户会向Nova - API发送创建云主机的请求,同时附上Keystone颁发的令牌,以证明自己的身份和权限。Nova - API在接收到请求后,会对请求进行初步的解析和验证,检查请求的格式是否正确、所需的参数是否完整等。之后,Nova - API会将令牌发送给Keystone,进行二次验证,确保令牌的有效性和用户权限的合法性。只有通过Keystone的再次验证,Nova - API才会继续处理创建云主机的请求。

Nova - API会与Nova - Scheduler进行交互。Nova - Scheduler如同一个“资源调度专家”,它会根据系统中各个计算节点的资源使用情况,如CPU使用率、内存剩余量、磁盘空间等,以及预设的调度策略,来挑选出最适合承载新云主机的计算节点。调度策略可能会综合考虑多种因素,例如为了提高计算效率,将具有相似计算需求的云主机调度到同一计算节点上,以减少资源竞争;或者为了确保业务的高可用性,将关键业务的云主机分散到不同的计算节点上,避免因单个计算节点故障而导致业务中断。

确定计算节点后,Nova - Scheduler会将创建云主机的任务分配给该节点上的Nova - Compute。Nova - Compute负责在选定的计算节点上执行实际的云主机创建操作。在此过程中,Nova - Compute需要获取虚拟机镜像,因此会向Glance发送请求,请求中同样包含用户的身份令牌。Glance在接收到请求后,会先将令牌发送给Keystone进行验证,确认令牌有效且用户具有访问镜像的权限后,Glance会从其镜像存储库中检索出用户指定的虚拟机镜像,并将镜像信息返回给Nova - Compute。

Nova - Compute还需要为云主机配置网络,此时会与Neutron进行交互。Nova - Compute向Neutron发送网络配置请求,并附上用户的令牌。Neutron接收到请求后,同样会先通过Keystone验证令牌的有效性,然后根据请求的内容,为云主机创建相应的网络资源,如虚拟网络、子网、IP地址等,并将网络配置信息返回给Nova - Compute。

在存储方面,若用户需要为云主机分配额外的存储资源,Nova - Compute会向Cinder发送请求,请求创建存储卷并将其挂载到云主机上。Cinder在接收到请求后,会先验证令牌,然后在存储后端创建一个指定大小的存储卷,并将存储卷的相关信息返回给Nova - Compute。Nova - Compute再将这些信息传递给云主机,使得云主机能够识别并使用该存储卷进行数据的存储和读取。

Nova - Compute根据获取到的镜像、网络配置和存储信息,在计算节点上利用底层的虚拟化技术(如KVM、Xen等)创建出云主机实例。创建完成后,Nova - Compute会将云主机的状态信息返回给Nova - API,Nova - API再将最终的结果反馈给用户。用户可以通过Horizon控制面板或命令行接口,查看云主机的创建状态和相关信息,确认云主机是否已成功创建并正常运行。

通过以上多个组件的紧密协同工作,OpenStack能够高效、可靠地完成云主机的创建任务,为用户提供灵活、可扩展的云计算服务。在这个过程中,每个组件都发挥着不可或缺的作用,它们之间的协同配合体现了OpenStack架构的强大功能和高度灵活性。


http://www.kler.cn/a/506521.html

相关文章:

  • 核密度估计(Kernel Density Estimation, KDE)是一种非参数统计方法
  • 基于华为云车牌识别服务设计的停车场计费系统【华为开发者空间-鸿蒙】
  • 音视频入门基础:RTP专题(1)——RTP官方文档下载
  • C++实现设计模式---备忘录模式 (Memento)
  • 【Linux】操作系统与进程概念
  • 嵌入式入门Day42
  • 自动化仓储管理与库存控制
  • 《零基础Go语言算法实战》【题目 4-11】在不使用任何内置散列表库的情况下设计一个 HashSet
  • 蓝桥杯刷题第三天——排序
  • 如何有效防止和解决IP劫持问题
  • Linux中常用命令详解
  • STM32 FreeRTOS消息队列
  • 使用DAS的导出和导入功能迁移GaussDB数据
  • 【JAVA】-JDK
  • Windows Subsystem for Linux (WSL) 中安装 Redis
  • openharmony设备测试XTS测评用例开发指导
  • 学术内容写作ChatGPT提示词分享
  • 【Qt 常用控件】按钮类(QPushButton、QRadioButton、QCheckBox)
  • 基于 requests 依赖包的 Python 爬虫实战
  • Linux第一课:LinuxC基础 学习记录day11
  • Docker 镜像制作原理 做一个自己的docker镜像
  • 【安卓开发】【Android】总结:安卓技能树
  • 如何学习Transformer架构
  • 目标检测中的Bounding Box(边界框)介绍:定义以及不同表示方式
  • 【MySQL】高级查询技巧 JOIN、GROUP BY、ORDER BY、UNION 应用案列解析
  • Java全栈项目-办公自动化OA系统