目录

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的更多相关文章

  1. Boot from Volume - 每天5分钟玩转 OpenStack(61)

    Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume),那么如何使 volume 成为 bootable 呢? 现在我们打开 instance 的 ...

  2. 第 6 章 Cinder - 061 - Boot from Volume

    Boot from Volume Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume). 打开 instance 的 launch 操作界面. 这 ...

  3. nova rebuild

    nova rebuild¶ usage: nova rebuild [--rebuild-password <rebuild-password>] [--poll] [--minimal] ...

  4. nova boot from volume代码分析

    首先要创建一个bootable volume curl -i http://16.158.166.197:8776/v1/c24c59846a7f44538d958e7548cc74a3/volume ...

  5. boot from volume

    nova boot --flavor 1 --block-device source=image,id=<image_id>,dest=volume,size=5,shutdown=pre ...

  6. O061、Boot from Volume

    参考https://www.cnblogs.com/CloudMan6/p/5679384.html   Volume 除了可以用作Instance的数据盘,也可以作为启动盘(Bootable Vol ...

  7. nova boot添加volume_type参数支持

    早前由于添加了全SSD的高性能Ceph集群,区别于现有的HDD集群,在OpenStack端需要能够选择使用两种集群.Cinder配置多Ceph后端的文档早已整理,整理文件夹时发现这篇为nova boo ...

  8. nova file injection的原理和调试过程

    file injection代码 file injection原理来讲是比较简单的,在nova boot命令中,有参数--file,是将文件inject到image中 nova boot --flav ...

  9. Nova 启动虚拟机流程解析

    目录 文章目录 目录 前言 从请求说起 nova-api service 阶段 前言 Nova 启动虚拟机的东西太多,持续更新- 从请求说起 无论是通过 Dashboard 还是 CLI 启动一个虚拟 ...

随机推荐

  1. Gh0st与云安全

    黑产攻击途径升级,云服务成重灾区 在我们的印象里,黑产以及相关的肉鸡DDOS攻击总是离我们很远.可实际情况并非如此,特别是在云服务大行其道的今天. 日前,腾讯反病毒实验室就观察到了国内云服务中Gh0s ...

  2. c++ 实时通信系统(c++socket篇)

    在上一篇简单的介绍了TCP/IP协议,在这一篇我们主要介绍socket的具体实现的函数 第一步首先我们套添加上头文件:(#pragma comment(lib, "WS2_32") ...

  3. nginx配置详解---学校资料

    #配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码 user nobody; #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量 wo ...

  4. Flow-based model

    文章1:  NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION 文章2:Real-valued Non-Volume Preserving (Real ...

  5. 使用SpringBoot做Javaweb时,数据交互遇到的问题

    有段时间没做过javaweb了,有点生疏了,js也忘记得差不多,所以今天下午做前后端交互的时候,传到后台的参数总是为空,前端控制台了报一个String parameter “xxx” is not p ...

  6. Mongodb文档查询

    MongoDB 查询数据的语法格式如下: db.collection.find(query, projection) query :可选,使用查询操作符指定查询条件 projection :可选,使用 ...

  7. vue 中 弹幕的播放

    前言 最近在搞弹幕的问题,小程序上的和vue上的,不想使用插件,于是自己摸索了一下,其实包括 2中弹幕形式 有序和无序的 直接上代码吧 <!-- 弹幕 --> <template v ...

  8. 手机端自适应缩放显示 js

    <script> var _width = parseInt(window.screen.width); var scale = _width/640; var ua = navigato ...

  9. buuctf@warmup_csaw_2016

    from pwn import * io=remote('node3.buuoj.cn',27774) io.recvuntil('WOW:') addr=(io.recvuntil('\n')[:- ...

  10. ES使用中的总结整理

    最近项目中使用了ES搜索,开始时自己搭建了ES环境做测试,后面申请了公司的云平台应用, 对接ES的过程中颇具波折,遇到了很多问题,在这里统一整理记录下: 1,ES的9200 及 9300端口说明 92 ...