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 启动一个虚拟 ...
随机推荐
- c++ easyX的学习
画象棋盘来浅显学习了解easyx 了解象棋盘的构成: 如图就为一个基本的象棋棋盘我们下面就用esayx来画出这个棋盘,我的感觉这个棋盘大概分为两个部分:第一部分就是棋盘的大致布局,第二个就是棋盘的细节 ...
- Systemctl和service、chkconfig命令的关系
systemctl命令:是一个systemd工具,主要负责控制systemd系统和服务管理器. service命令:可以启动.停止.重新启动和关闭系统服务,还可以显示所有系统服务的当前状态. ch ...
- 浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- 读《JavaScript面向对象编程指南》(二)
第五章 原型 在JavaScript中,所有函数都会拥有一个 prototype 的属性,默认初始值为空对象. 可以在相关的原型对象中添加新的方法和属性,甚至可以用自定义对象来完全替换掉原有的原型对象 ...
- 心态炸了,我再写一个4.1.0版本的SND实例
maven依赖 <!-- Tests --><dependency> <groupId>org.springframework</groupId> &l ...
- GlusterFS ——分布式卷
GlusterFS概述 全部部署GlusterFS文件系统地址:https://www.cnblogs.com/Mercury-linux/p/12050389.html GlusterFS系统是一个 ...
- 将TextEdit设置为密码框
属性--Properties--UseSystemPasswordChar设置为true
- mysql数据库之表操作及字段约束条件
目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...
- 记Springcloud Config Service整合gitlab一坑
spring.cloud.config.server.git.uri=http://ip/***/configserver.git必须加上.git
- 数组遍历 forEach 方法
数组的遍历 遍历数组,将数组中的所有元素都取出来. 使用for 循环执行数组的索引(length-1)相同的次数. var arr=["1", "5", &qu ...