第 5 章 Nova - 028 - nova-compute 部署 instance 详解

2024-01-07 06:30

本文主要是介绍第 5 章 Nova - 028 - nova-compute 部署 instance 详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

nova-compute

 

nova-compute 在计算节点上运行,负责管理节点上的 instance。

OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。

nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。

 

通过 Driver 架构支持多种 Hypervisor

 

nova-compute 为这些 Hypervisor 定义了统一的接口,Hypervisor 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。

 

下面是Nova Driver的架构示意图:

 

我们可以在 /opt/stack/nova/nova/virt/ 目录下查看到 OpenStack 源代码中已经自带了上面这几个 Hypervisor 的 Driver

 

某个特定的计算节点上只会运行一种 Hypervisor,只需在该节点 nova-compute 的配置文件 /etc/nova/nova.conf 中配置所对应的 compute_driver 就可以了。

在我们的环境中因为是 KVM,所以配置的是 Libvirt 的 driver。

compute_driver = libvirt.LibvirtDriver

 

nova-compute 的功能可以分为两类:

1、定时向 OpenStack 报告计算节点的状态

2、实现 instance 生命周期的管理

 

定期向 OpenStack 报告计算节点的状态

nova-scheduler 的很多 Filter 是根据算节点的资源使用情况进行过滤的。

比如 RamFilter 要检查计算节点当前可以的内存量;

CoreFilter 检查可用的 vCPU 数量;

DiskFilter 则会检查可用的磁盘空间。

 

nova-compute 会把计算节点的信息定期上报给 OpenStack 。

从 nova-compute 的日志 /opt/stack/logs/n-cpu.log 可以发现: 每隔一段时间,nova-compute 就会报告当前计算节点的资源使用情况和 nova-compute 服务状态。

 

nova-compute 可以通过 Hypervisor 的 driver 获取当前节点上所有 instance 的资源占用信息。

举例来说:

在实验环境下 Hypervisor 是 KVM,用的 Driver 是 LibvirtDriver。

LibvirtDriver 可以调用相关的 API 获得资源信息,这些 API 的作用相当于在 CLI 里执行 virsh nodeinfo、virsh dominfo 等命令。

 

 

实现 instance 生命周期的管理

OpenStack 对 instance 最主要的操作都是通过 nova-compute 实现的,包括 instance 的 launch、shutdown、reboot、suspend、resume、terminate、resize、migration、snapshot 等。

 

当 nova-scheduler 选定了部署 instance 的计算节点后,会通过消息中间件 rabbitMQ 向选定的计算节点发出 launch instance 的命令。

该计算节点上运行的 nova-compute 收到消息后会执行 instance 创建操作。

日志 /opt/stack/logs/n-cpu.log 记录了整个操作过程。

 

nova-compute 创建 instance 的过程可以分为 4 步:

1、为 instance 准备资源

2、创建 instance 的镜像文件

3、创建 instance 的 XML 定义文件

4、创建虚拟网络并启动虚拟机

 

1、为 instance 准备资源

nova-compute 首先会根据指定的 flavor 依次为 instance 分配内存、磁盘空间和 vCPU。

可以在日志中看到这些细节

 

网络资源也会提前分配。

 

 

2、创建 instance 的镜像文件

资源准备好之后,nova-compute 会为 instance 创建镜像文件。

OpenStack 启动一个 instance 时,会选择一个 image,这个 image 由 Glance 管理。 nova-compute会:

1、首先将该 image 下载到计算节点

2、然后将其作为 backing file 创建 instance 的镜像文件

 

从 Glance 下载 image

 

nova-compute 首先会检查 image 是否已经下载(比如之前已经创建过基于相同 image 的 instance)。

如果没有,就从 Glance 下载 image 到本地。

由此可知,如果计算节点上要运行多个相同 image 的 instance,只会在启动第一个 instance 的时候从 Glance 下载 image,后面的 instance 启动速度就大大加快了。

日志如下:

 

可以看到:

1、image(ID为 917d60ef-f663-4e2d-b85b-e4511bb56bc2)是 qcow2 格式,nova-compute 将其下载。

Nova 默认会通过 qemu-img 转换成 raw 格式,以提高 IO 性能。

2、image 的存放目录是 /opt/stack/data/nova/instances/_base,这是由 /etc/nova/nova.conf 的下面两个配置选项决定的。

instances_path = /opt/stack/data/nova/instances

base_dir_name = _base

3、下载的 image 文件被命名为 60bba5916c6c90ed2ef7d3263de8f653111dd35f,这是 image id 的 SHA1 哈希值。

 

 

3、为 instance 创建镜像文件

有了 image 之后,instance 的镜像文件直接通过 qemu-img 命令创建,backing file 就是下载的 image。

 

这里 instance 的镜像文件位于 /opt/stack/data/glance/images/7ad5f8e3-40bd-41d0-8393-da393a7b61ab,格式为 qcow2,其中 7ad5f8e3-40bd-41d0-8393-da393a7b61ab 就是 instance 的 id。

可以通过 qume-img info 查看 disk 文件的属性

 

 

这两个容易搞混淆:

1、image,指的是 Glance 上保存的镜像,作为 instance 运行的模板。

计算节点将下载的 image 存放在 /opt/stack/data/glance/images 目录下。

2、镜像文件,指的是 instance 启动盘所对应的文件

3、二者的关系是:image 是镜像文件 的 backing file。

image 不会变,而镜像文件会发生变化。

比如安装新的软件后,镜像文件会变大。

 

因为英文中两者都叫 “image”,为避免混淆,这里用 “image” 和 “镜像文件” 作区分。

 

 

3、创建 instance 的 XML 定义文件

 

创建的 XML 文件会保存到该 instance 目录 /opt/stack/data/nova/instances/f1e22596-6844-4d7a-84a3-e41e6d7618ef,命名为 libvirt.xml

 

 

4、创建虚拟网络并启动 instance

接下来便是为 instance 创建虚拟网络设备

 

linux-bridge 来实现的虚拟网络,一切就绪,接下来可以启动 instance 了。

 

至此,instance 已经成功启动。

OpenStack 图形界面和 KVM CLI 都可以查看到 instance 的运行状态。

 

 

在计算节点上,instance 并不是以 OpenStack上的名字命名,而是采用 instance-xxxxx 的格式。

 

----------------------------------------------引用来自--------------------------------------------------

https://www.cnblogs.com/CloudMan6/p/5451276.html

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587838&idx=1&sn=d9086010c7c1b6d2cf7bb5668dae6e00&chksm=8d308167ba47087114eeeac94add3dc9f642501fd22975b57fb193c92bd0b303375a046fff37&scene=21#wechat_redirect

转载于:https://www.cnblogs.com/gsophy/p/11004414.html

这篇关于第 5 章 Nova - 028 - nova-compute 部署 instance 详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578998

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级