一. shut off instance
shut off 的流程为
1. 向nova-api 发送请求
2. nova-api 发送消息
3. nova-compute执行操作
第一步:向nova-api发送请求
- 从openstack界面关闭一个实例,查看nova-api的log文件,可以看到:
instance后面有实例ID。
第二步:nova-api 发送消息
- nova-api 向 Messaging(RabbitMQ)发送了一条消息:“关闭这个 Instance” nova-api 没有将发送消息的操作记录到日志中,不过我们可以通过查看源代码来验证。 一提到源代码,大家可能以为要大海捞针了。其实很简单,上面日志已经清楚地告诉我们需要查看的源代码在 /opt/stack/nova/nova/compute/api.py 中,方法是 force_stop。
- force_stop 方法最后调用的是对象 self.compute_rpcapi 的 stop_instance 方法。 在 OpenStack 源码中,以 xxx_rpcapi 命名的对象,表示的就是 xxx 的消息队列。 xxx_rpcapi.yyy() 方法则表示向 xxx 的消息队列发送 yyy 操作的消息。
第三步:nova-compute执行操作
- 根据操作日志中的req-ID来查看n-cpu的log,可以看到nova-compute关闭instance的日志条目。
二、开启一个instance
start instance的流程
- 向nova-api发送请求
- nova-api 发送消息
- nova-compute 执行操作
第一步:向nova-api发送请求
- 从openstack界面进行启动实例的按钮点击,可以根据req-ID进行日志查看。
第二步:nova-api 发送消息
- nova-api向message发送了一条消息:“启动这个 Instance”
- self.compute_rpcapi.start_instance() 的作用就是向 RabbitMQ 上 nova-compute 的消息队列里发送一条 start instance 的消息。
第三步:nova-compute执行操作
- 根据req-ID查看n-cpu的log文件
- 首先开始启动
- 然后准备虚拟网卡
- 准备instance的XML文件
- 准备instance镜像文件
- 成功启动
三、Soft/Hard Reboot
区别:
- soft reboot 只是重启操作系统,整个过程中,instance 依然处于运行状态。相当于在 linux 中执行 reboot 命令。
- hard reboot 是重启 instance,相当于关机之后再开机
提示:
- soft/hard reboot 在 nova-api 的日志里找不到,这是因为 /opt/stack/nova/nova/compute/api.py 的 reboot 方法中没有输出 log。
可以通过关键字 “nova.api.openstack.wsgi” 或者 “reboot” 搜索。 - 在 nova-compute 的日志中可以看到 “soft reboot” 和 “hard reboot” 二者有明显的区别。
四、Lock /Unlock
- 为了避免误操作,比如意外重启或删除 instance,可以将 instance 加锁。
- 对被加锁(Lock)的 instance 执行重启等改变状态的操作会提示操作不允许。
- 执行解锁(Unlock)操作后恢复正常。
查看日志:
五、terminate (删除instance)
删除instance的流程
- 向 nova-api 发送请求
- nova-api 发送消息
- nova-compute 执行操作
(1)关闭instance
(2) 删除instance的镜像文件
(3) 释放虚拟网络等其他资源
六、Pause/Resume(暂停instance/恢复)
暂停instance流程
-
向 nova-api 发送请求
-
nova-api 发送消息
-
nova-compute 执行操作
-
有时需要短时间暂停 instance,可以通过 Pause 操作将 instance 的状态保存到宿主机的内存中。当需要恢复的时候,执行 Resume 操作,从内存中读回 instance 的状态,然后继续运行 instance。
七、 Suspend/Resume
- 有时需要长时间暂停 instance,可