[云计算]OpenStack - Nova

时间:2021-04-08 13:06:54   收藏:0   阅读:0

[云计算]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计算资源模型

技术图片

VM操作与对象

Nova典型操作

分组 说明
虚拟机生命周期管理 虚拟机创建、删除、启动、关机、重启、重建、规格更改、暂停、解除暂停、挂起、继续、迁移、在线迁移、锁定、解锁、疏散,拯救,解拯救,搁置,删除搁置, 恢复搁置,备份,虚拟机导出镜像、列表、详细信息、信息查询更改,密码修改。
卷和快照管理操作 本质上是对Cinder API的封装。卷创建、删除、列表、详细信息查询。快照创建、删除、列表、详细信息查询。
虚拟机卷操作 虚拟机挂卷、虚拟机卸卷、虚拟机挂卷列表、虚拟机挂卷详细信息查询。
虚拟网络操作 本质上是对Neutron API的封装。虚拟网络创建、删除、列表、详细信息查询。
虚拟机虚拟网卡操作 虚拟机挂载网卡、虚拟机卸载网卡、虚拟机网卡列表。
虚拟机镜像的操作 本质上是对Glance API的封装,支持镜像的创建、删除、列表、详细信息查询。
虚拟机HA 自研虚拟机的可靠性操作。可手动触发(FS5.1)。
其他资源其他操作 Flavor,主机组,keypairs,quota等。
...

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 键值对(额外规格) {"hw:mem_page_size":"2048“,"aggregate_instance_extra_specs:aggregate01": "true“, "quota:cpu_period": "1000000", "quota:cpu_shares": "1024", "quota:cpu_quota": "10000"}

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模块 - conductor

技术图片

Nova模块 - scheduler

技术图片

Nova模块 - compute

技术图片

Nova模块 - novncproxy

技术图片

Nova模块 - consoleauth

noVNC连接建立流程

Nova资源管理

Nova资源管理图解

技术图片

Nova资源管理周期

Nova中的存储

名称 映射到虚拟机 备注
root ephemeral volume disk 一般用于系统盘
additional ephemeral volume disk.local 一般是数据盘
Swap盘 disk.swap swap盘
Config driver disk.config 配置盘

Nova中的网络

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

注意:

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

虚拟机状态介绍

Numa亲和性相关概念

Numa/EVS/IO Numa亲和性

技术图片

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
            }
        }
    }

虚拟机创建

相关准备

创建流程

技术图片

  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
    

虚拟机可靠性处理

虚拟机冷迁移

技术图片

虚拟机热迁移

技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!