目录

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. 第十篇.1、python并发编程之多进程理论部分

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...

  2. python-1.Centos7安装Python3.6和Scrapy的方法

    由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到 [root@iZm5efjrz9szlsq1a0ai3gZ ~]# python ...

  3. zencart搜索结果页面静态化 advanced_search_result

    首先,确认网站是否安装了ultimate_seo_urls 伪静态模块. 修改include/classes/seo.url.php 大约126行添加代码 'keyword' => 'sale' ...

  4. pikachu-file

    1.不安全的文件下载 1.1.概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下 ...

  5. Memcached安装部署

    Memcached安装部署 发表回复 简述: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供 ...

  6. 【Python数据分析】用户通话行为分析

    主要工作: 1.对从网上营业厅拿到的用户数据.xls文件,通过Python的xlrd进行解析,计算用户的主叫被叫次数,通话时间,通话时段. 2.使用matplotlib画图包,将分析的结果直观的绘制出 ...

  7. 快速排序c代码

    //快速排序,通过测试 #include "stdio.h" void quickSort(int* data,int len){ ) return; ; ; ]; while(s ...

  8. django第一个页面

    在工程创建完毕的基础上,创建两个目录,static;templates static 里面放一些静态文件,例如css,imj,js等文件 templates 放html文件,需要在settings.p ...

  9. python起步--windows系统下安装python解释器和PyCharm

    参考教程: 1)https://www.runoob.com/w3cnote/pycharm-windows-install.html 2)https://blog.csdn.net/c_shell_ ...

  10. 在Controller中使用AOP

    转:http://usherlight.iteye.com/blog/1306111 在Controller中使用AOP的问题主要在于如何让Controller能够被检测到. Controller和其 ...