OpenStack新手指南:Nova基础知识

2018-01-12 15:45:00 浏览数 (1)

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

Nova?

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

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

组件?

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

01-openstack_p2_components.jpg01-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与使用PubSub 的 Message 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小时后。可能会有延迟,之后有一个自动确认机制。
openstackopenstack

0 人点赞