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

2018-01-22 11:43:47 浏览数 (1)

[第二部分基础知识] 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请求都需要特定的认证凭证。计算节点可以允许多个认证方案,提供者决定使用哪一个认证方案。

#线程模型

使用 eventlet和 greenlet库实现绿色线程设计。这会导致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小时后的延迟会有一个自动确认。
openstackopenstack

0 人点赞