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 启动一个虚拟 ...
随机推荐
- init container
init container与应用容器在本质上是一样的, 但它们是仅运行一次就结束的任务, 并且必须在成功执行完成后, 系统才能继续执行下一个容器, 可以用在例如应用容器启动前做一些初始化工作,当in ...
- Python测开面试题之装饰器
Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法. Python ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(14)|Impls & Traits实现与特征]
[易学易懂系列|rustlang语言|零基础|快速入门|(14)] 有意思的基础知识 Impls & Traits实现与特征 我之前说到的struct结构体,其实就类似于面向对象语言中的类cl ...
- 第二章 Vue快速入门-- 28 自定义按键修饰符
事件处理-按键修饰符 js 里面的键盘事件对应的键码 <!DOCTYPE html> <html lang="en"> <head> <m ...
- 关于maven的repositories
在maven repositories视图中,有local repositories和global repositories两种. local repositories是本地的库,默认目录在C:\Us ...
- nmap脚本(nse)使用总结
nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描: auth: 负责处理鉴权证书(绕开鉴权)的脚本 broadcast: 在局域网内探查更多服务 ...
- windows脚本复制文件(将u盘文件复制到固定路径)
@echo off for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "VolumeName='Hel ...
- shell练习--PAT试题1010:一元多项式求导 (25 分)(失败案例喜加一)
---恢复内容开始--- 1010 一元多项式求导 (25 分) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系 ...
- zrender-粒子动画
效果: let x = shuN.style.x + rectValue/4,//粒子开始的地方 y = zuY+140 + 5, h = 14*0.8, w = rectValue/2; this. ...
- yum 安装 mongodb
1 .添加阿里源 vi /etc/yum.repos.d/mongodb.repo [mongodb-org] name=MongoDB Repository baseurl=http://mirro ...