OpenStack是一个开源的云计算管理平台项目是一系列软件开源项目的组合。更确切的说是IaaS云栈的开源管理平台同类的项目还有CloudOS。OpenStack是与云计算密切相关的云有私有云、公有云、混合云要想理解OpenStack需要先了解云计算。所谓“云计算”就是把计算资源、存储资源、网络资源等抽象为一个“云”再简单点就是抽象为一个资源池并且能够对外提供服务。云服务模型传统IaaSOpenStackCloudStack、PaaSDockerOpenshift、SaaS扩展DBaaS数据库即服务、FWaaS防火墙即服务、NaaS网络即服务OpenStack是IaaS云的一个开源实现通过上面的图示IaaS是弹性提供网络、存储、CPU、内存、以及操作系统以给用户提供一个虚拟化主机的系统。OpenStack由一系列具有RESTful接口的Web服务所实现的是一系列组件服务集合。Openstack 是一个云平台管理的项目包含三大项计算、网络和存储。其主要目标是简化资源的配置和管理把计算、网络和存储资源抽象成虚拟资源池并根据需要对外提供服务。实际上可以把OpenStack看成是一个云计算操作系统。在详细学习OpenStack的各组件服务前先对IaaS云计算供给也就是OpenStack要实现的功能流程来一个大概得梳理因为OpenStack是给用户提供虚拟机环境云计算的各个企业来租用云计算然后使用这些云运行企业的业务那么首先要保证的是各个企业的业务数据不能随意被其他公司访问到这就需要一个认证、授权的组件这是最重要的功能否则将没有公司敢租用云计算有了认证授权下一步就是组织构建企业所需的资源这需要一个组件来做统一的管理即给一个租户分配多少计算资源也就是CPU分配多少内存资源然后还要分配存储资源和网络资源OpenStack单独使用一个组件来完成计算资源的管理存储资源和网络资源也各自单独使用一个组件服务来完成以上算是硬件资源相当于一台硬件主机组装完毕然后需要提供操作系统这在OpenStack中是通过提供存储映像来完成类似于存储资源也单独使用一个组件服务完成不管是用户、授权、各种资源这些信息都需要保存那就需要一个数据库系统一般使用MySQL然后统一管理组件与其他组件服务之间的通信基于RPC机制使用的是消息队列这需要一个消息队列服务如qpidRabbitMQ等对云计算的管理需要一个管理组件如一个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 —— 计算组件NOVACompute Service计算服务代码名或项目名叫做NOVANova是核心计算控制器管理虚拟机的整个生命周期提供虚拟机的创建、运行、挂起、调度、关闭、销毁、热迁移、弹性伸缩等。是真正的执行部件。接受 DashBoard 发來的命令并完成具体的动作通过调度器自动选择最优的计算节点分配资源支撑大规模虚拟机集群管理。但是 Nova 不是虛拟机软件所以还需要虚拟机软件如 KVM、Xen、Hyper-v 等配合。ZUNContainer Service容器服务是OpenStack官方原生的容器管理服务核心目标是提供一套无需额外管理服务器或集群的容器运行API让容器成为和虚拟机、云硬盘同等地位的OpenStack一等资源深度融入OpenStack整体生态 就能直接通过OpenStack统一接口创建、管理容器化工作负载。它解决了传统OpenStack环境下容器与其他云资源割裂的问题实现容器与虚拟网络、块存储、身份认证等能力的无缝打通 。Storage —— 存储组件CINDERBlock Storage块存储服务提供持久化块存储即为云主机提供附加云盘。Cinder 管理块设备为虚拟机管理SAN设备源。它本身不是块设备源 需要一个存储后端来提供实际的块设备源如 iSCSI、FC等。Cinder相当于一个管家当虚拟机需要块设备时询问管家去哪里获取具体的块设备。它也是插件式的安装在具体的SAN设备里。SWIFTObject Storage对象存储服务是NoSQL数据库为虚拟机提供非结构化数据存储REST风格的接口和扁平的数据组织结构。ring环的方式实现数据自动复制和高度可以扩展架构把相同的数据存储在多台计箅机上以确保数据不会丢失。用户可通过 RESTful 和 HTTP 类型的 API 来和它通信。Swift 是 OpenStack 生态中核心的分布式对象存储服务专为海量非结构化数据设计Swift 完全摒弃传统文件系统的目录层级结构将所有数据都抽象为独立的‌对象Object‌每个对象自带唯一标识和自定义元数据。它采用全对称分布式架构没有传统存储的单点元数据节点彻底避免元数据节点的性能瓶颈和故障风险天然适配大规模云环境的多租户存储需求 。MANILAShared filesystems共享文件系统服务是一个用于提供共享文件存储的组件。它允许用户在OpenStack云环境中创建和管理共享文件系统以供多个实例或虚拟机之间共享数据。Networking —— 网络组件NEUTRONNetworking网络服务基于软件定义网络SDN思想管理虚拟网络资源提供一整套API,为实例创建网络拓扑结构用户可以基于该API实现自己定义专属网络支持多租户网络隔离 。OCTAVIALoad balancer负载均衡器服务租户可以自助创建负载均衡器把前端流量分发到后端多台云主机实现应用高可用、流量分担提供云原生负载均衡能力。以Neutron LBaaS v2标准参考实现用来替代旧版 Neutron LBaaS v1。DESIGNATEDNS service域名服务提供域名Zone、记录集RecordSet管理实现云内 DNS服务可与Neutron联动虚拟机创建时自动生成A记录、PTR反向解析记录对外提供权威 DNS 能力。Shared Services —— 共享服务组件KEYSTONEIdentity service认证服务为访问openstack其他组件服务提供身份验证、权限管理、令牌管理及服务名册管理。要使用云计算的所有用户事先需要在 Keystone 中建立账号和密码并定义权限。另外OpenStack 服务如 Nova、Neutron、Swift、Cinder 等也要在里面注册并且登记具体的 APIKeystone 本身也要注册和登记 API。认证通过后提供一个服务列表存放你有权访问的服务可以通过该列表访问各个组件。GLANCEIMAGES Service镜像服务为云主机安装操作系统提供不同的镜像选择,Glance 存取虚拟机磁盘镜像文件Compute 服务在启动虚拟机时需要从这里获取镜像文件。这个组件不同于上面的 Swift 和 Cinder这两者提供的存储是在虚拟机里使用的。Glance获取的镜像文件是启动时作为操作系统加载的。PLACEMENTPlacement ServiceSCHEDULING调度服务OpenStack的资源跟踪与资源分配API服务早期 Newton版本内嵌在Nova中Stein版本独立拆分端口8778。统一记录所有资源提供者的资源总量、已使用量为 nova-scheduler做前置资源筛选解决早期Nova调度只靠本地计算节点上报、无法支持异构硬件、共享资源的痛点nova-scheduler完成过滤 权重打分选出最优主机Placement则是先查询资源库存筛选出有足够资源的候选主机集合前置筛选。BARBICANKey managementSECRETS机密服务OpenStack的密钥管理组件其他组件可以调用Barbican对外暴露的 REST API 来存储和访问密钥端口9311。作用包括安全存储、管理密钥、证书、密码等敏感数据多租户机密管理给OpenStack其他组件提供密钥能力。Hardware Lifecycle —— 硬件生命周期服务IRONIC Bare Metal Provisioning Service硬件生命周期服务管理物理服务器裸金属服务器全生命周期像管理虚拟机一样通过API管理真实物理机Nova管理虚拟机Ironic管理物理裸机服务器。CYBORGLifecycle management of accelerators加速器管理服务是OpenStack的异构加速硬件生命周期管理框架Queens版本首次引入用于统一管理GPU、vGPU、FPGA、NPU、智能网卡、ASIC 等加速卡。核心定位专门管理加速器硬件和 Placement 深度对接为 Nova 虚拟机分配、绑定、释放加速设备面向 AI、HPC、NFV 场景。ORCHESTRATION —— 编排服务HEATORCHESTRATION编排服务基于模板自动化编排整套云基础设施资源实现基础设施即代码 IaC自动创建、更新、删除由多资源组成的业务栈Stack自动化部署应用自动化管理应用的整个生命周期.主要用于Paas。端口8004。使用 YAML 格式 HOTHeat Orchestration Template模板一次性描述虚拟机、网络、子网、安全组、卷、浮动 IP、Octavia 负载均衡等全套资源并且定义资源之间依赖关系。MISTRALWorkflow service工作流编排服务OpenStack的原生工作流编排服务核心目标是让用户无需编写复杂代码就能定义、执行和管理跨多个OpenStack服务的自动化任务流实现云环境下复杂业务流程的自动化调度与状态管理 。Mistral 把一系列离散的OpenStack API操作、自定义脚本动作封装成可视化的任务依赖图自动处理任务间的执行顺序、并行调度、异常重试和状态持久化彻底解决手动分步调用云API带来的流程混乱、易出错、不可恢复的问题是云环境下实现自动化运维的核心编排引擎。与Heat‌的比较Heat专注于云资源的声明式编排用户只需描述最终想要的资源状态Heat自动完成资源的创建和配置适合一次性的云资源栈部署场景。Mistral‌专注于过程式的任务流编排用户可以精确定义每一步任务的执行顺序、分支判断、异常处理逻辑适合复杂的自动化运维、定时调度、事件响应类场景。ZAQARMessaging Service消息服务为云应用的不同组件提供多租户的云消息和通知服务是 OpenStack 官方原生的多租户云消息与通知服务让用户无需单独部署RabbitMQ、RocketMQ等独立消息集群就能直接通过标准API实现云环境下的异步消息通信 。BLAZARResource reservation service资源预留服务让用户可以提前预约云平台的物理主机、虚拟机、浮动IP等各类资源在指定时间段内独占使用彻底解决普通云环境下资源无法保障、突发业务资源抢占冲突的问题。Blazar 把“租期租赁”的概念引入OpenStack资源体系支持用户立即或在未来指定时间段内申请独占特定的云资源云平台会在租期到达前提前锁定预留资源不会被其他租户抢占到期后自动回收资源归还公共资源池。AODHAlarming Service遥测告警服务前身为Ceilometer项目的告警模块是基于监控指标数据、事件规则触发告警动作实现云环境的异常自动感知与响应。基于Ceilometer采集的全量云资源监控指标、Gnocchi存储的时序监控数据让用户自定义告警阈值规则当指标触发异常条件时自动执行通知、回调等预设动作彻底解决云环境下海量资源的人工巡检无法覆盖的问题。Workload Provisioning —— 工作负载配置MAGNUMContainer Orchestration Engine Provisioning容器编排引擎供给负责在 OpenStack 上提供容器即服务。它直接对接 Kubernetes、Swarm 等编排引擎让你能像创建虚拟机一样创建和管理容器集群。Zun和Magnum是OpenStack中两个定位完全不同的容器相关项目 Zun面向直接管理容器本身把容器作为OpenStack原生资源提供轻量化的容器运行能力无需额外维护独立的容器集群适合希望快速在现有OpenStack环境中运行容器的用户 Magnum面向容器编排引擎的管理它的核心能力是在OpenStack上一键部署和管理完整的Kubernetes、Swarm等集群适合需要完整K8s生态能力的用户。TROVEDatabase as a Service数据库即服务提供关系型数据库的托管服务支持 MySQL、PostgreSQL 等。用户不用关心底层数据库的安装和运维直接通过 API 就能创建和管理数据库实例。SAHARA大数据处理框架供给让用户能快速在OpenStack上交付Hadoop、Spark、Storm 集群。只需要指定版本、集群拓扑和硬件参数它就能在几分钟内部署好一个数据分析集群并且支持按需扩容和缩容。Application Lifecycle ——应用声明周期FREEZERBackup and Restore备份容灾恢复服务为云环境提供跨多租户的统一数据保护能力覆盖虚拟机、文件系统、数据库、块存储等全品类云资源的备份、归档与容灾恢复场景。MASAKARIInstances High Availability Service实例高可用服务自动检测云主机、虚拟机进程、客户机操作系统的故障并触发自动化恢复流程保障云平台上运行的实例业务连续性是OpenStack生态中专门面向虚拟机故障自愈的核心组件。Web frontends —— 网页前端HORIZONDashboard控制面板服务web方式管理云平台建云主机分配网络配安全组加云盘等。本质上就是通过图形化的操作界面控制其他服务如Compute、Networking等)。SKYLINENext generation dashboard操作工具服务组件中Ceilometer计量服务结合 Aodh、CloudKitty 两个组件完成计费任务如结算、消耗的资源统计、性能监控等。客户端工具有OpenStackClientOpenStack的核心组件关系图概念架构Conceptual ArchitectureOpenStack的节点分类一个简单且完整的OpenStack一般由四个节点组成分别是-控制节点负责对其余节点的控制包含虚拟机建立迁移网络分配存储分配等-计算节点负责虚拟机的运行-网络节点负责外部网络与内部网络之间的通信-存储网络负责对虚拟机的额外存储进行管理各个节点又有其不同的架构控制节点架构控制节点包括管理支持服务、基础管理服务、扩展管理服务1管理支持服务包含数据库MySQL与消息队列Qpid两个服务-MySQL数据库作为基础/扩展服务产生的数据存放的地方-Qpid消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务。如果系统规模很大也可使用RabbitMQ等2基础管理服务包含KeystoneGlanceNovaNeutronHorizon五个服务-Keystone认证管理服务提供了其余所有组件的认证信息/令牌的管理创建修改等等使用MySQL作为统一的数据库-Glance镜像管理服务提供了对虚拟机部署时所能提供的镜像管理包含镜像的导入格式以及制作相应的模板-Nova计算管理服务提供了对计算节点的Nova的管理使用Nova-API进行通信-Neutron网络管理服务提供了对网络节点的网络拓扑管理同时提供Neutron在Horizon的管理面板-Horizon控制台服务提供了以Web的形式对所有节点的所有服务的管理通常把该服务称为DashBoard3扩展管理服务包含CinderSwiftTroveHeatCeilometer五个服务-Cinder提供管理存储节点的Cinder相关同时提供Cinder在Horizon中的管理面板- Swift提供管理存储节点的Swift相关同时提供Swift在Horizon中的管理面板- Trove提供管理数据库节点的Trove相关同时提供Trove在Horizon中的管理面板- Heat提供了基于模板来实现云环境中资源的初始化依赖关系处理部署等基本操作也可以解决自动收缩,负载均衡等高级特性- Ceilometer提供对物理资源以及虚拟资源的监控并记录这些数据对该数据进行分析在一定条件下触发相应动作控制节点一般只需要一个网络端口用于通信/管理各个节点。网络节点架构网络节点仅包含Neutron服务-Neutron负责管理私有网段与公有网段的通信以及管理虚拟机网络之间的通信/拓扑管理虚拟机之上的防火等等网络节点包含三个网络端口用于与控制节点进行通信、用于与除了控制节点之外的计算/存储节点之间的通信、用于外部的虚拟机与相应网络之间的通信。计算节点架构计算节点包含NovaNeutronTelemeter三个服务1基础服务-Nova提供虚拟机的创建运行迁移快照等各种围绕虚拟机的服务并提供API与控制节点对接由控制节点下发任务-Neutron提供计算节点与网络节点之间的通信服务2扩展服务- Telemeter提供计算节点的监控代理将虚拟机的情况反馈给控制节点是Ceilometer的代理服务计算节点包含最少两个网络端口与控制节点进行通信受控制节点统一调配、与网络节点存储节点进行通信。存储节点架构存储节点包含CinderSwift等服务-Cinder块存储服务提供相应的块存储就是虚拟出一块磁盘可以挂载到相应的虚拟机之上不受文件系统等因素影响对虚拟机来说这个操作就像是新加了一块硬盘可以完成对磁盘的任何操作包括挂载卸载格式化转换文件系统等等操作- Swift对象存储服务提供相应的对象存储也是虚拟出一块磁盘空间可以在这个空间当中存放文件也仅仅只能存放文件不能进行格式化转换文件系统大多应用于云磁盘/文件。存储节点包含最少两个网络接口与控制节点进行通信接受控制节点任务受控制节点统一调配、与计算/网络节点进行通信完成控制节点下发的各类任务OpenStack节点整体架构图简单的OpenStack各服务启动虚拟机实例时的请求交互过程OpenStack Logical architectureOpenStack详细的逻辑架构图三节点部署测试OpenStack的三节点架构图三个节点分别是控制节点Controller Node计算节点Compute Node和网络节点Network Node。在Controller Node上要部署的是支撑服务包括存储各种信息的数据库服务一般使用MySQLMariadb如用户、授权、租户、各虚拟机的各种资源、模版、网络、边界访问点等等第二种服务是消息队列服务小规模使用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-InLayer2 Agent也就是OVS还有Layer3 Agnet和DHCP Agnet等组件。Compute Node上要运行基础服务Nova Hypervisor也就是KVM或QEMU等还要运行Networking如ML2 Plug-InLayer2 Agent。