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

新手指南OpenStack:Nova的基础知识

作者头像
天空
发布2018-01-22 11:43:47
2.3K0
发布2018-01-22 11:43:47

[第二部分基础知识] OpenStack 新手指南 #Nova? 它是OpenStack提供云计算服务的IaaS的主要架构控制器。在美国国家航空航天局(NASA)进入了初级阶段,并贡献给了OpenSource成为OpenStack的最重要组件。 它由多个组件构成,执行不同的任务,将最终用户的API请求转化为虚拟机服务。所有这些组件都运行在一个非阻塞的基于消息的体系结构中,并且可以从相同或不同的位置运行,只需访问相同的消息队列服务。 #组件? Nova将虚拟机的状态存储在中央数据库中。这对于小型部署来说是最佳选择。Nova正在向多个数据存储方向发展,以满足高规模的需求。

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

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

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

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

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

  • 授权管理器:为用户,项目和角色提供经授权的API使用的接口。详情请见它与OpenStack的KeyStone进行通信。

  • 网络产品界面设计OpenStack的Horizo​​n与用于仪表板接口的Nova API进行通信。

  • 消息代理:Nova的所有组件都使用AMQP协议以非阻塞回调的方式彼此通信,RabbitMQ支持Apache QPid。作为Message Queue,还有对ZeroMQ集成的支持。就像所有Nova组件共享和更新的中心任务列表一样。

  • 对象存储:这是一个简单的基于文件的存储(如亚马逊的S3)的图像。这可以用OpenStack的一瞥来代替。

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

#API风格

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

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

#线程模型

使用 eventletgreenlet库实现绿色线程设计。这会导致OS的单进程线程阻塞I / O问题。虽然单线程很大程度上减少了竞争条件,但是使用装饰者 @ lockutils.synchronized('lock_name')方法在可疑场景中进一步消除竞争,从而被保护。

如果任何操作是长时间运行的,则应该具有需求的进程状态位置触发eventlet上下文切换的方法。放置类似下面的代码片段将切换上下文到等待线程,如果有的话。如果没有其他线程在等待,将继续当前没有任何延迟的线程。

从eventlet导入 greenthread greenthread.sleep(0)

MySQL查询使用阻止主进程线程的驱动程序。在“Diablo”发行版中,一个线程池被实现,但是由于缺陷比优势大

而被移除。

#过滤程序

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

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

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

#消息队列用法

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

Nova API和Scheduler使用消息队列作为Invoker,而Network和Compute充当工作者。调用者模式通过rpc.call或rpc.cast发送消息。Worker模式从队列中接收消息,并以适当的响应回应rpc.call。

Nova 与RabbitMQ连接时使用 Kombu库 。

#钩子

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

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

#开发引导

开始贡献...详细阅读 (OpenStack维基HowToContribute)。

为了与Nova车轮一起滚动,系统将需要libvirt和其中一个管理程序(Linux主机首选的xen / kvm)。

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

这将准备好您的副本nova codebase所需的virtualenv,现在任何命令你想运行在所需的代码库

$ ./tools/with_venv.sh

#运行我的测试

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

$ ./run_tests.sh

#术语

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