Nova rebuild for boot from volume issue
目录
Nova boot from volume
众所周知,Nova Launch Instance 有很多种方法,boot from image、boot from volume、boot from snapshot 等等。一般的我们在测试环境中大多会选择第一种方法,因为属于常规的操作方式。但实际上 boot from image 在生产环境中会存在一些限制,比如说:如果你在 boot from image 的同时选择启用了临时存储(Ephemeral Storage),这些临时的数据会随着 Instance 的生命周期结束而消失。所以一个产品化的 OpenStack 通常会将 boot from volume 作为默认选项,这样的好处在于增量的数据不会随着 Instance 的生命周期结束而消失。这些增量的数据是 Persistent 的,即便 Instance 被删除了 Volume 依旧可以被保存下来。无论是 boot from volume 还是 boot from snapshot 简单来说就是通过一个 bootable volume 启动操作系统。当然了,boot from volume 也存在一些限制:
- 一个 Volume 只能够一个 Instance 使用。不过随着 Rocky 版本 Cinder Multi-Attach 功能的发布,这个问题被缓和了许多。Multi-Attach 支持将同一个 Volume 挂载到多个不同的 VM,支持将一个 Volume 同时挂载在两个 VM 上,多台 VM 共享一个 Volume。当然了,这个功能我们更加建议将其使用到 Data Volume 而非 Bootable Volume 中。
- Boot from Volume 的 Instance 无法使用 Rebuild 功能。
Rebuild Instance
Rebuild Instance,顾名思义被用于重建 Instance。所谓重建,既有重新构建的意义、也具有修复的含义。当一个 Instance 出现故障而无法启动或正常使用的时候或者你希望更改 Instance GuestOS 类型的时候都可以考虑使用这个功能。
Rebuild Instance 的底层逻辑是在保留 Instance Flavor、Network、Configuration、Metadata 等信息不变的情况下,将在 Instance 在 ComputeNode 中的虚拟机实例进程 kill 掉。然后再根据提供的 Image 和原有的 instance 信息重建一台健康的虚拟机实例。可以保证 Instance 元数据(软件及其配置视乎于实际情况可能会丢失)和系统盘数据不变的前提下修复 Instance 或者对 Instance 的系统盘进行变更。
Rebuild for boot from volume
在 N 版本之前「Rebuild from boot from volume」被定义为一个 Bug,因为对 boot from volume 的 instance 无法通过 rebuild 功能将 new image 作为新的 boolable,在最近的版本中甚至将「Rebuild from boot from volume」作为强制禁止执行的动作。实话说,这个决定让人感到遗憾,正如前文所说,boot from volume 基本上是所有生产环境中的选择,无法进行 rebuild 则让 instances 缺失了一种重要的故障修复方式。
我们首先来看看造成这个问题的原因:实际上 Boot from image 的 rebuild 走的依旧是 Boot from image 的流程,拉取 new image 然后启动虚拟机;同样的,Boot from volume 的 rebuild 也依然走的是 boot form volume 流程,所以即便指定了 rebuild 的 new image,但它还是会将 old volume 挂载然后启动虚拟机,也就没能实现 boot from new image 的效果。
解决这个问题的思路:在 nova-compute service 进行 rebuild 的过程中捕获 boot from volume 特征的 instances,然后调用 Cinder 的接口将 new image 注入到 old volume 中,再使用 old volume 作为系统盘启动虚拟机实现 boot from new image 的 rebuild 效果。
这种实现方式基本上可以解决这个问题。
Nova rebuild for boot from volume issue的更多相关文章
- Boot from Volume - 每天5分钟玩转 OpenStack(61)
Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume),那么如何使 volume 成为 bootable 呢? 现在我们打开 instance 的 ...
- 第 6 章 Cinder - 061 - Boot from Volume
Boot from Volume Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume). 打开 instance 的 launch 操作界面. 这 ...
- nova rebuild
nova rebuild¶ usage: nova rebuild [--rebuild-password <rebuild-password>] [--poll] [--minimal] ...
- nova boot from volume代码分析
首先要创建一个bootable volume curl -i http://16.158.166.197:8776/v1/c24c59846a7f44538d958e7548cc74a3/volume ...
- boot from volume
nova boot --flavor 1 --block-device source=image,id=<image_id>,dest=volume,size=5,shutdown=pre ...
- O061、Boot from Volume
参考https://www.cnblogs.com/CloudMan6/p/5679384.html Volume 除了可以用作Instance的数据盘,也可以作为启动盘(Bootable Vol ...
- nova boot添加volume_type参数支持
早前由于添加了全SSD的高性能Ceph集群,区别于现有的HDD集群,在OpenStack端需要能够选择使用两种集群.Cinder配置多Ceph后端的文档早已整理,整理文件夹时发现这篇为nova boo ...
- nova file injection的原理和调试过程
file injection代码 file injection原理来讲是比较简单的,在nova boot命令中,有参数--file,是将文件inject到image中 nova boot --flav ...
- Nova 启动虚拟机流程解析
目录 文章目录 目录 前言 从请求说起 nova-api service 阶段 前言 Nova 启动虚拟机的东西太多,持续更新- 从请求说起 无论是通过 Dashboard 还是 CLI 启动一个虚拟 ...
随机推荐
- Java入门指南-01 基本概要说明
一.Java语言概述 Java是一门面向对象编程语言.编程,即编写程序.程序对于我们来说,应该是有所了解的.只是有可能你们不知道而已.比如,我们电脑上的 QQ.谷歌浏览器等,都叫做应用程序. 二.本系 ...
- eclipse中安装Activiti插件
由于公司网络问题,不能在线安装,下载到本地的插件,安装也是各种问题,后面终于找到能安装的插件包 1.下载eclipse activiti插件包 链接:https://pan.baidu.com/s/1 ...
- 严重: Servlet [SelectController] in web application [/servlet4] threw load() exception
在web.xml路径配置.jar包导入都正确的情况下,那就考虑是环境问题. 1.servers-->clean 将代码从tomcat中清除 2.Project-->clean 将ecli ...
- alembic在tornado项目中的应用
在项目中引用alembic 协助tornado项目生成数据表结构 alembic revision --autogenerate -m "create tables" 第二步执行 ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
- 关于python-selenium-chromedriver提示
问题一:AttributeError: module 'selenium.webdriver' has no attribute 'Chromedriver' 配置selenium环境时,执行代码 f ...
- linux运维、架构之路-K8s通过Service访问Pod
一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...
- centos 修改时区以及修正时间
1.查看系统当前的时区 [app@127-0-0-1 shine]$ timedatectl Local time: Wed 2019-10-23 17:56:17 CST Universal tim ...
- windows下安装geopandas
在linux下没任何问题,直接 pipenv install geopandas, 各种依赖库该编译的编译,该依赖的依赖. win下pyproj4编译不过,而且gdal库什么的也都是问题,建议全部从h ...
- codevs2370 小机房的树 x
2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号 ...