OpenStack 简介

作者:Tom Fifield
什么是 OpenStack?

您可能听说过 OpenStack。这是一款云软件,正受到 IT 行业巨头以及 CERN、Comcast 和 PayPal 等主要用户的广泛关注。但是,您知道它不仅仅是这些吗?它还是世界上发展最快的开源社区,是技术供应商和用户之间非常有趣的协作。

OpenStack 是真正完全开放的。如果您想试用一下,您可以停止阅读本文(稍后回来 - 我们会一直在这里!),访问 http://status.openstack.org/release,获取正在开发的功能的实时列表。选择一个,跟踪到代码审查系统,并给出您的评论!这是开放开发的示例,这只是 OpenStack 创立的“四大开放”之一 (https://wiki.openstack.org/wiki/Open)。当然,您可能已经知道 OpenStack 完全在 Apache 2 开源许可下发布 - 没有保留任何位,但您是否也了解“开放设计”原则?

该软件以六个月为周期发布,在每个周期开始时,我们都会举办设计峰会,供贡献者和用户聚集在一起,规划下一个版本的路线图。设计峰会已成为规模越来越大的会议的一部分,该会议还为新手举办研讨会、鼓舞人心的主题演讲和一些非常棒的用户故事。然而,在某个角落里,摆放着半圆形布局的房间,里面挤满了数十名开发人员,他们正在进行激烈的讨论,并在投影仪上显示的协作文档上做笔记。这就是 OpenStack 路线图的确定之处,功能实现的途径得到统一,人们自愿使其成为现实。这就是开放设计流程,我们欢迎您的参与!

喜欢这篇文章吗?注册以获取更多此类内容以及来自 Linux Journal 的优惠。

OpenStack 最初可能只有 NASA 和 Rackspace 两个组织,但现在已经有数百个,并且随着每个新成员的加入,社区变得更加强大和更具凝聚力。每天早上,OpenStack 开发人员醒来都会收到来自其他国家/地区的讨论邮件,这种势头最好用“强烈”来形容。

总的来说,OpenStack 最突出的特点是其强大的社区。它非常多元化,由非常不同的技术背景(从 Python 开发人员到打包人员再到翻译人员)和不同的哲学背景(从自由软件倡导者到铁杆资本家)组成。它也分布非常广泛,截至 2013 年 10 月,OpenStack 基金会声称拥有来自 130 个国家/地区的成员。因此,亲爱的读者,您很有可能在这里找到自己的位置。

成为贡献者

在十二个月的时间里,OpenStack 通常有超过一千名软件开发人员贡献补丁。尽管如此,我们仍然需要更多!

您可以在 Wiki 上找到有关如何入门的详细说明 (http://wiki.openstack.org/HowToContribute),但只是简单介绍几个关键方面...

OpenStack 使用 Launchpad 进行错误跟踪和 Github 进行代码托管,但这两个地方都不能用于贡献代码。没错:不接受 github 拉取请求。先别慌 - 这是有充分理由的:所有提交给 OpenStack 的补丁都必须经过广泛的代码审查和测试流程 (https://wiki.openstack.org/wiki/Gerrit_Workflow)。

OpenStack 中的每个代码更改都至少由 3 个人(所有者和项目的两位核心审阅者)查看,但通常更多,并且需要测试用例和 PEP8 合规性。补丁还会通过持续集成系统运行,该系统实际上为提交的每个代码更改构建一个新的云 - 确保该软件与 OpenStack 所有其他部分的交互符合预期。由于对质量的追求,许多人发现贡献代码提高了他们的 Python 编码技能。

当然,并非所有人都是 Python 开发人员。但是,不用担心 - 您仍然可以在这里与我们一起改变云计算的面貌。

文档

在许多情况下,成为 OpenStack 贡献者的最简单方法是参与文档编写工作。它不需要编码,只需要愿意阅读和理解您正在编写的系统。由于文档被视为代码,因此您将通过帮助编写文档来学习为 OpenStack 本身做出贡献所必需的机制。访问 https://wiki.openstack.org/wiki/Documentation/HowTo 了解更多信息。

翻译

如果您会用另一种语言写作,则可以通过易于使用的 Web 界面翻译 OpenStack (https://www.transifex.com/projects/p/openstack/). 如需帮助,请联系国际化团队 (https://wiki.openstack.org/wiki/I18nTeam)

提交错误报告

OpenStack 是您将参与的少数几个喜欢听到您在某些功能无法正常工作时的愤怒咆哮的项目之一。如果您注意到任何异常情况,请考虑提交错误报告,其中包含您的环境详细信息以及您的体验:http://docs.openstack.org/trunk/openstack-ops/content/upstream_openstack.html - 报告错误

提问

Http://ask.openstack.org 是一个 StackOverflow 风格的论坛,用于提问有关 OpenStack 的问题。随时使用它来提问,如果您有能力 - 请留下来并尝试回答别人的问题。或者至少对看起来不错的帖子进行投票。

布道

认为 OpenStack 非常酷?通过告诉您的朋友来帮助我们;我们将非常感激。您可以在 http://openstack.org/marketing 找到一些帮助材料,或者加入营销邮件列表以了解一些值得参加的酷炫活动。

用户组

加入您当地的用户组 https://wiki.openstack.org/wiki/OpenStackUserGroups - 到目前为止,它们遍布大约 50 个国家/地区。参加以学习,或自愿发言 - 我们很乐意欢迎您。

导航生态系统:您的 OpenStack 之旅从哪里开始?

OpenStack 作为开源项目的一个独特方面是,您可以从许多不同的级别开始参与其中 - 您不必自己完成所有事情。

从公共云开始 - 您甚至不需要安装 OpenStack 即可开始使用它。您今天可以在 eNovance、HP、Rackspace 等公司刷信用卡,然后开始迁移您的应用程序。

当然,对于许多人来说,OpenStack 最吸引人的地方是构建自己的私有云,并且有几种方法可以做到这一点。也许最简单的方法是设备式解决方案。您购买一个东西,拆箱,插入电源和网络,它就成了一个 OpenStack 云。

但是,硬件选择对于许多应用程序来说很重要,因此如果这适用于您 - 请考虑有几种软件发行版可用。您当然可以从 Canonical、Red Hat 和 SUSE 获得企业支持的 OpenStack,但也可以看看一些专门的发行版,例如 Rackspace、Piston、SwiftStack 或 Cloudscaling 的发行版。

如果您希望有人帮助您指导您完成从硬件到应用程序的决策,也许在此过程中添加一些功能或集成组件,请考虑联系具有 OpenStack 经验的系统集成商,例如 Mirantis 或 Metacloud。

或者,如果您的偏好是在内部建立自己的 OpenStack 专业知识,那么启动它的一个好方法可能是参加或安排培训课程。OpenStack 基金会最近启动了一个培训市场 (http://www.openstack.org/marketplace/training),您可以在其中查找附近的活动。还有一个社区培训工作 (https://wiki.openstack.org/wiki/Training-manuals) 正在进行中,以制作用于培训的开源内容。

为了从 OpenStack 框架的灵活性中获得最大收益,您可以选择执行“DIY”解决方案。在这种情况下,我们强烈建议您获取一份 OpenStack 运维指南 (http://docs.openstack.org/ops),其中讨论了您在此过程中将面临的许多决策。还有一个新的 OpenStack 安全指南 (http://docs.openstack.org/sec/),它是加固您的安装的宝贵参考。

自己动手构建 OpenStack 云

如果在仔细分析后,您已决定从头开始自行构建 OpenStack,则需要考虑许多方面。

存储

云平台最基本的底层之一是其运行的存储。

一般来说,当您选择存储后端时,请问以下问题

  • 我的用户是否需要块存储?
  • 我的用户是否需要对象存储?

  • 我是否需要支持实时迁移?

  • 我的持久性存储驱动器应该包含在我的计算节点中,还是我应该使用外部存储?

  • 我可以实现的盘片计数是多少?更多的轴心是否会带来更好的 I/O,尽管存在网络访问?

  • 哪一个可以带来我追求的最佳性价比方案?

  • 我如何以操作方式管理存储?

  • 存储的冗余性和分布性如何?如果存储节点发生故障会怎样?它可以在多大程度上缓解我的数据丢失灾难场景?

  • 我应该使用哪个插件进行块存储?

对于许多新云来说,对象存储和持久/块存储是用户想要的强大功能。但是,使用 OpenStack,如果您想要更简单的部署,则不必强制使用其中任何一个。

OpenStack 的许多部分都是可插拔的,其中最好的例子之一是块存储 - 您可以将其配置为使用来自长列表供应商的存储(Coraid、EMC、GlusterFS、Hitachi、HP、IBM、LVM、NetApp、Nexenta、NFS、RBD、Scality、SolidFire、Windows Server、Zadara)。

网络

如果这是您第一次在您的组织中部署云基础设施,在阅读本节后,您的第一次对话应该是与您的网络团队进行的。运行中的云中的网络使用与传统的网络部署截然不同,并且有可能在连接性和策略层面都具有破坏性。

例如,您必须计划您的访客实例和管理基础设施所需的 IP 地址数量。此外,您必须研究和讨论通过代理服务器和防火墙的云网络连接。

您需要做出的首批选择之一是在“旧版”nova-network 和 OpenStack 网络(又名“neutron”)之间进行选择。Nova-network 是一种更简单的部署网络方式,但不具备 Neutron 的完整软件定义网络功能,并且将在 12-18 个月后弃用。

对象存储的网络模式起初可能看起来很陌生。考虑以下主要流量

  • 对象、容器和帐户服务器之间
  • 这些服务器和代理之间
  • 代理和您的用户之间

对象存储在托管数据的服务器之间非常“健谈” - 即使是一个小集群也会产生兆字节/秒的流量,这主要是“您有该对象吗?”/“是的,我有该对象”。当然,如果上述问题的答案是否定的或超时,则会开始复制对象。

考虑一下整个服务器发生故障的情况,并且需要“立即”传输 24 TB 的数据才能保持三个副本 - 这可能会给网络带来巨大的负载。

另一个经常被遗忘的事实是,当上传新文件时,代理服务器必须写出与副本数量一样多的流 - 从而产生多倍的网络流量。对于 3 副本集群,10Gbps 输入意味着 30Gbps 输出。将此与之前复制的高带宽需求相结合,就得出了您的私有网络的带宽应明显高于您的公共网络带宽的建议。哦,OpenStack 对象存储在内部使用未加密、未经身份验证的同步进行性能通信 - 您确实希望私有网络是私有的。

关于带宽的其余要点是面向公众的部分。Swift-proxy 是无状态的,这意味着您可以轻松添加更多并使用 http 负载均衡方法来共享它们之间的带宽和可用性。

更多的代理意味着更多的带宽,如果您的存储能够跟上。

“云控制器”

为了通过共享无/分布式一切架构实现最大可扩展性,OpenStack 没有“云控制器”的概念。实际上,部署者面临的最大决策之一是如何隔离所有“中央”服务 - 例如 API 端点、调度器、数据库服务器和消息队列。

为了获得最佳结果,有必要获取一些关于云将如何使用的指标 - 当然,使用适当的自动化配置管理系统,随着操作经验的积累,可以进行扩展。要寻找的关键答案可能包括

  • 一次将运行多少个实例?
  • 一次将运行多少个计算节点?
  • 有多少用户将访问 API?
  • 有多少用户将访问仪表板?
  • 您的云一次运行多少个 nova-API 服务?
  • 单个实例运行多长时间?
  • 您的身份验证系统是否也从外部进行验证?

选择计算节点硬件的大小主要取决于正在运行的虚拟机的类型,“中央服务”机器可能更困难。对比两个运行 1,000 个虚拟机的云。一个主要用于长期运行的网站,而另一个的平均生命周期更接近一个小时。在后一种情况下,如此多的变化肯定需要更重的 API/数据库/消息队列。

扩展

鉴于“可扩展性”是 OpenStack 使命中的关键词,因此毫不奇怪,除了所有组件的自然水平扩展之外,还有几种方法致力于协助扩展您的云(通过隔离它)。

前两个旨在用于非常大的 - 多站点 - 部署。计算单元旨在允许以分布式方式运行云,而无需使用更复杂的技术,或侵入现有的 nova 安装。云中的主机被划分为称为单元的组。单元以树形结构配置。顶层单元(“API 单元”)有一个运行 API 服务的主机,但没有虚拟机监控程序。每个子单元运行常规安装中找到的所有其他典型服务,但 API 服务除外。每个单元都有自己的消息队列和数据库服务,并且还运行单元服务 - 该服务管理 API 单元和子单元之间的通信。

这允许使用单个 API 服务器来控制对多个云安装的访问。除了常规的 nova-scheduler 主机选择之外,引入第二级调度(单元选择)为控制虚拟机在何处运行提供了更大的灵活性。

将其与区域进行对比。区域每个安装都有一个单独的 API 端点,从而实现更离散的分离。希望跨站点运行实例的用户必须显式选择一个区域。但是,不需要运行新服务的额外复杂性。

或者,您可以使用可用性区域、主机聚合或两者来分区计算部署。

可用性区域使您能够将 OpenStack 计算主机安排到逻辑组中,并提供与其他可用性区域的物理隔离和冗余形式,例如通过使用单独的电源或网络设备。

您可以在每台服务器上本地定义指定计算主机所在的可用性区域。可用性区域通常用于识别具有共同属性的一组服务器。例如,如果您的数据中心中的某些机架位于单独的电源上,您可以将这些机架中的服务器放在自己的可用性区域中。可用性区域还可以帮助分隔不同类别的硬件。

当用户配置资源时,他们可以指定他们希望从哪个可用性区域构建其实例。这允许云消费者确保他们的应用程序资源分布在不同的机器上,以便在硬件故障时实现高可用性。

另一方面,主机聚合使您能够将 OpenStack 计算部署分区为逻辑组,以实现负载平衡和实例分布。您可以使用主机聚合来进一步分区可用性区域。例如,您可以使用主机聚合将可用性区域分区为共享公共资源(例如存储和网络)或具有特殊属性(例如可信计算硬件)的主机组。

主机聚合的常见用途是为计算调度程序提供信息以供使用。例如,您可以使用主机聚合来对共享特定映像的一组主机进行分组。

另一个非常有用的扩展功能是对象存储全局集群。这增加了区域的概念,并允许诸如在异地位置拥有三个副本之一的场景。查看 SwiftStack 博客以获取更多信息 http://swiftstack.com/blog/2012/09/16/globally-distributed-openstack-swift-cluster/

总结

如果您已经了解了存储选项,确定了哪些类型的存储以及如何实现它们,仔细规划了网络(考虑到部署它的不同方式以及如何管理它),获取了指标来设计您的云控制器,然后考虑了如何扩展您的集群,那么您现在可能是一位 OpenStack 专家。在这种情况下,我们鼓励您与社区分享您的发现!

在从大型强子对撞机 ATLAS 等粒子物理实验中了解了计算的可扩展性之后,Tom 领导创建了 NeCTAR 研究云。

Tom 目前正在利用他对大规模分布式系统的热情,专注于其最重要的部分:人,担任 OpenStack 基金会的社区经理。Tom 是 OpenStack 运维指南的合著者、文档核心审阅者,并且在一定程度上为计算 (Nova)、对象存储 (Swift)、块存储 (Cinder)、仪表板 (Horizon) 和身份服务 (Keystone) 做出了贡献。

加载 Disqus 评论