前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenStack新手指南:Nova基础知识

OpenStack新手指南:Nova基础知识

作者头像
神话_Tyrannosaurus
发布2018-01-12 15:45:00
1.9K0
发布2018-01-12 15:45:00

Nova基础知识第二部分 OpenStack 新手指南

Nova?

它是提供云计算服务的IaaS平台OpenStack的的主要架构控制器。在美国国家航空航天局(NASA)迈出了第一步。贡献给了OpenSource并成为OpenStack最重要组件。

它由多个组件构成,它们执行不同的任务,将最终用户的API请求转化为虚拟机服务。所有这些组件都运行在一个非阻塞的基于消息的体系结构中,并且可以从相同或不同的位置运行,只需访问相同的消息队列服务。

组件?

Nova将虚拟机的状态存储在中央数据库中。这对于小型部署来说是最佳选择。Nova正在向多个数据存储方向发展,以满足大规模的需求。

01-openstack_p2_components.jpg
01-openstack_p2_components.jpg
  • Nova API:支持OpenStack Compute(计算) APIAmazon EC2 API和强大的管理API(针对特权用户)。它用于启动大部分的编排活动和策略(如配额)。它通过HTTP进行通信,将请求转换为通过Message BrokerObjectStoreHTTP进一步联系其他组件。这是一个用于路由和验证请求的WSGI应用程序。

  • Nova Computeworker守护进程(daemon)从其Message Broker接收命令,并使用Hypervisor(虚拟机管理程序)的API执行虚拟机创建/删除任务。它同时也更新数据库中任务的状态。

  • Nova Scheduler(调度程序:决定为虚拟机请求分配哪些Nova计算主机。

  • Network Manager(网络管理器)worker 守护进程从其Message Broker中选择网络相关的任务并执行这些任务。OpenStackQuantum现在可以选择使用Grizzly版本,而不是nova-network。并且覆盖了维护IP转发,网桥VLAN等任务。

  • Volume Manager(卷管理器):处理持久块存储卷的连接/分离到虚拟机(类似于AmazonEBS)。这是一个使用逻辑卷管理器iSCSI解决方案。这个功能已经被提取到OpenStackCinder。网络管理器不干涉Cinder的任务,但需要设置Cinder来使用。

  • Authorization Manager(授权管理器):为用户、项目和角色使用授权的api。它与_OpenStackKeyStone_进行通信以获取详细信息。

  • WebUI_OpenStackHorizon与_Nova API进行通信。

  • Message BrokerNova的所有组件都使用AMQP协议以非阻塞回调的方式进行通信,该协议得到了RabbitMQ、Apache QPid的支持。作为消息队列(Message Queue),还有对ZeroMQ集成的支持。它类似于所有Nova组件共享和更新的中心任务列表。

  • ObjectStore:这是一个简单的基于文件的存储(如亚马逊的S3)的镜像。可以用OpenStackGlance来代替。

  • Database (数据库):用于收集构建时间,运行虚拟机的状态。它详细介绍了可用的实例类型,可用的网络(如果nova-network)和项目的详细信息。可以使用SQLAlchemy支持的任何数据库。它是所有Nova组件的中央信息中心。

API风格

接口大多是RESTful路由(python重新实现Rails路由系统)包URI映射到控制器类上的操作方法。

每个需要计算的HTTP请求都需要特定的身份认证凭证。对于计算节点可以允许多个身份认证方案,提供者决定使用哪一个认证方案。

线程模型

使用了由 eventlet greenlet 库实现的绿色线程(Green Thread) 。这会导致OS(操作系统)的单进程线程I / O阻塞问题。虽然单线程很大程度上减少了竞争资源的条件,使用装饰者 @ lockutils.synchronized('lock\_name'在可疑场景中进一步消除竞争。

如果任何操作是长时间运行的,那么它应该具有所需的进程状态位置触发eventlet上下文切换的方法。如果有的话,下面的代码块将会切换到等待线程。如果没有其他线程在等待,将继续在当前线程没有任何运行。

from eventlet import greenthread greenthread.sleep(0)

MySQL查询使用阻止主进程线程的驱动程序。在“Diablo”发行版中,实现了线程池,但是由于引起bug比带好的好处相比更大,而被移除了。

Filtering Scheduler(过滤程序)

简而言之,它是'nova-scheduler'用来选择合适的nova-compute主机来生成新的必需虚拟机的机制。它准备一个未经过滤的主机的字典,并考虑创建所需虚拟机请求的成本。然后它选择成本最低的主机。

主机根据虚拟机的配置选项加权。

由于对每个请求计算权重,所以对于客户来说,更好的做法是一起请求大量的所需实例。

消息队列用法

Nova组件使用RPC与使用PubSubMessage Broker进行通信。Nova实现了rpc.call(请求/响应,API作为消费者)和rpc.cast(一种方式,API充当发布者)。

Nova APIScheduler使用消息队列作为Invoker(调用者),而Network(网络)和Compute(计算)则充当工人。Invoker(调用者)模式通过rpc.callrpc.cast发送消息。Worker模式从队列中接收消息,并以适当的响应回应rpc.call

Nova使用 Kombu库与RabbitMQ连接。

Hooks (钩子)

通过将命名的(hooks)钩子添加到Nova代码中,使开发人员能够扩展Nova功能,作为装饰器,它会延迟加载插件代码匹配(hooks)钩子名称(使用setuptools entrypoints,这是一个扩展机制)。hooks类定义应该有前置和后置的方法。

当稳定性是一个变化因素时,不要使用hooks(钩子),因为内部API可能会改变。

Dev Bootstrap(开发引导)

准备开始贡献... 阅读(OpenStack维基百科HowToContribute)的详细信息

为了跟上Nova的脚步,系统需要有libvirt和一个虚拟机管理程序(Linux主机首选的xen / kvm)。

$ git clone git://github.com/openstack/nova.git$ cd nova$ python ./tools/install_venv.py

这将为您准备使用virtualenvnova codebase副本,现在任何你想运行在所需的代码库上的命令都有了。

$ ./tools/with_venv.sh

运行我的测试

要运行nose测试和pep8 checker,当你完成virtualenv设置(或者这将首先在这里启动)...在'nova' codebase (代码库) 中

$ ./run_tests.sh

术语

  • 服务器:在计算系统内部创建的虚拟机,需要Flavor和镜像细节。
  • Flavor:表示具有磁盘空间,内存和CPU时间优先级的独特硬件配置
  • 镜像:用于创建/重建服务器的系统镜像文件
  • 重启:软件服务器重新启动发送正常关机信号。硬件重启电源重置。
  • 重新构建:删除服务器上的所有数据,并用指定的镜像替换它。服务器的IP地址和ID保持不变。
  • 调整大小:将现有的服务器转换为不同的 flavor。所有调整大小需要明确确认,只有这样才能删除原始服务器。24小时后。可能会有延迟,之后有一个自动确认机制。
评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档