Grizzly版本中Scheduler filter机制详解
本博客欢迎转发,但请保留原作者信息(@孔令贤HW)!内容系本人学习、研究和总结,如有雷同,实属荣幸!
1 filters
根据不同的需求,有很多种类型的过滤方式,于是就有很多的filter,我们把这些filter类文件放置在同一个package中管理。当然,这些filter我们不可能全部用到,于是我们需要为管理员提供一种方式告诉系统他需要哪些filter,我们可以用配置文件实现。此外,我们需要两个额外的功能:
1. 我们想知道package中所有的filter类
2. 因为管理员可能因为疏忽大意,在配置文件中填写了错误的类(比如把过滤主机的filter填写成了其他功能的filter,因为系统中会有很多种filter,管理员也会晕头转向),对于这些错误的配置,我们需要识别,也就是所谓的容错
2 抽象
为了完成上面两个目标,我们需要一些前提。
首先,根据面向对象的原则,具有相同特征或行为的东西,需要将他们进行抽象。对于filter而言,其作用就是过滤,因此需要有一个表示过滤的基类BaseFilter。其次,过滤根据用途也分很多种,比如主机的过滤,虚拟机的过滤等等,而对于每一种过滤又有很多方法,所以某一个用途的filter也需要抽象,比如我们有BaseHostFilter表示主机过滤,它继承自BaseFilter。最后,当然是各种主机过滤的不同实现,比如基于ram的过滤,基于vcpu的过滤等等。它们的关系图如下:
因此,对于任何一种filter,我们只需调用其filter_all()方法,就能获得过滤后的结果。
3 filters管理
现在我们有了一些filter类,每个filter类分别位于单独的文件中,我们将这些文件放置在一个package中。当然,我们可能有另外一个包package2,里面是另一个功能的filters,于是我们会想到要提供一种统一的方式对这些package进行管理。
同样是面向对象的原理,我们需要一个统一的类管理这种类型的package,而不用关心每个package里到底是哪种filter(我们只知道每个package中的filters都是同一类型,即继承自同一个BaseXXXFilter,进而继承自BaseFilter)。于是,利用python的语言特性,我们可以很快的写出这样的处理类,参见nova/loadables.py中BaseLoader类的实现:
有了基类自然就有实现类。注意BaseLoader类中有一个loadable_cls_type属性,不同的实现类需要传递不同参数。比如我们有HostFilterHandler类用来管理主机过滤包中的filter类,那么就需要初始化时传递BaseHostFilter(还记得刚才的类继承图么?)。
当然,不要忘了过滤的目的,我们最好在BaseLoader类中提供一个方法get_filtered_objects(filters, objs),调用该方法完成过滤的功能。在OpenStack中,该方法是在一个继承自BaseLoader类,同时又被HostFilterHandler类继承的类(BaseFilterHandler)中实现。即:
4 代码
以创建虚拟机调度为例,在nova-scheduler中有HostManager类,其功能主要是管理主机,当然也包括对主机进行过滤。在其初始化函数中有以下两句:
其中:
1. HostFilterHandler:filter管理类,位于nova/scheduler/filters/__init__.py,而nova/scheduler/filters/路径下就是主机过滤的类文件,它的初始化可以验证上面的理论。
2. 配置项scheduler_available_filters:
表示管理员希望使用哪些filters。为了容错,我们调用get_matching_classes方法来排除因管理员疏忽而填错的类。
在HostManager类的get_filtered_hosts方法中完成对主机的过滤:
即:对hosts表示的每一个主机,调用filter_classes表示的每个filter处理,返回通过的hosts。
具体的过滤方式是:
假如管理员配置了filter1, filter2, filter3,有三个主机host1, host2, host3。于是按照filter的顺序,假如host1和host3通过了filter1,那么调用filter2时,只考虑host1和host3。假如只有host1通过了filter2,则调用filter3时,仅考虑host1。
本博客欢迎转发,但请保留原作者信息(@孔令贤HW)!内容系本人学习、研究和总结,如有雷同,实属荣幸!
相关推荐
### OpenStack Grizzly版本单节点双网卡实验部署知识点概览 #### 一、OpenStack部署准备工作 **1. 安装操作系统** - **选择操作系统:** 本实验选择了Ubuntu Server 12.04作为基础操作系统。这一步非常重要,因为...
OpenStack Grizzly是OpenStack云平台的一个版本,发布于2013年4月4日,其代码名称为Grizzly。OpenStack是一个开源的云计算平台,用于构建和管理公有云和私有云。它提供了操作系统、中间件、数据库和控制面板等多种...
### OpenStack M 版本离线搭建详解 #### 一、概述 OpenStack M 版本,即 OpenStack Mitaka 版本,是 OpenStack 的一个成熟版本之一,广泛应用于私有云建设和管理中。然而,在很多企业的环境中,出于安全考虑,内部...
【OpenStack Grizzly在Ubuntu 13.04上的多机安装详解】 OpenStack是一个开源的云计算平台,用于构建私有云和公共云服务。Grizzly是OpenStack的一个重要版本,发布于2013年,它引入了许多新功能和改进,增强了稳定性...
在本文中,我们将详细介绍如何在Ubuntu 13.04上安装Grizzly版本的OpenStack。OpenStack是一个开源云计算平台,用于构建公共云和私有云。Grizzly是OpenStack的一个重要版本,提供了多种服务,如计算、存储和网络管理...
### OpenStack M 版本搭建知识点详解 #### 一、OpenStack架构理解与设计 **OpenStack** 是一个开源的云计算管理平台项目,它提供了一系列的工具和服务来帮助组织搭建和管理自己的私有云和公有云基础设施。...
keystone data script
OpenStack F版本源码安装是针对云计算平台OpenStack的一个特定版本——F版本的源代码部署过程。OpenStack是一个开源的云计算管理平台项目,由NASA和Rackspace合作发起,旨在提供一个可以部署和管理大规模计算环境的...
总的来说,OpenStack Folsom版本的发布,不仅增强了OpenStack的功能,而且展示了OpenStack作为一个开放源码云平台的潜力和灵活性,吸引了更多的企业和开发者参与到OpenStack的生态系统中,推动了云计算领域的发展。...
OpenStack Icehouse版本安装指南是一份指导性文档,它详细描述了如何在Ubuntu 12.04或Ubuntu 14.04 LTS(长期支持版)操作系统上安装OpenStack Icehouse版本的步骤和配置要求。OpenStack Icehouse是OpenStack项目的...
OpenStack Neutron 原理详解
- **兼容性问题**:不同版本的 OpenStack 中,Ceilometer 的实现细节可能会有所不同,这导致了在升级或迁移过程中可能出现的兼容性问题。 - **配置复杂性**:为了充分利用 Ceilometer 的功能,往往需要复杂的配置...
总的来说,"openstack_grizzly_install-master"压缩包提供了一个方便的方式来安装和配置OpenStack Grizzly版本。通过使用这个工具,用户可以避免手动执行大量命令和调整配置文件,从而节省时间和减少出错的可能性。...
OpenStack Essex版本是OpenStack云平台的一个早期发行版本,它提供了基础设施即服务(IaaS)的功能,包括计算、存储和网络资源的管理。在本文中,我们将深入探讨如何在单节点环境中安装OpenStack Essex。 首先,...
OpenStack-Grizzly-安装指南您想安装 OpenStack Grizzly 却不知道如何安装? 这就是你要找的! 这很容易,简单且经过测试。 等不及了? 自己去看看吧: 指南分部单/多节点量子插件直接指南链接掌握单身的Linux网桥 ...
同时讲解了 Neutron 和多种交换机制下的网络类型实践与路由漂浮IP实现细节,在此过程中通过实例演示了网络服务的具体实施路径。 适用人群:OpenStack 使用者和技术维护人员、IT 行业从业者尤其是关注云计算领域的...
openstack icehouse版本的配置手册,全英文版,里面包含了块存储,计算,面板,数据库服务,身份认证,镜像服务,网络,对象存储,编排等基本组件的配置说明
OpenStack 架构详解 OpenStack 是一个社区、项目和开源软件,提供了一个部署云的操作平台或工具集。其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的...
OpenStack 架构详解 OpenStack 是一个开源的云计算平台,提供了一个操作平台或工具包,用于编排云计算资源。 OpenStack 由社区维护,包括 OpenStack 计算(Nova)、OpenStack 对象存储(Swift)和 OpenStack 镜像...