[云计算]OpenStack - Nova

Nova在OpenStack中的位置


Nova是Openstack最核心的服务模块,负责管理和维护云计算环境的计算资源,负责整个云环境虚拟机生命周期的管理。

Nova系统架构

Nova架构

Nova组件

组件 功能 一般部署位置
nova-api 接受rest消息 控制节点
nova-scheduler 选择合适的主机 控制节点
nova-conductor 数据库操作、复杂流程控制 控制节点
nova-compute 虚拟机生命周期管理和资源管理 计算节点
nova-novncproxy novnc访问虚拟机代理 控制节点
nova-consoleauth novnc访问虚拟机鉴权 控制节点

Nova特点

  1. 基于Rest API
    • 友好的服务访问方式
  2. 支持线性扩展(水平扩展)
    • 支持虚拟机实例数量随着节点的增加,线性增长
  3. 与硬件无关,支持多种标准硬件
    • 无需定制专门的硬件设备
  4. 与虚拟化平台无关,支持多种Hypervisor
    • 例如:KVM、LXC、QEMU、ESX、Xen、Hyper-V
    • 支持主流虚拟化平台,不依赖特定的厂商

Nova计算资源模型

  • Region(地区):指不同的地理区域(如公有云的广州、上海等)

  • AZ(Availability Zone 可用分区):指使用同一个供电或者制冷系统的主机集合,实际表示机房

  • 主机聚合(Host Aggregate 主机组):使用相同配置的主机的集合,比如相同的CPU 型号、相同的硬盘灯

VM操作与对象

Nova典型操作

分组 说明
虚拟机生命周期管理 虚拟机创建、删除、启动、关机、重启、重建、规格更改、暂停、解除暂停、挂起、继续、迁移、在线迁移、锁定、解锁、疏散,拯救,解拯救,搁置,删除搁置, 恢复搁置,备份,虚拟机导出镜像、列表、详细信息、信息查询更改,密码修改。
卷和快照管理操作 本质上是对Cinder API的封装。卷创建、删除、列表、详细信息查询。快照创建、删除、列表、详细信息查询。
虚拟机卷操作 虚拟机挂卷、虚拟机卸卷、虚拟机挂卷列表、虚拟机挂卷详细信息查询。
虚拟网络操作 本质上是对Neutron API的封装。虚拟网络创建、删除、列表、详细信息查询。
虚拟机虚拟网卡操作 虚拟机挂载网卡、虚拟机卸载网卡、虚拟机网卡列表。
虚拟机镜像的操作 本质上是对Glance API的封装,支持镜像的创建、删除、列表、详细信息查询。
虚拟机HA 自研虚拟机的可靠性操作。可手动触发(FS5.1)。
其他资源其他操作 Flavor,主机组,keypairs,quota等。
...
  • 名词解释:
    • 疏散:把一个实例从一个有故障或已停止运行的 compute 节点上移到同一个环境中的其它主机服务器上。
    • 拯救:虚拟机正常,但是系统有问题(如忘记密码,系统文件损坏),可以通过拯救从一个新的镜像启动,将原来的系统挂载到一个分区进行恢复。解拯救:再从原来的系统盘启动。
    • 搁置:将长时间不使用的VM从底层释放,从而节约服务器资源。用户要使用时可再次恢复。
    • 备份:对镜像启动的虚拟机进行做备份,上传到glance,并保留用户指定的最新个个数。目前不支持卷后端的。
    • 导出镜像:支持导出本地和卷的。卷启动的虚拟机所有卷都会做快照,本次磁盘启动的只对本地系统盘做快照。

Nova重要概念

名称 简介 说明
Server/instance 虚拟机 Nova管理提供的云服务资源。Nova中最重要的数据对象。
Server metadata 虚拟机元数据 通常用于为虚拟机附加必要描述信息:key/value。
Flavor 虚拟机规格模板 用于定义一种虚拟机类型,如一种具有2个VCPU、4GB内存、40GB本地存储空间的虚拟机。Flavor由系统管理员创建,供普通用户在创建虚拟机时使用。
Quota 资源配额 用于指定租户最多能够使用的逻辑资源上限。
Hypervisor / node 节点 对于KVM、Xen等虚拟化技术,一个node即对应于一个物理主机。对于vCenter,一个node对应于一个cluster。
Host 主机 对于KVM、Xen等虚拟化技术,一个host即对应于一个物理主机,同时对应于一个node。对于vCenter,一个host对应于一套vCenter部署。

Nova重要对象 - Flavor实例模板

属性
Property
描述
Description
示例
Value for example
name 描述性名称 m1.small
ram 虚拟机内存大小(MB) 2048
disk 虚拟根磁盘大小(GB) 50
ephemeral 次要数据盘大小(GB) 100
swap 实例交换空间大小 1
vcpu vCPU个数 8
is_public 实例类型私有还是公共 True
extra_specs 键值对(额外规格)

extra_specs键值解释

“quota:cpu_period”: “1000000”:Specifies the enforcement interval (unit:microseconds) for QEMU and LXC hypervisors
“quota:cpu_shares”: “1024”:Specifies the proportional weighted share for the domain,For example, a VM configured with value 2048 gets twice as much CPU time as a VM configured with value 1024
“quota:cpu_quota”: “10000“:Specifies the maximum allowed bandwidth (unit: microseconds); You can use this feature to ensure that all vCPUs run at the same speed.

Nova重要对象 - Image

属性
Property
描述
Description
示例
Value for example
name 镜像名 cirros-0.3.2-x86_64
disk_format 磁盘格式,可用格式:ami, ari, aki, vhd, vmdk, raw, qcow2, vdi, and iso. qcow2
container_format 镜像容器(理解为打包格式),可用格式: ami,ari, aki, bare, and ovf. bare
is_public 镜像是否可公共使用 True
min_disk 启动镜像所需的最小磁盘大小(GB) 20
min_ram 启动镜像所需的最小内存大小(MB) 2048
status 镜像大小(Bytes) queued/active
Property‘hw_disk_bus’ 与镜像关联的任意属性(键值对) scsi
  1. Property属性,一方面可以用于scheduler中的调度,选择合适的主机,另一方面对底层hypervisor的一些配置。可选的如下:
    • Property ‘hw_scsi_model
    • Property ‘hw_watchdog_action’(优先级高于在flavor的extra_spec中的设置)
    • Property ‘architecture’
    • Property ‘hw_video_ram’
    • Property ‘hw_vif_model’
    • Property ‘hw_qemu_guest_agent’
    • Property ‘hw_rng_model’
  2. disk_format:虚拟机的磁盘格式指的是底层的磁盘镜像格式,虚拟设备厂商有不同的格式来放置虚拟机磁盘镜像包含的信息。
  3. container_format:镜像容器格式表示包含虚拟机镜像的文件是否也包含虚拟机的metadata数据。
  4. Qcow2(QEMU 写时复制版本2),格式通常是KVM使用,相比裸格式,它有额外的特性,例如:
    • 使用稀疏文件呈现方式,因此镜像尺寸更小。支持快照。
  5. AMI/AKI/ARI 格式是亚马逊 EC2 云最初支持的格式。

Nova重要对象 - Block device mapping v2

属性
Property
描述
Description
示例
Value for example
id(uuid) 镜像id,快照id,卷id 5e7ceccc-189f-492f-8a95-9064e8f5eeec
source(source_type) 块的源类型 image, snapshot, volume or blank
dest(destination_type) 块的目的类型 volume or local
bus 设备总线(仅限libvirt) ide/usb/virtio/scsi
type 设备类型(仅限libvirt) disk/cdrom
device(device_name) 设备名称 vda
size 块设备的大小(GB)[可选] 10
format(guest_format) 设备将被格式化为(文件系统) ntfs
Bootindex(boot_index) 磁盘引导顺序(整数) 0
shutdown(delete_on_termination) 关机行为 preserve/remove

Nova模块功能

Nova模块 - api

  • nova-api作用:

    • 对外提供rest接口的处理
    • 对传入的参数进行合法性校验和约束限制
    • 对请求的资源进行配额(quota)的校验和预留
    • 资源的创建,更新,删除,查询等
    • 虚拟机生命周期的入口
    • 可水平拓展部署
  • nova-api处理流程:

    • WSGI Server + Paste + WebOb
    • Nova所有的rest请求的入口
  • nova-api层提供了三个服务:

    • osapi_compute:该服务主要处理openstack类型的rest请求消息
    • ec2:该服务用于处理兼容亚马逊类型的信息
    • metadata:该服务提供虚拟机相关信息的获取,比如虚拟机内置了cloud-init服务后,启动的时候会从metadata服务获取虚拟机的名称等设定到虚拟机内部
  • 架构均使用Python的第三方库来实现

Nova模块 - conductor

  • nova-conductor作用:

    • OpenStack G版本引入的组件
    • 数据库操作
      • 解耦其他组件(nova-compute)数据库访问
    • Nova复杂流程控制
      • 例如:创建,冷/热迁移,虚拟机规格调整,虚拟机重建
    • 其他组件的依赖
      • 例如:nova-compute需要依赖nova-conductor启动成功后才能启动成功
    • 其他组件的心跳定时写入nova-consoleauth
    • 可水平拓展部署
  • nova-conductor的好处:

    • 提高安全性
      • 避免nova-compute直接访问数据库,假设某个计算节点被攻击,则攻击者可以轻易获取数据库的全部权限,随意操作数据库。
    • 方便升级
      • 将数据库与nova-compute解耦,若数据库模式发生变更,nova-compute无需升级。
    • 性能优化
      • 提高并发
        • 原来:nova-compute通过唯一一个os线程直接访问数据库(阻塞)
        • 现在:nova-conductor通过rpc调用,rpc call的执行返回前不会阻塞其他绿色线程的执行,这种模式提高了并发
  • nova-conductor代码结构

    • ConductorManager:主要负责与数据库相关操作的类
    • ComputeTaskManager:主要负责流程调度的类

Nova模块 - scheduler

  • nova-scheduler功能:

    • Scheduler在创建实例的时候,会为实例选择出合适的主机(host),这个过程分为两步:过滤(Fliter)计算权重(Weight)
      • 过滤:过滤掉不符合我们要求,或镜像要求的主机,留下符合过滤算法的主机集合
      • 计算权重:通过指定的权重计算算法,计算在物理节点上申请VM的cost,cost越大,权重weight就越大(调度算法会优先选择权重最小的主机)。
    • 选择策略
      • 基于内存权重的选择
      • 散列:在候选的一个大小范围内的主机中,随机选择一个主机
    • Filter:对主机进行过滤的实体,支持自研扩展
      • scheduler_default_filters配置新写的filter
      • scheduler_available_filters指定扩展的filter目录的收集函数
    • 指定主机创建,迁移的时候该调度失效
  • 版本中用的Filter列表(部分华为自研)

    调度器 功能 备注
    RetryFilter 过滤掉之前已经尝试过失败的主机 原生
    HuaweiAvailabilityZoneFilter 过滤指定AZ的主机 自研
    RamFilter 过滤出内存资源充足的主机 原生
    HuaweiDiskFilter 过滤出本地磁盘资源充足的主机 自研
    ComputeFilter 过滤出状态为up的计算主机 原生
    ImagePropertiesFilter 通过镜像的属性过滤主机 原生
    SameHostFilter 过滤出指定虚拟机集合所在的主机 原生
    DifferentHostFilter 过滤掉指定虚拟机集合所在的主机 原生
    CoreFilter 过滤出vcpu资源充足的主机 原生
    AggregateInstanceExtraSpecsFilter 过滤出指定主机组的主机 原生
    PhysicalNetworkFilter 过滤出拥有指定物理网络的主机 自研
    CpuBindFilter Numa/evs/IO muma亲和性过滤主机 自研
    ServerGroupAntiAffinityFilter 过滤掉指定虚拟机集合所在的主机 原生
    ServerGroupAffinityFilter 过滤出指定虚拟机集合所在的主机 原生
    PciPassthroughFilter 过滤出拥有网络PCI设备的主机 原生
    BandwidthFilter PCI设备网卡带宽过滤 自研
    HypervisorInstanceExtraSpecsFilter 级联使用 自研

Nova模块 - compute

  • nova-compute框架一栏(如上图)

    • Manager
    • Driver
    • 每个Driver对应一种虚拟化
    • hypervisor
  • nova-compute功能:

    • 虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver)
    • 底层对接不同虚拟化的平台(KVM,VMware,Xen,FusionCompute,Hyper-V等)
    • 内置周期性任务,完成资源刷新,虚拟机状态同步等功能。
    • 资源管理模块(resource_tracker)配合插件机制,完成资源的统计。
    • Claim模块完成资源的分配和释放。
  • nova-compute代码结构

  • nova-compute周期性任务

    • 绿色线程执行
    • 通过对方法加装饰器来实现
    • 装饰器指定执行的周期间隔,默认为60s

  • nova-compute周期性任务

    周期性函数 功能 周期 备注
    _check_instance_build_time 检查虚拟机是否卡在building状态,目前不生效。 60S 原生
    _heal_instance_info_cache 从neutorn同步port的状态到nova数据库中。 60S 原生
    _poll_rebooting_instances 检测虚拟机是否卡在rebooting状态,目前不生效。 60S 原生
    _poll_rescued_instances 检测虚拟机是否卡在rescued状态,目前不生效。 60S 原生
    _poll_unconfirmed_resizes 虚拟机修改规格后,在一定时间内自动确认,目前不生效。 60S 原生
    _poll_shelved_instances 将shelved的虚拟机的资源删除,目前不生效。 3600S 原生
    _instance_usage_audit 定期通知虚拟机的存在,目前不生效。 60S 原生
    _poll_bandwidth_usage 更新虚拟机网卡带宽的使用,目前不生效。 600S 原生
    _poll_volume_usage 更新卷的使用。目前不生效。 原生
    _sync_power_states 周期性虚拟机状态的同步 60S 原生重写
    _reclaim_queued_deletes 软删除虚拟机后删除虚拟机 60S 原生
    update_available_resource 周期性资源同步任务 60S 原生
    _cleanup_running_deleted_instances 关闭(或删除)上层已经删除,但是底层残留的虚拟机 600S 原生
    _run_image_cache_manager_pass 目前不生效 原生
    _run_pending_deletes 删除残留虚拟机的文件 300S 原生
    pull_instances_with_exceptional_state 解决由于存储准备慢导致的虚拟机拉起失败 60S 自研
    _cycle_change_vnc_passwd 定时修改虚拟机的vnc密码 60S 自研
    _auto_update_vm_tools_of_instances 自动更新VMTools 60S 自研
    _run_emulatorpin_update 更新虚拟机的emulator的cpu 60S 自研

Nova模块 - novncproxy

img

  • nova-novncproxy功能:
    • novnc访问虚拟机代理,一般部署在控制节点,提供控制台功能,查看虚拟机的运行状态
  • 补充:
    1. 每获取一次vnc url会修改一次密码
    2. 获取url后,周期性任务会十分钟后修改一次密码

Nova模块 - consoleauth

  • nova-consoleauth功能:
    • novnc访问虚拟机鉴权,一般部署在控制节点,对控制台访问进行鉴权

noVNC连接建立流程

  • noVNC

    • 该模块与OpenStack无关,但OpenStack依赖于该第三方模块,该模块通过nova-novncproxy与vnc server建立连接需要经过以下6次握手。
    1. 进行ProtocolVersion握手,根据server返回的版本来确定client的版本。

    2. 进行Security握手,由server和client决定使用的Security的类型,该类型决定了后一步Authentication的方法。目前支持的Security类型有(1,2,16,22)。

    3. 根据Security类型,决定Authentication的方法

      1:不需要鉴权

      2:vnc鉴权

      16:TightVNC鉴权

      22:XVP鉴权

      对于novnc用的是类型2的鉴权,默认通过DES进行加密,具体方法是用server端返回的值+密码,然后用DES加密发送到server端进行鉴权

    4. 进行SecurityResult验证,如果server端返回0标识鉴权通过,否则失败。

    5. 进行ClientInitialisation,客户端初始化。

    6. 进行ServerInitialisation,server端初始化,包括窗口大小,像素格式和显示的标题等。

    7. 完成以上后,client和server真正建立了连接

  • nova-consoleauth说明

    • nova-novncproxy依赖于此服务进行token的鉴权。

Nova资源管理

Nova资源管理图解

  • 底层周期性任务调用Hypervisor driver获取原始资源信息
  • 原始资源信息在nova-compute中经过资源管理对象resource_tracker经过计算后保存在本地的self.compute对象中,并最后将该内容持久化到数据库中
  • nova-scheduler每次调度时从数据库中获取该资源信息,并更新到内存的host_state_map对象中,后面的资源扣除会在该内存对象中进行。
  • 在虚拟机的生命周期中会触发资源的分配和释放
  • 每个资源可以通过插件式管理,便于扩展
  • 资源更新的地方需要加锁进行控制,避免资源竞争导致的资源扣除不准确

Nova资源管理周期

  • 资源发现

    • Nova负责发现各个物理主机上的物理资源数量(物理CPU、内存、本地存储空间、PCI设备等),并根据配置值将其换算为逻辑资源数量(如CPU超额分配)。
  • 资源上报与刷新

    • Nova负责将各个物理节点上的逻辑资源数量上报至数据库,并定期刷新数据库记录,以使记录能够尽可能反映当前的实际资源状态。
  • 资源记录

    • DataBase负责持久化记录Nova管理下的各个物理节点上的逻辑资源数量。
  • 资源申请

    • 用户在创建虚拟机时,通过指定的flavor,对Nova提出具体的资源使用量申请。
  • 资源调度

    • Nova根据flavor描述的资源类型与数量,对DataBase中记录的各个物理节点上的逻辑资源数量进行判断,选出符合用户需求的节点,供创建虚拟机使用。
  • 资源占用

    • Nova在选定的物理节点上创建虚拟机,此时实际占用资源。
  • 资源释放

    • 当用户删除虚拟机时,虚拟机占用的资源被真正释放。

Nova中的存储

  • 本地存储
名称 映射到虚拟机 备注
root ephemeral volume disk 一般用于系统盘
additional ephemeral volume disk.local 一般是数据盘
Swap盘 disk.swap swap盘
Config driver disk.config 配置盘
  • 持久化卷存储
    • 通过调用cinder的接口实现卷的创建,删除。
      • Block-device-mapping
      • Block-device

Nova中的网络

网络类型 PORT类型 对应虚拟机类型 描述 是否自研 是否交付
OVS normal 普通软交换虚拟机 网卡设备为ovs网桥上创建的port 原生 交付
EVS vhostuser 用户态EVS虚拟机 网卡设备为evs网桥上创建的port 自研 交付
SRIOV direct 硬直通虚拟机 使用特殊网卡设备创建的VF设备 原生 交付
Netmap softdirect 软直通虚拟机 使用Netmap虚拟网口 自研 非商业交付

注意:

  1. 创建虚拟机对不同点网络使用方式不同。除ovs网络外,其他网络类型创建虚拟机必须指定对应的port
  2. EVS、SRIOV和netmap需要特殊物理网卡支持

虚拟机状态介绍

  • 虚拟机状态类型

    • Vm_State:数据库中记录的虚拟机状态
    • Task_State:当前虚拟机的任务状态,一般是个中间态或者None
    • Status:对外呈现的虚拟机状态
    • Power_State:从hypervisor获取的虚拟机的真实状态
  • 状态之间的关系

    • 系统内部只记录vm_state和task_state,power_state
    • Status是由vm_state和task_state联合生成的
  • 举例

    • vm_state为active,task_state为rebooting,则status为REBOOT
    • vm_state为building,则status为BUILD

Numa亲和性相关概念

Numa/EVS/IO Numa亲和性

  • numa亲和性指的是虚拟机分享同一个numa上的内存,cpu资源。
  • EVS和ionuma亲和性指的是虚拟机在分享同一个numa上内存,cpu和PCI资源。

Numa绑核和超线程

参数 可选值 含义
vcpuAffinity 0 绑定物理线程。
1 不绑定物理线程
hyperThreadAffinity any vCPU 可与该虚拟机或任何其他虚拟机的vCPU随时共享线程。
internal 虚拟机的vCPU不能与其他虚拟机的vCPU共享线程,但是可以与同一虚拟机的其他vCPU 共享线程。此时“vcpuAffinity”的值只能全为0。
none 虚拟机的vCPU彼此不共享线程。此时“vcpuAffinity”的值只能全为1。
sync 功能类似"none",同时还实现了虚拟机vCPU与物理CPU超线程一一映射,即虚拟机vCPU与物理CPU具有相同的拓扑结构。此时"vcpuAffinity"的值只能全为1。
Lock 在"sync"的基础上增加MCCP对实时虚拟机的要求,即隔离虚拟机中断到其他CPU上。此时"vcpuAffinity"的值只能全为1。
numaOpts 0 未开启numa亲和性,虚拟机内存,vcpu分配可能跨numa节点。
1 开启numa亲和性,虚拟机内存,vcpu只能分配一个numa节点。
2 开启IO numa亲和性,虚拟机跟pci在同一个numa节点。

Numa示例

hirmid –v | python –m json.tool
 "vm_list": {
        "instance-00000011": {
            "current node": "0-1", 
            "io thread pin list": "0-15", 
            "master node": "0-1", 
            "use cpus list": "0-15", 
            "use node memory": {
                "node 0": 17, 
                "node 1": 525
            }
        }, 
        "instance-00000026": {
            "current node": "1", 
            "io thread pin list": "0-2", 
            "master node": "1", 
            "use cpus list": "0-2", 
            "use node memory": {
                "node 0": 0, 
                "node 1": 517
            }
        }
    }
  • current node和master node相同表示没有跨numa,不同表示跨numa。
  • use cpus list表示分配的物理cpu号

虚拟机创建

相关准备

  • Flavor:实例规格
  • 网络:port或net
  • 镜像:glance中注册的镜像(qcow2、iso等)
  • 卷:需要挂载的数据卷或者启动卷
  • 其他信息(可选)
    • schduler_hint
    • Meta data
    • User date,az,max-count,config driver,key-name等

创建流程

  • 创建流程图

【重点】nova虚拟机创建流程:
一、准备计算资源(CPU、内存)
1.user向nova-api发出创建虚拟机的请求(rest-api的POST请求)
2.nova-api接收、处理(1.身份认证鉴权|2.配额校验申请|3.虚拟机对象写入DB)
3.nova-api组装request和scheduler相关信息(flavor/az/image等)发送给nova-conductor
4.nova-conductor转发组合信息给nova-scheduler选择主机
5.nova-scheduler根据前面的scheduler选择合适主机(1.filter过滤不适合的主机|2.weight权重计算,cost小的胜出或者散列策略在合适区间随机选一个)
6.nova-scheduler把主机返回给nova-conductor
7.nova-conductor调用该主机对应的nova-compute来创建虚拟机
8.nova-compute对计算资源加锁(阻塞)
二、准备网络资源
9.nova-compute请求neutron准备port
三、准备存储和镜像
10.nova-compute请求cinder准备disk
11.启动虚拟机
12.nova-compute去glance下载镜像
13.生成虚拟机
14.通过driver调用libvirt去拉起虚拟机

  1. 创建flavor

    Nova flavor-create testflavor 123 1024 5 2 --ephemeral 5
    
  2. 注册镜像

    glance image-create --disk-format qcow2 --container-format bare --file cirros --name testimage
    
  3. 创建网络或者port

    neutron net-create evs_net002 --provider:network_type vlan --provider:physical_network evs_net --provider:segmentation_id 102
    
    neutron subnet-create 768e4013-a682-4989-93e3-cf7b5eb6f8b8 10.10.20.0/24
    
    neutron port-create 768e4013-a682-4989-93e3-cf7b5eb6f8b8 --    binding:vnic_type=vhostuser --name litao04
    
  4. 指定网络创建虚拟机

    nova boot --flavor 123 --image testimage --nic net-id=671686c2-177f-4d62-9870-fd0d0368dde9 test_vm01
    
  5. 指定port创建虚拟机

    nova boot --flavor 123 --image testimage --nic port-id=671686c2-177f-4d62-9870-fd0d0368dde9 test_vm02
    
  6. EVS虚拟机

    nova boot --flavor 20 --image 77157434-18ec-47fd-b317-5301a537dbd5 --hint numaOpts=1 --nic port-id=471b71d9-4079-46cf-89c9-74d74418e3d0 --nic port-id=78eca429-5620-4f58-ba5b-a6b7c02f8f32 test_vm03
    
  7. EVS亲和性虚拟机

    nova boot --flavor 20 --image 77157434-18ec-47fd-b317-5301a537dbd5 --hint numaOpts=1 --hint evsOpts=1 --nic port-id=471b71d9-4079-46cf-89c9-74d74418e3d0 --nic port-id=78eca429-5620-4f58-ba5b-a6b7c02f8f32 test_vm04
    
    
  8. 硬直通虚拟机

    nova boot --flavor 20 --image 77157434-18ec-47fd-b317-5301a537dbd5 --nic port-id=471b71d9-4079-46cf-89c9-74d74418e3d0 --nic port-id=78eca429-5620-4f58-ba5b-a6b7c02f8f32 test_vm06
    
  9. IO Numa亲和性硬直通虚拟机

    nova boot --flavor 20 --image 77157434-18ec-47fd-b317-5301a537dbd5 --hint numaOpts=2 --nic port-id=471b71d9-4079-46cf-89c9-74d74418e3d0 --nic port-id=78eca429-5620-4f58-ba5b-a6b7c02f8f32 test_vm07
    
  10. Numa亲和性虚拟机

    nova boot --flavor 30 --image cirros --nic net-id=eafa4561-49f7-4cd9-9855-39b4c5844dfe --hint numaOpts=1 --hint vcpuAffinity=["1"] --hint hyperThreadAffinity=any numa_vm1
    
    nova boot --flavor 30 --image cirros --nic net-id=eafa4561-49f7-4cd9-9855-39b4c5844dfe --hint numaOpts=1 --hint vcpuAffinity=["0"] --hint hyperThreadAffinity=any numa_vm2
    
    nova boot --flavor 30 --image cirros --nic net-id=eafa4561-49f7-4cd9-9855-39b4c5844dfe --hint numaOpts=1 --hint vcpuAffinity=["1"] --hint hyperThreadAffinity=sync numa_vm3
    
    nova boot --flavor 30 --image cirros --nic net-id=eafa4561-49f7-4cd9-9855-39b4c5844dfe --hint numaOpts=1 --hint vcpuAffinity=["1"] --hint hyperThreadAffinity=none numa_vm4
    
    nova boot --flavor 31 --image cirros --nic net-id=eafa4561-49f7-4cd9-9855-39b4c5844dfe --hint numaOpts=1 --hint vcpuAffinity=["0"] --hint hyperThreadAffinity=internal numa_vm5
    
    • hirmd -v | python -m json.tool :查看虚拟机的所占用的numa信息
  11. 从卷启动虚拟机

    nova boot  --flavor 100 --nic net-id=654859f8-2540-4562-8884-26463f016005 --block-device source=volume,dest=volume,id=433cd085-5be6-4336-9163-b4a1094691aa,bus=ide,bootindex=0 yy_1
    
    nova boot --boot-volume 433cd085-5be6-4336-9163-b4a1094691aa --flavor 100 --nic net-id=654859f8-2540-4562-8884-26463f016005 --block-device source=image,dest=volume,id=433cd085-5be6-4336-9163-b4a1094691aa,bus=ide,bootindex=-1 yy_2
    
  12. 指定镜像启动携带数据卷

    nova boot --image windows.iso --flavor 100 --nic net-id=654859f8-2540-4562-8884-26463f016005 --block-device source=volume,dest=volume,id=433cd085-5be6-4336-9163-b4a1094691aa,bus=ide,bootindex=-1 yy_1
    

虚拟机可靠性处理

  • 创建过程中

    • 创建过程中,若在某一个主机上失败,会触发重调度机制,重新选择主机创建
    • 目前的重试次数为6次
  • 创建完成

    • HA机制:虚拟机或主机故障,由ceilometer检测到VM状态异常,然后上报告警,由heat触发VM的重建。存在本地磁盘的虚拟机HA后,磁盘的数据会丢失。
    • Heat收到告警后的等待时间(默认为5分钟)可以在创建虚拟机的meta中指定,也可以创建成功后更新

虚拟机冷迁移

  • 冷迁移确认后,无法回滚
  • 本地磁盘的冷迁移要开启互信

虚拟机热迁移

  • evs,sriov,netmpa不支持热迁移(FS5.1)
  • 不支持CPU异构的Host之间的虚拟机热迁移
posted @ 2021-04-07 00:12  SkyBiuBiu  阅读(1340)  评论(1编辑  收藏  举报