OpenStack,是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。更确切的说,是IaaS云栈的开源管理平台,同类的项目还有CloudOS。
OpenStack是与云计算密切相关的,云有私有云、公有云、混合云;要想理解OpenStack,需要先了解云计算。所谓“云计算”,就是把计算资源、存储资源、网络资源等抽象为一个“云”,再简单点就是抽象为一个资源池,并且能够对外提供服务。
云服务模型:
传统:IaaS(OpenStack,CloudStack)、PaaS(Docker,Openshift)、SaaS
扩展:DBaaS(数据库即服务)、FWaaS(防火墙即服务)、NaaS(网络即服务)
OpenStack是IaaS云的一个开源实现,通过上面的图示,IaaS是弹性提供网络、存储、CPU、内存、以及操作系统,以给用户提供一个虚拟化主机的系统。OpenStack由一系列具有RESTful接口的Web服务所实现的,是一系列组件服务集合。Openstack 是一个云平台管理的项目,包含三大项:计算、网络和存储。其主要目标是简化资源的配置和管理,把计算、网络和存储资源抽象成虚拟资源池,并根据需要对外提供服务。实际上,可以把OpenStack看成是一个云计算操作系统。
在详细学习OpenStack的各组件服务前,先对IaaS云计算供给,也就是OpenStack要实现的功能流程来一个大概得梳理:
因为OpenStack是给用户提供虚拟机环境(云计算)的,各个企业来租用云计算,然后使用这些云运行企业的业务,那么,首先要保证的是各个企业的业务数据不能随意被其他公司访问到,这就需要一个认证、授权的组件,这是最重要的功能,否则将没有公司敢租用云计算,有了认证授权,下一步就是组织构建企业所需的资源,这需要一个组件来做统一的管理,即给一个租户分配多少计算资源,也就是CPU,分配多少内存资源,然后还要分配存储资源和网络资源,OpenStack单独使用一个组件来完成计算资源的管理,存储资源和网络资源也各自单独使用一个组件服务来完成,以上算是硬件资源,相当于一台硬件主机组装完毕,然后需要提供操作系统,这在OpenStack中是通过提供存储映像来完成,类似于存储资源,也单独使用一个组件服务完成,不管是用户、授权、各种资源,这些信息都需要保存,那就需要一个数据库系统,一般使用MySQL,然后,统一管理组件与其他组件服务之间的通信,基于RPC机制,使用的是消息队列,这需要一个消息队列服务,如qpid,RabbitMQ等,对云计算的管理,需要一个管理组件,如一个Web GUI的管理页面等。
OpenStack官网上关于OpenStack是什么的介绍:
OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed and provisioned through APIs with common authentication mechanisms.
Dashboards are also available, giving administrators control while empowering their users to provision resources through a web interface. There are OpenStack CLI tools and SDKs giving operators the flexibility to create OpenStack cloud applications in the language of their choice. Supported languages include Go, Python, Ruby, and Java.
Beyond standard infrastructure-as-a-service functionality, additional components provide orchestration, fault management and service management amongst other services to provide operators flexibility to customize their infrastructure and ensure high availability of user applications.
OpenStack是一个云操作系统,它通过数据中心控制其中巨大的计算、存储和网络资源池。所有操作均通过具备统一身份认证机制的API完成托管与资源预置。
仪表盘(即Web GUI)为管理员提供资源管理接口,命令行工具(CLI)与软件开发工具包(SDK)可提供给管理员进行资源管理,和运维人员通过编程语言实现平台应用。
除了IaaS外,OpenStack 的附加组件还可提供编排、故障管理、服务管理等能力,让运维人员能够灵活定制基础设施,保障用户应用的高可用性。
最新的OpenStack生态图:
OpenStack的服务组件:
Compute —— 计算组件:
NOVA:Compute Service,计算服务,代码名或项目名叫做NOVA,Nova是核心计算控制器,管理虚拟机的整个生命周期,提供虚拟机的创建、运行、挂起、调度、关闭、销毁、热迁移、弹性伸缩等。是真正的执行部件。接受 DashBoard 发來的命令并完成具体的动作,通过调度器自动选择最优的计算节点分配资源,支撑大规模虚拟机集群管理。但是 Nova 不是虛拟机软件,所以还需要虚拟机软件(如 KVM、Xen、Hyper-v 等)配合。
ZUN:Container Service,容器服务,是OpenStack官方原生的容器管理服务,核心目标是提供一套无需额外管理服务器或集群的容器运行API,让容器成为和虚拟机、云硬盘同等地位的OpenStack一等资源,深度融入OpenStack整体生态 ,就能直接通过OpenStack统一接口创建、管理容器化工作负载。它解决了传统OpenStack环境下容器与其他云资源割裂的问题,实现容器与虚拟网络、块存储、身份认证等能力的无缝打通 。
Storage —— 存储组件:
CINDER:Block Storage,块存储服务,提供持久化块存储,即为云主机提供附加云盘。Cinder 管理块设备,为虚拟机管理SAN设备源。它本身不是块设备源, 需要一个存储后端来提供实际的块设备源(如 iSCSI、FC等)。Cinder相当于一个管家,当虚拟机需要块设备时,询问管家去哪里获取具体的块设备。它也是插件式的,安装在具体的SAN设备里。
SWIFT:Object Storage,对象存储服务,是NoSQL数据库,为虚拟机提供非结构化数据存储,REST风格的接口和扁平的数据组织结构。ring环的方式实现数据自动复制和高度可以扩展架构,把相同的数据存储在多台计箅机上,以确保数据不会丢失。用户可通过 RESTful 和 HTTP 类型的 API 来和它通信。Swift 是 OpenStack 生态中核心的分布式对象存储服务,专为海量非结构化数据设计,Swift 完全摒弃传统文件系统的目录层级结构,将所有数据都抽象为独立的对象(Object),每个对象自带唯一标识和自定义元数据。它采用全对称分布式架构,没有传统存储的单点元数据节点,彻底避免元数据节点的性能瓶颈和故障风险,天然适配大规模云环境的多租户存储需求 。
MANILA:Shared filesystems,共享文件系统服务,是一个用于提供共享文件存储的组件。它允许用户在OpenStack云环境中创建和管理共享文件系统,以供多个实例或虚拟机之间共享数据。
Networking —— 网络组件:
NEUTRON:Networking,网络服务,基于软件定义网络(SDN)思想,管理虚拟网络资源,提供一整套API,为实例创建网络拓扑结构,用户可以基于该API实现自己定义专属网络,支持多租户网络隔离 。
OCTAVIA:Load balancer,负载均衡器服务,租户可以自助创建负载均衡器,把前端流量分发到后端多台云主机,实现应用高可用、流量分担,提供云原生负载均衡能力。以Neutron LBaaS v2标准参考实现,用来替代旧版 Neutron LBaaS v1。
DESIGNATE:DNS service,域名服务,提供域名Zone、记录集RecordSet管理,实现云内 DNS服务;可与Neutron联动,虚拟机创建时自动生成A记录、PTR反向解析记录,对外提供权威 DNS 能力。
Shared Services —— 共享服务组件:
KEYSTONE:Identity service,认证服务,为访问openstack其他组件服务提供身份验证、权限管理、令牌管理及服务名册管理。要使用云计算的所有用户事先需要在 Keystone 中建立账号和密码,并定义权限。另外,OpenStack 服务(如 Nova、Neutron、Swift、Cinder 等)也要在里面注册,并且登记具体的 API,Keystone 本身也要注册和登记 API。认证通过后,提供一个服务列表(存放你有权访问的服务),可以通过该列表访问各个组件。
GLANCE:IMAGES Service,镜像服务,为云主机安装操作系统提供不同的镜像选择,Glance 存取虚拟机磁盘镜像文件,Compute 服务在启动虚拟机时需要从这里获取镜像文件。这个组件不同于上面的 Swift 和 Cinder,这两者提供的存储是在虚拟机里使用的。Glance获取的镜像文件是启动时作为操作系统加载的。
PLACEMENT:Placement Service,SCHEDULING调度服务,OpenStack的资源跟踪与资源分配API服务,早期 Newton版本内嵌在Nova中,Stein版本独立拆分,端口8778。统一记录所有资源提供者的资源总量、已使用量,为 nova-scheduler做前置资源筛选,解决早期Nova调度只靠本地计算节点上报、无法支持异构硬件、共享资源的痛点,nova-scheduler完成过滤 + 权重打分,选出最优主机;Placement则是先查询资源库存,筛选出有足够资源的候选主机集合(前置筛选)。
BARBICAN:Key management,SECRETS机密服务,OpenStack的密钥管理组件,其他组件可以调用Barbican对外暴露的 REST API 来存储和访问密钥,端口9311。作用包括安全存储、管理密钥、证书、密码等敏感数据,多租户机密管理,给OpenStack其他组件提供密钥能力。
Hardware Lifecycle —— 硬件生命周期服务:
IRONIC: Bare Metal Provisioning Service,硬件生命周期服务,管理物理服务器(裸金属服务器)全生命周期,像管理虚拟机一样通过API管理真实物理机;Nova管理虚拟机;Ironic管理物理裸机服务器。
CYBORG:Lifecycle management of accelerators,加速器管理服务,是OpenStack的异构加速硬件生命周期管理框架,Queens版本首次引入,用于统一管理GPU、vGPU、FPGA、NPU、智能网卡、ASIC 等加速卡。核心定位:专门管理加速器硬件,和 Placement 深度对接,为 Nova 虚拟机分配、绑定、释放加速设备,面向 AI、HPC、NFV 场景。
ORCHESTRATION —— 编排服务:
HEAT:ORCHESTRATION,编排服务,基于模板自动化编排整套云基础设施资源,实现基础设施即代码 IaC,自动创建、更新、删除由多资源组成的业务栈(Stack),自动化部署应用,自动化管理应用的整个生命周期.主要用于Paas。端口8004。使用 YAML 格式 HOT(Heat Orchestration Template)模板,一次性描述虚拟机、网络、子网、安全组、卷、浮动 IP、Octavia 负载均衡等全套资源,并且定义资源之间依赖关系。
MISTRAL:Workflow service,工作流编排服务,OpenStack的原生工作流编排服务,核心目标是让用户无需编写复杂代码,就能定义、执行和管理跨多个OpenStack服务的自动化任务流,实现云环境下复杂业务流程的自动化调度与状态管理 。Mistral 把一系列离散的OpenStack API操作、自定义脚本动作封装成可视化的任务依赖图,自动处理任务间的执行顺序、并行调度、异常重试和状态持久化,彻底解决手动分步调用云API带来的流程混乱、易出错、不可恢复的问题,是云环境下实现自动化运维的核心编排引擎。与Heat的比较,Heat:专注于云资源的声明式编排,用户只需描述最终想要的资源状态,Heat自动完成资源的创建和配置,适合一次性的云资源栈部署场景。
Mistral:专注于过程式的任务流编排,用户可以精确定义每一步任务的执行顺序、分支判断、异常处理逻辑,适合复杂的自动化运维、定时调度、事件响应类场景。
ZAQAR:Messaging Service,消息服务,为云应用的不同组件提供多租户的云消息和通知服务,是 OpenStack 官方原生的多租户云消息与通知服务,让用户无需单独部署RabbitMQ、RocketMQ等独立消息集群,就能直接通过标准API实现云环境下的异步消息通信 。
BLAZAR:Resource reservation service,资源预留服务,让用户可以提前预约云平台的物理主机、虚拟机、浮动IP等各类资源,在指定时间段内独占使用,彻底解决普通云环境下资源无法保障、突发业务资源抢占冲突的问题。Blazar 把“租期租赁”的概念引入OpenStack资源体系,支持用户立即或在未来指定时间段内,申请独占特定的云资源,云平台会在租期到达前提前锁定预留资源,不会被其他租户抢占,到期后自动回收资源归还公共资源池。
AODH:Alarming Service,遥测告警服务,前身为Ceilometer项目的告警模块,是基于监控指标数据、事件规则触发告警动作,实现云环境的异常自动感知与响应。基于Ceilometer采集的全量云资源监控指标、Gnocchi存储的时序监控数据,让用户自定义告警阈值规则,当指标触发异常条件时自动执行通知、回调等预设动作,彻底解决云环境下海量资源的人工巡检无法覆盖的问题。
Workload Provisioning —— 工作负载配置;
MAGNUM:Container Orchestration Engine Provisioning,容器编排引擎供给,负责在 OpenStack 上提供容器即服务。它直接对接 Kubernetes、Swarm 等编排引擎,让你能像创建虚拟机一样创建和管理容器集群。Zun和Magnum是OpenStack中两个定位完全不同的容器相关项目, Zun:面向直接管理容器本身,把容器作为OpenStack原生资源,提供轻量化的容器运行能力,无需额外维护独立的容器集群,适合希望快速在现有OpenStack环境中运行容器的用户; Magnum:面向容器编排引擎的管理,它的核心能力是在OpenStack上一键部署和管理完整的Kubernetes、Swarm等集群,适合需要完整K8s生态能力的用户。
TROVE:Database as a Service,数据库即服务,提供关系型数据库的托管服务,支持 MySQL、PostgreSQL 等。用户不用关心底层数据库的安装和运维,直接通过 API 就能创建和管理数据库实例。
SAHARA:(大数据处理框架供给):让用户能快速在OpenStack上交付Hadoop、Spark、Storm 集群。只需要指定版本、集群拓扑和硬件参数,它就能在几分钟内部署好一个数据分析集群,并且支持按需扩容和缩容。
Application Lifecycle ——应用声明周期;
FREEZER:Backup and Restore,备份容灾恢复服务,为云环境提供跨多租户的统一数据保护能力,覆盖虚拟机、文件系统、数据库、块存储等全品类云资源的备份、归档与容灾恢复场景。
MASAKARI:Instances High Availability Service,实例高可用服务,自动检测云主机、虚拟机进程、客户机操作系统的故障,并触发自动化恢复流程,保障云平台上运行的实例业务连续性,是OpenStack生态中专门面向虚拟机故障自愈的核心组件。
Web frontends —— 网页前端:
HORIZON:Dashboard,控制面板服务,web方式管理云平台,建云主机,分配网络,配安全组,加云盘等。本质上就是通过图形化的操作界面控制其他服务(如Compute、Networking等)。
SKYLINE:Next generation dashboard
操作工具服务组件中:
Ceilometer:计量服务,结合 Aodh、CloudKitty 两个组件,完成计费任务,如结算、消耗的资源统计、性能监控等。
客户端工具有:
OpenStackClient
OpenStack的核心组件关系图,概念架构,Conceptual Architecture:
OpenStack的节点分类:
一个简单且完整的OpenStack一般由四个节点组成,分别是:
-控制节点:负责对其余节点的控制,包含虚拟机建立,迁移,网络分配,存储分配等;
-计算节点:负责虚拟机的运行;
-网络节点:负责外部网络与内部网络之间的通信;
-存储网络:负责对虚拟机的额外存储进行管理;
各个节点又有其不同的架构:
控制节点架构:控制节点包括管理支持服务、基础管理服务、扩展管理服务;
1)管理支持服务包含数据库(MySQL)与消息队列(Qpid)两个服务
-MySQL:数据库作为基础/扩展服务产生的数据存放的地方;
-Qpid:消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务。如果系统规模很大,也可使用RabbitMQ等;
2)基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务
-Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库;
-Glance:镜像管理服务,提供了对虚拟机部署时所能提供的镜像管理,包含镜像的导入,格式,以及制作相应的模板;
-Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信;
-Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板;
-Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard;
3)扩展管理服务包含Cinder,Swift,Trove,Heat,Ceilometer五个服务
-Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板;
- Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板;
- Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板;
- Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性;
- Ceilometer:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作;
控制节点一般只需要一个网络端口用于通信/管理各个节点。
网络节点架构:网络节点仅包含Neutron服务
-Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等;
网络节点包含三个网络端口:用于与控制节点进行通信、用于与除了控制节点之外的计算/存储节点之间的通信、用于外部的虚拟机与相应网络之间的通信。
计算节点架构:计算节点包含Nova,Neutron,Telemeter三个服务
1)基础服务
-Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务;
-Neutron:提供计算节点与网络节点之间的通信服务;
2)扩展服务
- Telemeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Ceilometer的代理服务;
计算节点包含最少两个网络端口:与控制节点进行通信,受控制节点统一调配、与网络节点,存储节点进行通信。
存储节点架构:存储节点包含Cinder,Swift等服务
-Cinder:块存储服务,提供相应的块存储,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作;
- Swift:对象存储服务,提供相应的对象存储,也是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件。
存储节点包含最少两个网络接口:与控制节点进行通信,接受控制节点任务,受控制节点统一调配、与计算/网络节点进行通信,完成控制节点下发的各类任务;
OpenStack节点整体架构图:
简单的OpenStack各服务启动虚拟机实例时的请求交互过程:
OpenStack Logical architecture:OpenStack详细的逻辑架构图
三节点部署测试,OpenStack的三节点架构图:
三个节点分别是控制节点Controller Node,计算节点Compute Node和网络节点Network Node。
在Controller Node上,要部署的是支撑服务,包括存储各种信息的数据库服务,一般使用MySQL(Mariadb),如用户、授权、租户、各虚拟机的各种资源、模版、网络、边界访问点等等;第二种服务是消息队列服务,小规模使用Qpid,大规模使用如RabbitMQ等,在OpenStack中,各组件服务之间不是直接调用,而是通过消息队列来传递调用请求和结果。然后是基础服务组件,提供认证授权的Identity服务,即Keystone;用于提供磁盘映像服务的Image service,即Glance,虚拟机启动时提供操作系统;用于计算资源管理的Compute服务,即Nova Management,租户需要的虚拟机资源由其进行管理申请,如CPU、内存等;用于网络管理的Networking服务,即Neutron Server和ML2 Plug-In,提供租户网络需求的管理;这里的Compute和Networking主要是管理服务,而不是实际的服务提供者。再就是仪表盘服务Dashboard,用于提供一个Web-GUI管理界面,即Horizon。在一个是可选配的服务组件,包括块存储服务Block Storage,即Cinder Management,提供额外的块存储;对象存储服务Object Storage,即Swift,提供对象存储服务,在规模较大时,磁盘映像服务Glance就可借助Swift来存储磁盘映像文件;数据库服务Database Service,用于提供DBaaS的管理服务,即Trove Management;编排服务Orchestration,即Heat,提供虚拟机模版功能;计量服务Telemetry,即Ceilometer。
在一个最简单的OpenStack中,Controller Node上一般部署数据库Mariadb、消息队列Qpid、认证服务Keystone、映像服务Glance、计算服务Nova、网络服务Neutron、仪表盘服务Dashboard,块存储服务Cinder。
在Network Node上运行基础服务Networking,包括ML2 Plug-In,Layer2 Agent,也就是OVS,还有Layer3 Agnet和DHCP Agnet等组件。
Compute Node上要运行基础服务Nova Hypervisor,也就是KVM或QEMU等,还要运行Networking,如ML2 Plug-In,Layer2 Agent。