Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)

原创 2016年06月01日 06:34:16

Resize 的作用是调整 instance 的 vCPU、内存和磁盘资源。
Instance 需要多少资源是定义在 flavor 中的,resize 操作是通过为 instance 选择新的 flavor 来调整资源的分配。

有了前面对 Migrate 的分析,再来看 Resize 的实现就非常简单了。
因为 instance 需要分配的资源发生了变化,在 resize 之前需要借助 nova-scheduler 重新为 instance 选择一个合适的计算节点,如果选择的节点与当前节点不是同一个,那么就需要做 Migrate。

所以本质上讲:Resize 是在 Migrate 的同时应用新的 flavor。
Migrate 可以看做是 resize 的一个特例: flavor 没发生变化的 resize,这也是为什么我们在上一节日志中看到 migrate 实际上是在执行 resize 操作。

下面是 Resize instance 的流程图

  1. 向 nova-api 发送请求
  2. nova-api 发送消息
  3. nova-scheduler 执行调度
  4. nova-scheduler 发送消息
  5. nova-compute 执行操作

Resize 分两种情况:

  1. nova-scheduler 选择的目标节点与源节点是不同节点。操作过程跟上一节 Migrate 几乎完全一样,只是在目标节点启动 instance 的时候按新的 flavor 分配资源。
    同时,因为要跨节点复制文件,也必须要保证 nova-compute 进程的启动用户(通常是 nova,也可能是 root,可以通过 ps 命令确认)能够在计算节点之间无密码访问。
    对这一种情况我们不再赘述,请参看前面 Migrate 小节。

  2. 目标节点与源节点是同一个节点。则不需要 migrate。下面我们重点讨论这一种情况。

向 nova-api 发送请求

客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我 Resize 这个 Instance”

选择新的 flavor

点击 Resize 按钮

查看日志 /opt/stack/logs/n-api.log

nova-api 发送消息

nova-api 向 Messaging(RabbitMQ)发送了一条消息:“Resize 这个 Instance”
查看源代码 /opt/stack/nova/nova/compute/api.py,方法是 resize_instance。

nova-scheduler 执行调度

nova-scheduler 收到消息后,会为 instance 选择合适的目标计算节点。
查看日志 /opt/stack/logs/n-sch.log

在本例中,nova-scheduler 选择了 devstack-compute1 作为的目节点,与源节点相同。

nova-scheduler 发送消息

nova-scheduler 发送消息,通知计算节点可以迁移 instance 了
源代码在 /opt/stack/nova/nova/scheduler/filter_scheduler.py 第 95 行,方法为 select_destinations

nova-compute 执行操作

在目标节点上启动 instance,过程与 launch instance 非常类似。
日志记录在 /opt/stack/logs/n-cpu.log

会经过如下几个步骤:

  1. 按新的 flavor 为 instance 准备 CPU、内存和磁盘资源。

  2. 关闭 instance。

  3. 创建 instance 镜像文件。

  4. 将 instance 的目录备份一份,命名为 _resize,以便 revert。

  5. 创建 instance 的 XML 定义文件。

  6. 准备虚拟网络。

  7. 启动 instance。

Confirm

这时,instance 的状态处于“Confirm or Revert Resize/Migrate”状态,需要用户确认或者回退当前的迁移操作,实际上给了用户一个反悔的机会。

当我们按下 Confirm 按钮后,会发生如下事情:

  1. nova-api 接收到 confirm 的消息。

  2. 删除计算节上备份的 instance 目录 instance_id_resize。

Revert

反过来,如果执行 Revert 操作会发生什么事情呢?

  1. nova-api 接收到 revert 的消息。

  2. 在计算节点上关闭 instance。

  3. 通过备份目录 instance_id_resize 恢复 instance 目录。

  4. 重新启动 instance。

以上是 Resize 操作的详细分析,下一节我们讨论 Live Migrate。

Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)

上一节我们成功地通过 attach 操作为 instance 添加了 volume,而与之相对的操作是 detach,就是将 volume 从 instance 上卸载下来。...

配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89)

前面章节我们看到 instance 在启动过程中能够从 Neutron 的 DHCP 服务获得 IP,本节将详细讨论其内部实现机制。...

Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)

Resize 的作用是调整 instance 的 vCPU、内存和磁盘资源。 Instance 需要多少资源是定义在 flavor 中的,resize 操作是通过为 instance 选择新的 ...

Unshelve Instance 操作详解 - 每天5分钟玩转 OpenStack(39)

上一节我们 shelve instance 到 Glance,本节讨论如何通过 unshelve 操作恢复该 instance。 因为 Glance 中保存了 instance 的 image,...

Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)

本节通过日志文件详细分析 instance start 操作。 下面是 start instance 的流程图 向 nova-api 发送请求 nova-api ...

Snapshot Instance 操作详解 - 每天5分钟玩转 OpenStack(36)

本节我们通过日志详细讨论 instance 的 snapshot 操作。

Snapshot Instance 操作详解 - 每天5分钟玩转 OpenStack(36)

本节我们通过日志详细讨论 instance 的 snapshot 操作。 有时候操作系统损坏得很严重,通过 Rescue 操作无法修复,那么我们就得考虑通过备份恢复了。当然前提是我们之前对i...

Unshelve Instance 操作详解 - 每天5分钟玩转 OpenStack(39)

上一节我们 shelve instance 到 Glance,本节讨论如何通过 unshelve 操作恢复该 instance。...

Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)

本节通过日志文件详细分析 instance start 操作。

Shelve Instance 操作详解 - 每天5分钟玩转 OpenStack(38)

Instance 被 Suspend 后虽然处于 Shut Down 状态,但 Hypervisor 依然在宿主机上为其预留了资源,以便在以后能够成功 Resume。 如果希望释放这些预留资源,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)
举报原因:
原因补充:

(最多只允许输入30个字)