openstack系列文章(四)

学习 openstack 的系列文章 - Nova

  • Nova 基本概念
  • Nova 架构
  • openstack Log
  • Nova 组件介绍
  • Nova 操作介绍

1. Nova 基本概念

Nova 是 openstack 最核心的服务,负责管理和维护云环境的计算资源,虚拟机的生命周期管理就是通过 Nova 来实现的 。

2. Nova 架构

2.1 Nova 基本组件

如上图所示,Nova 由多个组件构成,这些组件以子服务的形式运行 。

举例,通过  systemctl status openstack-nova-compute.service  判断 nova - compute 服务是否运行:

Nova 主要组件:

  • nova - api: 接收和响应客户的 API 调用;
  • nova - scheduler:虚机调度服务,负责决定在哪个计算节点上运行虚机;
  • nova - compute: 管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理;
  • hypervisor: 计算节点上的虚拟化管理程序,虚机管理最底层的程序,常用的 hypervisor 有 KVM 、 VMware 等;
  • nova - conductor: nova - compute 并不会直接访问数据库,访问数据库的工作通过 nova - conductor 完成,这样做的好处是使得系统具有更好的伸缩性和更高的安全性;
2.2 nova 服务部署

nova - compute 服务一般部署在计算节点上,其它子服务一般部署在控制节点上。

命令  nova service-list  显示 nova 服务运行在哪个节点上:

登陆 controller 查看 nova-scheduler 服务是否运行:

2.3 虚机创建步骤

这篇文章写的非常好: https://ilearnstack.com/2013/04/26/request-flow-for-provisioning-instance-in-openstack/ ,强烈推荐,这里不做赘述 。

3. openstack Log

openstack nova 的 Log 存放路径为  /var/log/nova/  。

日志格式为 <时间戳><日志等级><代码模块><Request ID><日志内容><源代码位置>, 分别进行介绍:

  • 时间戳: 日志记录的时间;
  • 日志等级,有 INFO、 WARNING 、 ERROR 、DEBUG 等,默认为 INFO,要查看详细信息,可以将 /etc/nova/nova.conf 中的 debug 选项设为 true, 具体操作细节见 openstack 官网介绍;
  • 代码模块,当前运行的代码,举例,如下图所示:

代码模块为 nova.compute.manager, 找到该模块:

  1. find / -name compute  查找代码所在的 compute 目录;
  2. cd 到该目录,在该目录下有个 manager.py 的代码,即为运行的代码;
  3. 搜索 VM 关键字,在 1052 行找到打印这条 Log 的代码:

  • Request ID: 日志会记录连续不同的操作,为了便于区分和增加可读性,每个操作都被分配唯一的Request ID,便于查找;
  • 日志内容: 记录当前正在执行的操作和结果等重要信息;
  • 源代码位置: 日志代码的位置,包括方法名称,源代码文件的目录位置和行号,不是所有日志都有;

4. Nova 组件介绍

4.1 nova - api

nova - api 是 Nova 组件的门户,所有对 Nova 的请求首先会由 nova - api 进行处理。

关于虚机生命周期相关的操作,nova - api 都可以处理, openstack dashboard 中 Instances 栏的下拉菜单中记录着 nova -api 可执行的操作。

4.2 nova - scheduler

nova - scheduler 根据用户的资源需求进行调用,资源需求包括 VCPU, RAM, DISK 和 Metadata , 这些资源需求定义在 flavor 中。

如何根据 flavor 进行调用?

nova - scheduler 的默认调度器是 Filter scheduler , 当Filter scheduler 执行调度操作时,会让 filter 选择满足 flavor 的计算节点,当选出满足条件的计算节点之后计算各计算节点的权重以选择最优的计算节点,在该计算节点上创建 instance。

/etc/nova/nova.conf  中指明了默认的 filter:

RetryFilter: 刷掉已经调度过的节点。

AvailabilityZoneFilter: 将不属于指定 Availability Zone 的计算节点过滤掉,关于 Availability Zone 的介绍和设置可见这篇博文

ComputeFilter: 保证只有 nova - compute 服务正常工作的计算阶段才能够被 nova - scheduler 调度。

ServerGroupAntiAffinityFilter: 尽量将 Instance 分散部署到不同的节点上,前提是将 Instance 要加入到 Group 中,如果没有指定 server group, Filter 将不做任何过滤。

4.3 nova - compute

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

openstack 对 instance 的操作,最后都是交给 nova-compute 来完成的,nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。

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

  • 定时向 openstack 报告计算节点的状态;
  • 实现 instance 生命周期的管理,包括为 instance 准备资源,创建 instance 的镜像文件,创建 instance 的 XML 文件,创建虚拟网络并启动虚机。

Hypervisor 最清楚计算节点的信息,可以通过  virsh nodeinfo  和  virsh dominfo 命令查看计算节点和instance的信息:

注意要查看计算节点上运行的 instance 信息,需要切换到 root 用户,否则什么都显示不出来。

通过这些命令,也可以计算出这个 instance 还能够容纳多大 flavor 的 instance 。

5. Nova 操作介绍

5.1 Create Instance

通过 log 来分析这一创建过程,Debug 选项没开。

步骤如下:

1. 用户向 nova - api 发送请求: "create instance"

2. nova - scheduler 完成 调度,选择 compute-0 作为 instance 部署的节点

3. nova - compute 首先根据 flavor 为 instance  分配内存,磁盘空间和 vCPU

flavor 所需的资源分配好了之后再分配网络资源给 instance:

为 instance 创建 image :

要注意的是 nova - compute 会检查该 image 在 compute node 上是否存在,如果存在则直接使用,如果不存在,则 ssh 到 glance 通过 scp 下载 image 到本地:

将上传的 image 下载到  /var/lib/nova/instances/_base/ 目录下,下载下来的 image uuid 为 cce3aa2cd0a67c02306843a3523a997f632ee284, 通过  qemu-img info 命令查看该 image 的格式为:

instance 的镜像为 qcow2 格式,因此还需将 raw 格式的 image 转换为 qcow2 的 image 给 instance 用,转换后的 image 在  /var/lib/nova/instances  目录下,uuid 为 17edd30c-bf61-4592-8784-8774e8156469,该uuid 即为 instance 的 uuid 。

同理,通过  qemu-img info  查看该 image 是否为 qcow2 格式:

4. instance  创建成功

5.2 Rescue / Unrescue

Rescue: 故障恢复机制,由于误操作或者突然断电等操作使得操作系统起不来了,为了最大限度挽救数据,使用一张系统盘将系统引导起来,然后在尝试恢复。 问题如果不太严重,可以通过这种方式让系统重新正常工作。

5.3 Soft / Hard Reboot

Soft Reboot: 重启操作系统,整个过程中,instance 依然处于运行状态,相当于在 linux 中执行 reboot 命令。

Hard Reboot: 重启 instance,相当于关机之后再开机 。

5.4 Migrate

Migrate: 将 instance 从当前的计算节点迁移到其他节点上,不要求源和目标节点必须共享存储,Migrate 前必须满足一个条件:计算节点间需要配置 nova 用户无密码访问。

5.5 Live Migrate

Live Migrate: 在线迁移,instance 不会停机,分为共享存储迁移和非共享存储迁移。

关于共享存储 NFS 的内容可见这篇博文

5.6 Resize

Resize: 调整 instance 的 vCPU、内存和磁盘资源,Migrate 是特殊的 Resize,因为迁移过程中flavor未改变。

参考文章:

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

https://www.cnblogs.com/liuyisai/p/5992511.html

原文地址:https://www.cnblogs.com/xingzheanan/p/9826632.html

时间: 2024-10-09 16:36:39

openstack系列文章(四)的相关文章

JVM系列文章(四):类加载机制

作为一个程序员,仅仅知道怎么用是远远不够的.起码,你需要知道为什么可以这么用,即我们所谓底层的东西. 那到底什么是底层呢?我觉得这不能一概而论.以我现在的知识水平而言:对于Web开发者,TCP/IP.HTTP等等协议可能就是底层:对于C.C++程序员,内存.指针等等可能就是底层的东西.那对于Java开发者,你的Java代码运行所在的JVM可能就是你所需要去了解.理解的东西. 我会在接下来的一段时间,和读者您一起去学习JVM,所有内容均参考自<深入理解Java虚拟机:JVM高级特性与最佳实践>(

openstack系列文章(三)

学习openstack的系列文章-glance glance 基本概念 glance 架构 openstack CLI Troubleshooting 1. glance 基本概念 在 openstack 中提供 Image service 的是 Glance, 它让用户能够发现.获取和保存 Image. 其主要功能是: 通过提供 REST API 使得用户能够查询和获取 image 的元数据和 image 本身. 2. glance 架构 2.1 glance-api glance-api 是

Android异步处理系列文章四篇之三

Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Looper+MessageQueue深入详解Android异步处理四:AsyncTask的实现原理 Android异步处理三:Handler+Looper+MessageQueue深入详解 概述:Android使用消息机制实现线程间的通信,线程通过Looper建立自己的消息循环,MessageQueue是F

Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面

目录: Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Looper+MessageQueue深入详解Android异步处理四:AsyncTask的实现原理 Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面 概述:每个Android应用程序都运行在一个dalvik虚拟机进程中,进程开始的时候会启动一个主线程(MainTh

Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面

Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Looper+MessageQueue深入详解Android异步处理四:AsyncTask的实现原理 Android异步处理二:使用AsyncTask异步更新UI界面 概述: AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类.AsyncTask的内部实现

C#网络编程系列文章(四)之TcpListener实现同步TCP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 本文介绍 TcpListener 类提供一些简单方法,用于在阻止同步模式下侦听和接受传入连接请求. 可使用 TcpClient 或 Socket 来连接 TcpListener. 可使用 IPEndPoint.本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener. 可以将本地 IP 地址指定为 Any,将本

链表系列文章(四)

上一篇讨论了链表的反转问题,这一篇讨论链表排序的问题 1. 排序两个有序链表 比较简单,属于归并排序,不再赘述 时间复杂度O(n), 空间复杂度O(1) 1 ListNode *mergeList( ListNode *list1, ListNode *list2 ) { 2 if(!list1 || !list2) return list1 ? list1 : list2; 3 ListNode res(-1), *phead = &res; 4 while(list1 && l

TCP和UDP通信(C#网络编程) ---- 系列文章

文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编程系列文章(二)之Socket实现同步TCP服务器 C#网络编程系列文章(三)之TcpListener实现异步TCP服务器 C#网络编程系列文章(四)之TcpListener实现同步TCP服务器 C#网络编程系列文章(五)之Socket实现异步UDP服务器 C#网络编程系列文章(六)之Socket实现同步UDP服务器 C#网络编程系列文章(七)之UdpClient实现异步UDP服务器 C#网络编程系列文章(八)

【微信小程序开发?系列文章六】生命周期和路由

这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程序开发•系列文章四]模块化 [微信小程序开发•系列文章五]主界面 [微信小程序开发•系列文章六]生命周期和路由 整个微信小程序从打开到关闭,整个过程可以分为很多阶段或者说状态,这一整段的过程,我们称之为小程序的生命周期.而周期中的每种不同的状态,到另一个状态的过度和转化,是需要一个触发机制的,这种机