支持windows虚拟机和linux虚拟机分区调度

有一个新装的环境测试报windows,linux分区调度不支持

测试前提条件:

  • Openstack Pike
  • image文件配置了metadata。openstack image set –property os_type=windows image_id
  • 主机组也配置了metadate。nova aggregate-set-metadata aggregate_id os_type=windows

用该image生成的vm,没有被nova-scheduler调度到windows主机组。

分析原因,首先想到的是nova的配置文件filter选项有没有配置对应的filter。

# vim /etc/nova/nova.conf

scheduler_default_filters果然没有配置AggregateImagePropertiesIsolation

AggregateImagePropertiesIsolation的作用:Checks a host in an aggregate that metadata key/value match with image properties.

将AggregateImagePropertiesIsolation加上,重启openstack-nova-scheduler.service但生成的vm仍旧不能被调度到windows主机组。

查看日志文件/var/log/nova/nova-scheduler.log:发现有这句话:Filter AggregateImagePropertiesIsolation returned 5 host(s) get_filtered_objects /usr/lib/python2.7/site-packages/nova/filters.py:104

说明filter:AggregateImagePropertiesIsolation生效了,但是却不能识别出windows主机组,返回了5 host(s),该环境一共就5个计算节点。

查看代码逻辑:

# vim /lib/python2.7/site-packages/nova/scheduler/filters/aggregate_image_properties_isolation.py
class AggregateImagePropertiesIsolation(filters.BaseHostFilter):
    """AggregateImagePropertiesIsolation works with image properties."""

    # Aggregate data and instance type does not change within a request
    run_filter_once_per_request = True

    def host_passes(self, host_state, spec_obj):
        """Checks a host in an aggregate that metadata key/value match        with image properties.        """
        cfg_namespace = (CONF.filter_scheduler.
            aggregate_image_properties_isolation_namespace)
        cfg_separator = (CONF.filter_scheduler.
            aggregate_image_properties_isolation_separator)

        image_props = spec_obj.image.properties if spec_obj.image else {}
        LOG.debug("##### image_props: %s #####" % image_props)
        metadata = utils.aggregate_metadata_get_by_host(host_state)

        for key, options in metadata.items():
            if (cfg_namespace and
                    not key.startswith(cfg_namespace + cfg_separator)):
                continue
            prop = None
            try:
                prop = image_props.get(key)
            except AttributeError:
                LOG.warning(_LW("Host '%(host)s' has a metadata key '%(key)s' "
                                "that is not present in the image metadata."),
                            {"host": host_state.host, "key": key})
                continue

            # NOTE(sbauza): Aggregate metadata is only strings, we need to
            # stringify the property to match with the option
            # TODO(sbauza): Fix that very ugly pattern matching
            if prop and str(prop) not in options:
                LOG.debug("%(host_state)s fails image aggregate properties "
                            "requirements. Property %(prop)s does not "
                            "match %(options)s.",
                          {'host_state': host_state,
                           'prop': prop,
                           'options': options})
                return False
        return True

通过代码得知,只有一种情况下才会返回False,其他情况都是返回True。False就是计算节点被过滤掉,True是没被过滤掉。现在的实际情况是没有被过滤,全部计算节点返回的是True。期望的是只有metadate被设置为windows的主机返回True,其他应该都是False。现在来分析原因。

看代码,返回False只有一种情况:主机的某一个metadata和image的metadata不匹配。返回True,除了主机的所有metadata和image的metadata都匹配会返回;还有一种情况在代码的continue语句中,即在except中,该异常是AttributeError。就是说主机的所有metadata只要是或者和image的metadata都匹配或者不存在于image的metadata中,就会执行完所有的while循环,返回True。

检查不期望被filter通过的主机的metadata,nova aggregate-show aggregate_id 发现其他主机组没有配置os_type。用命令nova aggregate-set-metadatew aggregate_id给其他主机组添加属性:os_type=linux

再用该image生成vm,可以被正确调度到windows主机组。

原文发布于微信公众号 - 后端云(opnfv-tech)

原文发表时间:2018-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云Elasticsearch Service

Elasitcsearch 底层系列 Lucene 内核解析之 Stored Fields

Lucene 的 stored fields 主要用于行存文档需要保存的字段内容,每个文档的所有 stored fields 保存在一起,在查询请求需要返回字段...

20910
来自专栏大内老A

从Trace和Debug来看条件编译(Conditional Compilation)

条件编译,顾名思义,就是根据在编译时指定的条件决定最后需要编译的代码。条件编译是我们可以针对某些特性的环境编写相应的代码,比如有写的代码只需要在Debug模式下...

234100
来自专栏大内老A

ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则

对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象,在不同的使用场景中可能具有不同的验证规则。举个简...

184100
来自专栏跟着阿笨一起玩NET

C# 解析js方法,并调用js方法

本文转载:http://www.cnblogs.com/StudyLife/archive/2013/03/11/2953516.html

45130
来自专栏崔庆才的专栏

腾讯云上 Winpcap 网络编程四之主机通信

由于腾讯云上提供了Windows系统,所以我们这次Winpcap编程选用腾讯云主机实验,让大家简要了解两台云主机的通信方法以及实践过程。

58400
来自专栏林冠宏的技术文章

C++ 连接数据库的入口和获取列数、数据

这里不具体放出完整的程序,分享两个核心函数: 由于这里用到的函数是编译器自己的库所没有的,需要自己下载mysql.h库或者本地有数据库,可以去bin找到,放进去...

27180
来自专栏微服务生态

淘宝Tedis组件究竟是个啥(一)

淘宝的Tedis组件究竟是个啥呢?可能有一些朋友没有听过这个名字,有一些朋友会经常使用,那么今天我就来和大家深入分析一下,它的使用和原理。

12020
来自专栏逆向技术

16位汇编语言第二讲系统调用原理,以及各个寄存器详解

   16位汇编语言第二讲系统调用原理,以及各个寄存器详解 昨天已将简单的写了一下汇编代码,并且执行了第一个显示到屏幕的helloworld 问题?   hel...

24200
来自专栏cnblogs

knockoutjs 上自己实现的flux

在knockoutjs 上实现 Flux 单向数据流 状态机,主要解决多个组件之间对数据的耦合问题。 一、其实简单 flux的设计理念和实现方案,很大程度上人借...

23680
来自专栏文武兼修ing——机器学习与IC设计

队列及其实现队列队列的实现

队列 队列即FIFO,一言以蔽之就是先进先出。比如入队列的顺序是1,2,3,4,那么出队列的顺序也是1,2,3,4 队列的实现 软件——GO语言实现 除了使用链...

42970

扫码关注云+社区

领取腾讯云代金券