• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LeisureZhao
博客园    首页    新随笔    联系   管理    订阅  订阅

07.计算Nova→2.nova组件详解→2.nova-scheduler

返回总目录

  1. 创建 Instance 时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor 实例类型中,用户只需要指定用哪个 flavor 就可以了。
  2. 可用的 flavor 在 Admin->Compute->Flavors 中管理
描述详细
  1. 在 /etc/nova/nova.conf 中,nova 通过 scheduler_driver,scheduler_available_filters 和 scheduler_default_filters 这三个参数来配置 nova-scheduler。

  1. scheduler_driver
    1. Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步
      1. 通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)
      2. 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance
        1
        scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

  1. Nova 允许使用第三方 scheduler,配置 scheduler_driver 即可。
    1. Scheduler 可以使用多个 filter 依次进行过滤,过滤之后的节点再通过计算权重选出最适合的节点。

上图是调度过程的一个示例:
1.最开始有 6 个计算节点 Host1-Host6
2.通过多个 filter 层层过滤,Host2 和 Host4 没有通过,被刷掉了3.Host1,Host3,Host5,Host6 计算权重,结果 Host5 得分最高,最终入选
  1. scheduler_available_filters
    1. 当 Filter scheduler 需要执行调度操作时,会让 filter 对计算节点进行判断,filter 返回 True 或 False
    2. Nova.conf 中的 scheduler_available_filters 选项用于配置 scheduler 可用的 filter,默认是所有 nova 自带的 filter 都可以用于过滤操作
      1
      scheduler_available_filters = nova.scheduler.filters.all_filters
  1. scheduler_default_filters
    1. 用于指定 scheduler 真正使用的 filter
      1
      2
      3
      scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, 
      DiskFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, 
      ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter
  1. RetryFilter
    1. 作用是刷掉之前已经调度过的节点
    2. 举个例子: 假设 A,B,C 三个节点都通过了过滤,最终 A 因为权重值最大被选中执行操作。 但由于某个原因,操作在 A 上失败了。 默认情况下,nova-scheduler 会重新执行过滤操作(重复次数由 scheduler_max_attempts 选项指定,默认是 3)。 那么这时候 RetryFilter 就会将 A 直接刷掉,避免操作再次失败。 RetryFilter 通常作为第一个 filter。
  1. AvailabilityZoneFilter
    1. 为提高容灾性和提供隔离服务,可以将计算节点划分到不同的Availability Zone中。
    2. 创建 Instance 时,需要指定将 Instance 部署到在哪个 Availability Zone中。nova-scheduler 在做 filtering 时,会使用 AvailabilityZoneFilter 将不属于指定 Availability Zone 的计算节点过滤掉。
  1. RamFilter
    1. RamFilter 将不能满足 flavor 内存需求的计算节点过滤掉。
    2.  为了提高系统的资源使用率,OpenStack 在计算节点可用内存时允许 overcommit,也就是可以超过实际内存大小。 超过的程度是通过 nova.conf 中 ram_allocation_ratio 这个参数来控制的,默认值为 1.5
      1
      ram_allocation_ratio = 1.5
      其含义是:如果计算节点的内存为 10GB,OpenStack 则会认为它有 15GB(10*1.5)内存。
  1. DiskFilter
    1. DiskFilter 将不能满足 flavor 磁盘需求的计算节点过滤掉。
    2. Disk 同样允许 overcommit,通过 nova.conf 中 disk_allocation_ratio 控制,默认值为 1
      1
      disk_allocation_ratio = 1.0
  1. CoreFilter
    1. CoreFilter 将不能满足 flavor vCPU 需求的计算节点过滤掉。
    2. vCPU 同样允许 overcommit,通过 nova.conf 中 cpu_allocation_ratio 控制,默认值为 16
      1
      cpu_allocation_ratio = 16.0
      这意味着一个 8 vCPU 的计算节点,nova-scheduler 在调度时认为它有 128 个 vCPU。 需要提醒的是: nova-scheduler 默认使用的 filter 并没有包含 CoreFilter。 如果要用,可以将 CoreFilter 添加到 nova.conf 的 scheduler_default_filters 配置选项中。
  1. ComputeFilter
    1. ComputeFilter 保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。ComputeFilter 显然是必选的 filter。
  1. ComputeCapabilitiesFilter
    1. ComputeCapabilitiesFilter 根据计算节点的特性来筛选。例如我们的节点有 x86_64 和 ARM 架构的,如果想将 Instance 指定部署到 x86_64 架构的节点上,就可以利用 ComputeCapabilitiesFilter。
    2.  flavor 中有个 Metadata ,Compute 的 Capabilities就在 Metadata中指定。
      1. 点击update Metadata,“Compute Host Capabilities” 列出了所有可设置 Capabilities
      2. 点击 “Architecture” 后面的 “+”,就可以在右边的列表中指定具体的架构
      3. 配置好后,ComputeCapabilitiesFilter 在调度时只会筛选出 x86_64 的节点。 如果没有设置 Metadata,ComputeCapabilitiesFilter 不会起作用,所有节点都会通过筛选。

当配置了metadata后
  1. ImagePropertiesFilter
    1. ImagePropertiesFilter 根据所选 image 的属性来筛选匹配的计算节点。 跟 flavor 类似,image 也有 metadata,用于指定其属性。
    2. 例如希望某个 image 只能运行在 kvm 的 hypervisor 上,可以通过 “Hypervisor Type” 属性来指定
    3. 点击 “+”,然后在右边的列表中选择 “kvm”。
    4. 配置好后,ImagePropertiesFilter 在调度时只会筛选出 kvm 的节点。 如果没有设置 Image 的Metadata,ImagePropertiesFilter 不会起作用,所有节点都会通过筛选。
  1. ServerGroupAntiAffinityFilter 这里可以进行设置,但我没成功???
    1. 可以尽量将 instance 分散部署到不同的节点上。
  1. ServerGroupAffinityFilter
    1. 与 ServerGroupAntiAffinityFilter 的作用相反,ServerGroupAffinityFilter 会尽量将 instance 部署到同一个计算节点上。
  1. Weight
    1. nova-scheduler 选出了能够部署 instance 的计算节点。如果有多个计算节点通过了过滤,那么最终选择哪个节点呢?
    2. Scheduler 会对每个计算节点打分,得分最高的获胜。 打分的过程就是 weight,翻译过来就是计算权重值,那么 scheduler 是根据什么来计算权重值呢?
    3. 目前 nova-scheduler 的默认实现是根据计算节点空闲的内存量计算权重值: 空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。

posted @ 2019-07-24 15:56  LeisureZhao  阅读(447)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3