8.19学习笔记(无自我观点)
找到imga位置,先查看/etc/glance/glance.api,查看存储位置
https://www.cnblogs.com/sammyliu/p/4568188.html nova使用libvirt.xml创建过程
1.Soft reboot 完全依赖于虚机的操作系统和 ACPI 支持
Shutdown domain (domain.shutdown)
Launch domain (domain.createWithFlags)
2.Hard reboot
Destroy domain (virt_dom.destroy())。
Destroy 和 Shutdown 两个 API 的区别是:
shutdown domain 以后,客户机的磁盘存储处于可用状态,而且该 API 在命令发给 Guest OS 后立即返回,客户程序需要不断检查其状态来判断是否shutdown 成功;
而 destroy API 执行后,客户机的所有资源都会被归还给 Hypervisor,它的过程是首先给客户机发送一个terminate 指令比如SIGTERM,如果在一定的时间内未成功则直接发送 SIGKILL 指令将虚机杀掉。
根据 domain 的信息(instance, network_info, disk_info,image_meta, block_device_info)重新生成 domain 的配置 xml
根据 image 重新生成各镜像文件(包括 disk,disk.local 和 disk.swap)
连接各个 volume
将各个 interface 挂到 OVS 上
重新生成和应用 iptales 规则
Define domain (conn.defineXML)
Launch domain (domain.createWithFlags)
3.nova rescue 命令后的主要过程是:
(1)保存目前domain 的 xml 配置到 unrescue.xml 文件
(2)根据 image 重新生成启动盘 disk.swap (大小不受 falvor.root_disk_size 控制,尽可能小的一个文件)
(3)构造一个新的 domain 的 xml 配置,使用 disk.rescue 做启动盘,将原来的 disk 挂载到该 domain,其他的盘和volume不会被挂载。
(4)将原来的 domain destroy 掉 (virt_dom.destroy)
(5)定义新的 domain (conn.defineXML(xml))
(6)启动新的 domain (domain.createWithFlags)
4.Shelve (搁置)
destroy 虚机 (virt_dom.destroy())
snapshot 该 domain
如果 CONF.shelved_offload_time == 0 的话,将domain 的各种资源(interface,volume,实例文件等),然后将其undefine (virt_dom.undefine())
vm_state状态 书《云计算与OpenStack.pdf》
error
building active stop
shutoff
rebuilding
deleted
openstack server create
--flavor 42
--image 66baed9d-1c7d-457c-a422-5117da1caa0d
--nic net-id=1269e08e-fc00-4004-b536-adc906facc22
--security-group 0b30e075-50bb-4d57-b7ba-ae2202c5f89e
provider-instance
外部接口,将表单转化成内部参数接口
POST v2/{tenant-id}/servers
nova /api/computer/servers.py
def create(req http报文内容 body REST参数) 密码随机生成
name | 虚拟机名称 |
imageref | 镜像编号 |
key_name | 密钥 |
flavorRef | 规格 |
securtiy_groups | 防火墙安全组 |
特别是instance_type,完整的配额参数字典用于后面筛选合适的计算节点
内部接口 检查参数合法性,创建虚拟机的数据模型,并发送消息
(1)quota 检查配额,用户买的剩余可用资源是否超出限额 vcpu 内存磁盘和网络 写入数据库
(2)根据镜像id提取镜像基本信息,与配额进行对比 glance的要求(centos是否创建64mb的内存)写入数据库
(3)安全组防火墙,不存在设置为default
nova/computer/api.py
create函数
- 检查是否创建多个实例,是否制定IP。检查是否从端口ID创建多个实例
- 检查域是否可用
- 创建过滤器
然后将创建请求发送到本类中的_create_instance()函数中
- 规格化和设置一些参数,如安全组,最小数值,最大数值,块设备。
- 访问glance服务,获取image-id
- 检查网络是否超过配额
- 循环更新每一个主机的状态
/api/computer/servers.py create 607===》
computer/api compute_api create _create_instance===》
conductor/api compute_task_api schedule_and_build_instances ===》
conductor/rpcapi conductor_compute_rpcapi schedule_and_build_instances
消息队列 schedule_and_build_instances /nova/conductor/manager.py ==>