是什么?
开放栈(OpenStack)是一个免费的开放标准的云计算平台,用于构建基础设施即服务(IaaS)业务。
谁在用?
开放栈同时被公有云和私有云大量部署使用,几乎是目前最流行的云平台构建软件。
功能方向:
IaaS是指向用户提供虚拟机和其他资源。
而开放栈则由多个相互关联的组件构成,用来控制各种各样的、来自各个不同厂商的、横贯整个数据中心的处理器、存储和网络资源的硬件资源池。
用户可以通过如下方式来控制:
开放栈最初是在2010年作为机架空间主机托管公司(Rackspace Hosting)和(美国)国家航空航天局(NASA)的一个合作项目而发起的。到了2012年,它开始由开放栈基金会(OpenStack Foundation)管理,这是一个非盈利的公司实体,于2012年9月建立,用于推进开放栈及其社区。有超过500个公司参与了该项目。
2010年7月,机架空间主机托管公司和(美国)国家航空航天局联合发起了一个开源的云软件倡议,被称为“开放栈”。它的使命声明(mission statement)是:
“实现一个无处不在的开源云计算平台,通过使其易于实现而又高度可伸缩,使它可以同时满足公有和私有云的需要,而不论其大小如何。”
译注:代号文化。很多项目都会为自己指定一个代号(codename),而这一点在开放栈项目中尤为明显。这包括:
开放栈项目的目的是帮助组织去提供运行在标准硬件上的云计算服务。该社区的首个官方发行版(代号:奥斯汀,Austin)于2010年10月21日——也就是项目发起后3个月——首次发布,并且计划每几个月就发行一个该软件的更新。其早期的代码是来自于(美国)国家航空航天局的“星云”平台,以及机架空间的“云文件”平台。最初的云架构是由(美国)国家航空航天局(NASA)艾姆斯研究中心(Ames)的网络部门经理梅根·A·埃斯基(Megan A. Eskey)所设计的,它在2009年时曾是一个开源的架构,被称为“开放式NASA 2.0版”。随后,NASA星云团队和机架空间(Rackspace)一道将“云栈”和“开放栈”的模块合并,并将其以开源形式发布。
各方支持开放栈的历史:
开放栈组织增长十分迅速,目前已经得到540个公司的支持。
2012年,NASA从开放栈项目中撤出,不再作为活跃的贡献者,并且,替代地,做出了一个战略性的决策,开始使用亚马逊的AWS作为其云服务的提供者。2013年,NASA发表了一项内部审计报告,其中指出了缺乏技术进展以及其他的原因,导致该机构关于不再作为活跃开发者而参与该项目,转而专注于使用公有云。但是该报告与艾姆斯研究中心首席信息官(CIO)雷·奥布里恩(Ray O'Brien)所做的评价部分矛盾。
2013年12月,甲骨文宣布它已经以资助人的身份加入到开放栈项目中,并计划将开放栈带入甲骨文的昇阳操作系统(Solaris)、甲骨文Linux,以及它的很多产品中。随后,与2014年9月24日,发布了用于Oracle Solaris的甲骨文开放栈的发行版,以及使用“冰屋”(Icehouse)的甲骨文Linux。
2014年5月,惠普宣布,惠普宣布了惠普“氦核”(Helion)产品,并发布了惠普“氦核”开放栈社区的一个预览版,它是从“冰屋”(IceHouse)发行版开始的。惠普字2012年起,就在开放栈上运营惠普“氦核”(Helion)公有云。
截至2015年3月,NASA仍旧将开放栈用于其私有云。
一些开放栈项目,因为商标原因,而改名了。
开放栈的发布版历史(release history)如下:
发布版代号 |
中文 |
发布日期 |
新增组件 |
Austin |
奥斯汀 |
2010-10-21 |
* 新星/Nova(计算) * 雨燕/Swift(对象存储) |
Bexar |
贝克萨尔 |
2011-02-03 |
* 瞥视/Glance(系统映像/Image) |
Cactus |
仙人掌 |
2011-04-15 |
无 |
Diablo |
迪亚布洛(恶魔) |
2011-09-22 |
无 |
Essex |
埃塞克斯 |
2012-04-05 |
* 地平线/Horizon(中控台/Dashboard) * 符石/Keystone(身份识别) |
Folsom |
佛森 |
2012-09-27 |
* 量子/Quantum(网络,后改名为中子/Neutron) * 余烬/Cinder(块存储) |
Grizzly |
灰熊 |
2013-04-04 |
无 |
Havana |
哈瓦那 |
2013-10-17 |
* 热浪/Heat(编排/Orchestration) * 云高计/Ceilometer(账务接口,属于“遥测”/Telemetry项目) |
Icehouse |
冰屋 |
2014-04-17 |
* 宝藏/Trove(数据库DaaS,同时提供关系型和非关系型数据库支持) |
Juno |
朱诺 |
2014-10-16 |
* 撒哈拉/Sahara(弹性映射缩减,用于提供Hadoop集群) |
Kilo |
千 |
2015-04-30 |
* 铁质/Ironic(提供物理机Bare Metal Machine) |
Liberty |
自由 |
2015-10-16 |
* 扎卡尔/Zaqar(消息传递) * 马尼拉/Manila(共享文件系统) * 指派/Designate(域名解析) * 瓮城/Barbican(秘钥管理) * 搜索之光/Searchlight(搜索) |
Mitaka |
三鹰 |
2016-04-07 |
* 大个儿/Magnum(编排,用于对接Docker和K8S) |
Newton |
牛顿 |
2016-10-06 |
* 烧火/Aodh(告警) * 云猫咪/Cloudkitty(批价/Rating) * 国会/Congress(策略/Policy,即商业策略,提供治理能力) * 冰柜/Freezer(分布式备份恢复和容灾) * 西北狂风/Mistral(工作流) * 莫纳斯卡/Monasca(监控API,含monasca-api、monasca-log-api) * 慕拉诺/Murano(应用/服务发布和编目) * 日式面包屑/Panko(事件存储,是存储“云高计”生成的事件,并与其同属“遥测”/Telemetry项目) * 森林/Senlin(集群) * 土壤层/Solum(应用生命周期) * 敲钉器/Tacker(虚拟网络功能/VNF编配) * 窗格/Vitrage(根因分析/RCA) * 守望者/Watcher(资源优化) |
Ocata |
奥卡塔 |
2017-02-22 |
无 |
Pike |
矛 |
2017-08-30 |
无 |
Queens |
女王 |
2018-02-28 |
* 耀变体/Blazar(资源预留) * ceilometer-powervm(监视IBM PowerVM虚拟机管理器的性能) * 卡伯/Karbor(防止数据/元数据丢失,例如备份和复制) * 屋大维娅/Octavia(网络负载均衡) * 新秀/Storlets(对雨燕/Swift对象存储的扩展,通过Docker容器,在对象存储中安全、隔离地运行用户定义的代码) * 三环/Tricircle(API网关和网络自动化,帮助实现多开放栈实例,跨越一个或多个site,或者在一个混合云中,但是像一个开放栈云一样管理) * 樽/Zun(容器,以前称作“希金斯”/Higgins) |
Rocky |
磐石 |
2018-08-30 |
* 仿生人/Cyborg(以前称游牧者/Nomad,提供用于对资源进行加速的通用管理框架,资源包括GPU、FPGA、SoC、SSD等等) * ec2-api(另一个可独立运行的EC2 API,实现了原新星/Nova计算组件内置的EC2 API的功能,外加实现了VPC API。与亚马逊EC2 API兼容) * 日本板斧/Masakari(高可用性/HA服务,自动恢复失效的实例) * 秦岭/Qinling(类似亚马逊AWS的兰步达/Lambda,提供无服务器的功能,即FaaS) |
Stein |
石核 |
2019-04-10 |
* monasca-events-api(监控API的事件部分) * 布置/Placement(一个API服务,最初在牛顿版中作为新星组件的一部分,在本版本中独立出来,用于跟踪资源提供者的库存和用量) |
Train |
火车 |
2019-10-16 |
无 |
Ussuri |
乌苏里 |
2020-05-13 |
去掉 * 副手/Adjutant(一个工作流框架,将管理员和用户的任务自动化,支持链式行为) |
开放栈社区在一个6个月的、基于时间的发布周期上进行写作,具有经常性的开发里程碑。
在每个发布版(release)的计划阶段,社区会聚集召开“开放栈设计峰会”(OpenStack Design Summit),以便开发者召开工作会议,以及汇总计划。这些设计峰会会与开放栈峰会同时召开。
从“矛”(Pike,2017年8月版)的开发周期开始,开发会议被单独拆分为一个独立的“项目团队大会”(Project Teams Gathering,简称PTG)。这是为了避免让开发者受到那些在开放栈峰会期间的、针对客户的、对于开发者来说无聊的会议的演讲的干扰,并且允许设计讨论发生在下一个周期开始之前。
最近的开放栈峰会包括:
另外,更早的开放栈峰会还有:
开放栈具有一个模块化的架构,其组件有各种各样的代号。
译注:与其说开放栈(OpenStack)是一个“项目”,不如说它只是一个“旗号”,实际上在这个旗号下面分各个子项目。每个项目可能由不同都团队开发,专注于实现自己的功能。
“新星”(Nova)是开放栈项目的一个项目,它一种提供计算实例(也就是虚拟机)的方法。“新星”支持:
“新星”在现有的Linux服务器上运行一系列的守护进程(daemons)来提供这些服务。
“新星”(Nova)是用Python编写的。它使用了许多的外部Python库,例如:
“新星”(Nova)被设计为垂直可伸缩的(horizontally scalable),也就是说,当你需要更多的计算能力的时候,并不是让服务器变得更大(更多CPU/内存/硬盘),而是采购更多的服务器,并且简单地安装更多的配置雷同的服务器。
由于开放栈被广泛地集成到企业级基础设施中,如下点变成了越来越重要的问题:
监视端到端的性能需要来自“新星”(Nova)、“符石”(Keystone)、“中子”(Neutron)、“余烬”(Cinder)、“雨燕”(Swift),以及其他服务的跟踪指标(tracking metrics),除此之外,还有兔子MQ(RabbitMQ),它被开放栈用于消息传递。所有的这些服务都会产生它们各自的日志文件,在————尤其是企业级基础设施中——应当被监视。
“中子”是一个开放栈的项目,它在开放栈的其他服务(例如,“新星”——Nova)所管理的接口设备(例如虚拟网卡,即vNIC)之间提供“网络连接即服务”(NCaaS)。它实现了开放栈联网API。
它为开放栈环境中的虚拟网络基础设施(VNI)管理网络部分,并管理物理网络基础设施(PNI)的接入层(access layer)方面。开放栈组网组件(OpenStack Networking)使得各个项目可以创建先进的虚拟网络拓扑,它们可能会包含诸如防火墙、虚拟专用网(VPN)这样的服务。
“中子”(Neutron)允许专用的静态IP地址,也允许DHCP(动态IP地址分配)。它还允许浮动IP地址(Floating IP addresses),从而允许数据流量可以被动态地重路由。
用户可以使用例如OpenFlow这样的“软件定义网络”(SDN)技术,来支持多租(multi-tenancy)和伸缩(scale)。云栈网络可以部署和管理额外的网络服务,例如:
“余烬”(Cinder)是一个开放栈的块存储服务,用于向机器资源提供卷,机器资源包括:
“余烬”(Cinder)想要实现的一些目标包括:
“余烬”(Cinder)卷为虚拟机(被称为“实例”,由开放栈的“计算”软件——即Nova——管理)提供持久化的存储。
“余烬”(Cinder)也可被独立地用作其他开放栈服务,作为一个独立的软件定义存储。
这个块存储系统可以:
除了能够使用本地Linux服务器存储之外,它还可以使用其他的存储平台,包括:
“符石”(Keystone)是一个开放栈的服务,它通过实现开放栈的身份识别(Identity)API,来提供:
它是横贯整个云操作系统的公共的鉴权系统。“符石”可以与类似LDAP这样的目录服务集成。它支持:
开放栈“符石”服务目录(service catalog)允许API客户端动态地发现和导航到云服务
译注:“符石”(Keystone)是一种放置在石门的门拱中央的,或拱形屋顶中央的石头,上有刻有装饰性花纹符号,用于标识屋子的主人或家族。
印像服务(“瞥视”,glance)项目提供一个服务,用户可以使用它来上传和发现最终目的是为其他服务所使用的数据资产。它目前包括印像和元数据定义。
“瞥视”(Glance)印像服务包括对虚拟机(VM)印像的:
“瞥视”(Glance)拥有一个RESTful API,它允许:
虚拟机印象可以通过“瞥视”(Glance)来为用户所使用,它可以被存储在各种各样的位置上,包括:
“瞥视”会提供一个“元定义”(metadefs)目录。这为开放栈社区提供了一种方法,可以通过程序方式来确定各种各样的元数据键名,以及能够被应用到开放栈资源的有效的值。
“雨燕”(Swift)是一种分布式的、最终一致性的对象(object)/二进制大对象(blob)存储。开放栈的对象存储(Object Store)项目,也被称为“雨燕”(Swift),提供了一个云存储软件,使得你可以使用一个简单的API,来存储和获取大量数据。它被构建为可伸缩式的,并且针对横贯整个数据集的耐用性、可用性和并发性都进行了优化。“雨燕”(Swift)对于存储那些会无边界地增长的非结构化数据来说是完美的。
2009年8月,机架空间(Rackspace)开始了对开放栈对象存储的前身的开发,作为对“云文件”(Cloud Files)产品的替代。最初的开发团队由9人组成。对象存储软件公司“雨燕栈”(SwiftStack)是“雨燕”(Swift)目前的领先开发者,同时,英特尔、红帽、日本电信电话株式会社(NTT)、惠普、国际商用机器公司(IBM)等,都对它的开发做出了重要贡献。
“地平线”(Horizon)是开放栈的监控台(Dashboard)经典实现,它提供基于网页的用户界面,用于访问开放栈服务,包括“新星”(Nova,计算服务)、“雨燕”(Swift,对象存储)、“顶石”(Keystone,鉴权)等。“地平线”提供三个中心监控台:
“地平线”应用程序还提供了一系列的API抽象,用于开放栈的各个项目,从而开发者提供一个持久的、稳定的、可重用的方法集。通过使用这些抽象,在“地平线”上工作的开发者不需要非常熟悉各个开放栈的项目的API。
“热浪”是一个服务,它可以使用模板(templates)对多个综合(composite)云应用程序进行编排:
“西北狂风”(Mistral)是一个服务,它管理工作流(workflows)。用户通常使用基于Yaml的工作流语言来编写工作流,然后将编写好的工作流定义,通过所提供的REST API,上传到“西北狂风”(Mistral)。然后,用户可以:
译注:Mistral也称“密斯特拉尔风”,是一种在法国南部刮起的、寒冷而极强劲的西北风,风力通常有8级,有时可达15级。风自西北而来,经法国南部,吹入地中海。
开放栈“遥测”(Telemetry),代码为“云高计”(Ceilometer)为账务系统(billing systems)提供一个集中联系点(Single Point Of Contact)。
译注:Ceilometer是一种测量地面到云底之间的高度的仪器,航空上很常见,用来判断天气是否满足飞机的起降条件。这里用“测量云底高底仪器”来指代“用于云底账务收费模块”。
“宝藏”(Trove)是一个“数据库即服务”(database-as-a-service,简称DaaS)组件,它同时提供关系型和非关系型数据库引擎。
“撒哈拉”(Sahara)是弹性映射缩减(elastic map reduce)组件,它可以轻松而迅速地提供Hadoop集群。用户需要提供若干参数,例如:
当用户提供了所有这些参数后,撒哈拉就会在几分钟内部署这个集群。
“铁器”(Ironic)是一个开放栈项目,它提供实体裸机(bare metal machines)而不是虚拟机。它最初是从“新星”(Nova)“裸机”(Baremetal)驱动器中分离出来的,后来演进成了一个独立的项目。它是一套实体裸机的管理器(hypervisor)API,以及一系列的插件,能够与实体裸机的管理器(hypervisors)进行交互。它会使用PXE和IPMI来提供和开关机器,但是“铁器”(Ironic)也支持通过各个提供商的插件来进行扩展,从而实现额外的功能。
“扎卡尔”(Zaqar)是一个提供为网络开发者的多租(multi-tenant)云消息传递(messaging)服务。该服务提供完全RESTful的API,开发者可以使用它来在他们所使用的SaaS各个组件,与移动应用程序之间发送消息,使用各种各样的通信方式。在这个API之下,是一个高效的的消息传递引擎,被设计为具有可伸缩性和安全性。其他的开放栈组件也可以与“扎卡尔”(Zaqar)集成,从而将事件暴露给(surface events to)最终用户,以及与各个运行在“云上”层("over-cloud" layer)中的客体代理(guest agents)进行通信。
译注:Zaqar在阿拉伯语中是“木星”的意思。
开放栈的共享文件系统(马尼拉/Manila)提供一个开放式的API,用于管理在一个供应商不可知的框架(vendor agnostic framework)中的共享资源。标准原语(primitives)对一个共享资源的:
它的使用方式可以是:
支持来自如下厂商的商业的存储工具:
另外还支持如下的文件系统技术:
“指派”(Designate)是一个多租(multi-tenant)REST API,用于管理域名解析(DNS)。该组件提供“域名解析即服务”(DNS as a Service),与许多后台技术兼容,包括PowerDNS和BIND。它不提供实际的DNS服务,因为它的的目的是与现有的DNS服务进行接口,从而以一种分租户的形式(on a per tenant basis)来管理DNS区。
“搜索之光”(Searchlight)提供一个横跨多种开放栈云服务的、先进而持久的搜索能力。它通过将来自其他开放栈API服务器的用户的搜索请求,将其数据索引到ElasticSearch中,来进行卸载。“搜索之光”(Searchlight)已经被集成到“地平线”(Horizon,即监控台组件)中,并提供一个命令行接口
“瓮城”(Barbican)是一个REST API,被设计用于机密信息的安全存储、提供和管理。它的目标是可以被用于所有的环境,包括大型暂时云(large ephemeral Clouds)
“大个儿”(Magnum)是一个开放栈的API服务,由开放栈容器团队所开发。该服务可以让容器编排引擎,如Docker Swarm、Kubernetes(k8s)、Apache Mesos在开放栈中可以作为一级资源而被使用。“大个儿”(Magnum)使用“热浪”(Heat,编排系统)来对包含Docker和Kubernetes的操作系统印像进行编排,并在一个集群配置中的虚拟机或实体机中运行该印像。
“窗格”(Vitrage)是开放栈的RCA(根因分析,Root Cause Analysis)服务,用于组织、分析和扩展开放栈的告警和时间,产生关于问题的根本原因的见解,并且在他们被直接检测到之间,就推断出他们的存在。
注:Vitrage在法语中是“窗格”的意思。
该告警服务提供了基于预定义的规则而触发动作的能力。这些规则是基于“云高计”(Ceilometer,账务系统)或 Gnocchi 所采集的测量数据(metric)或事件数据(event data)的。
注:Aodh在爱尔兰语中是“烧火”的意思。
开放栈并不力图去与其他云的API进行兼容。但是,也确实存在一些由各种开放栈社区的成员所驱动的兼容性功能,对于他们来说,这些功能可能是很重要的。
开放栈是由一个非盈利基金会——及其董事会、一个技术委员会和一个用户委员会——进行治理的。董事会的组成是:
开放栈实用产品(OpenStack Appliance)用于指代那些能够支持开放栈云计算平台的软件——无论该平台是运行在物理设备上(例如服务器)还是虚拟机上(或者二者的结合)。通常,一个软件实用产品是一系列软件能力,它可以在没有操作系统的情况下实现功能。因此,它们必须包含足够的必要的下层操作系统组件才能正常工作。因此,一个严格的定义可以是:一个被设计为提供开放栈能力的实用产品,并且它不需要任何底层的操作系统。然而,实施这种严格的定义并没有什么好处,因为在实用产品(appliance)和发行版(distribution)之间并没有清晰的区别。有争议认为,“实用产品”(appliance)这个术语在一定程度上有些用词不当(misnomer),因为开放栈本身就被认为是一个云操作系统,因此,使用“开放栈实用产品”对于学究式的人来说会是用词不当的。
如果我们看一下实用产品(Appliances)和发行版(Distributions)的范围,就可以做出这样的区分:发行版(distributions)是一些工具集,它们尝试提供开放栈项目范围的一个广泛的覆盖功能;而实用工具(Appliance)则具有很窄的关注点,集中在更少的项目中。从一开始,供应商们就广泛地涉足到开放栈当中,并因此开发和市场推广了很多的实用产品(appliances)、应用程序(applications)和发行版(distributions)。
很多供应商都提供开放栈解决方案,这意味着,想要部署该技术的组织,在选择能够最好地满足他们的业务需求的供应商方面,会有很复杂的任务。巴布·达洛(Barb Darrow)在2015年05月27日的财富杂志上,提供了这一概括,指出,市场中可能会出现一定程度的合并,能够澄清这些选择。
用户还有其他方面需要考虑,例如,实际会引入的花费。一些供应商会提供一个包含了开放栈的大多数项目的产品包,另一些则可能提供只包含少量组件的产品包。其他需要考量的地方还包括,为了管理一个开放栈组件中的不成熟的部分,需要扩展多少私有代码,以及在多大程度上会鼓励供应商绑定在上面。
可以在开放栈基金会网站上找到关于供应商产品的最权威的信息
开放栈是一个复杂的实体,而采用它的人在试图在一个组织中实现开放栈的时候,会面临一系列的挑战。对于很多想要尝试实现他们自己的项目的组织来说,一个关键的问题在于,缺乏实际的技能。在“新栈”(The New Stack)的一篇文章中,Atul(阿图尔) JHA列举了任何组织在想要部署开放栈的时候,都会遇到的5个挑战。
开放栈是一系列项目的套件,而不是一个单独的产品。而因为各种各样的应用程序中的每一个,都需要进行适当的配置从而满足用户的需求,所以如果想要完成一个相当优化的安装的话,那么安装过程就会非常复杂,并且需要很大程度上的完整的技能范围。一个显而易见的解决方案就是,找到一个完整的供应商,让它来提供包含硬件和软件的完整的打包产品,不过尽职调查(due diligence)仍然是必需的。
这更多的是针对开源产品的文档的一贯状况,而不是开放栈本身,不过因为开放栈这个名号下实际上包含了25个独立的项目,因此管理这些文档的质量总是面临很大的挑战。
使用云类型的基础设施的主要目标之一,就是它可以不仅向用户提供高可靠性(HR),而且还能提供高可用性(HA),某些时候,公有云供应商可能还需要提供服务水平协议(SLA)
由于开放栈的“多项目”开发方式,在升级期间,在各个不同项目之间进行同步所涉及的复杂性,可能会意味着要有不可避免的停工时间。
在软件本身已经出新版本后,一个企业想要保持在一段时间内一直使用一个早期版本的软件,这是很常见的现象。而理由也是显而易见的,前面也提到过。然而,在开源项目中,开发者很少有动力去对那些已经被新代码所取代的旧代码进行维护和支持。此外,开放栈自身也已经正式对一些较早的发布版(releases)取消了支持。
考虑到上面的这些诸多挑战,对于一个想要实现开放栈的组织来说,最合适的方式就是找到一个供应商,并采购一个开放栈实用产品(appliance)或发行版(distribution)。
开放栈拥有广泛的、各式各样的用户,来自各行各业。其中,比较著名的使用者包括:
由于开放栈项目已经成熟,供应商为各种不同的客户们开辟了多种方式来部署开放栈:
一个供应商提供一个基于开放栈项目的公有云计算系统,
在这种模式下,一个客户在他们的内部网络中下载并安装一个开放栈发行版
一个供应商托管一个基于开放栈的私有云:包括底层的硬件以及上层的开放栈软件
一个供应商提供“开放栈管理软件(不包括任何硬件)即服务”的托管。客户签约注册该服务,并与他们的内部服务、存储和网络协同工作,从而得到完整可运营的私有云。
前面提到的NASA“星云”(Nebula)项目就是一个销售使用产品的供应商。该产品可以以插件形式加入到一个网络中,从而产出一个开放栈的部署