workflow:
1.
用户向nova-api发送请求
用户发送请求到nova-api,这里有两种:
a.通过openstack api
从 server.py's controller.create():
self.helper.create_instance(req, body, self.compute_api.create)
create_instance_helper.CreateInstanceHelper() 查表获取基本信息
b.通过ec2 api
从cloud.py.run_instances()
统一调 computer.api.create() 将新的数据插回去
self._ask_scheduler_to_create_instance(context, base_options,
instance_type, zone_blob,
availability_zone, injected_files,
admin_password, image,
instance_id=instance_id,
requested_networks=requested_networks)
2.
API 将处理好的数据通过MQ 转发给scheduler .(code from Computer.api)
rpc.cast(context,
FLAGS.scheduler_topic,
{"method": "run_instance",
"args": {"topic": FLAGS.compute_topic,
"instance_id": instance_id,
"request_spec": request_spec,
"availability_zone": availability_zone,
"admin_password": admin_password,
"injected_files": injected_files,
"requested_networks": requested_networks}})
3.
Scheduler 获取信息并作出决定 哪一个host 可以来run instance.
def __getattr__(self, key):
return functools.partial(self._schedule, key)
def _schedule(self, method, context, topic, *args, **kwargs):
.......
rpc.cast(context,
db.queue_get_for(context, topic, host),
{"method": method,
"args": kwargs})
LOG.debug(_("Casted to %(topic)s %(host)s for %(method)s") % locals())
4.
Computer 从池中获取信息 并让 Networker 去准备一个ip ,让volume 准备卷, 然后初始化相应的信息,例如创建image,映射device,创建domain,
并将domain 放入running pool中 然后就进入等待直到instance的状态变为running.
a. networker 分配ip
network_info = self.network_api.allocate_for_instance(context,
instance, vpn=is_vpn,
requested_networks=requested_networks)
def allocate_floating_ip(self, context):
return rpc.call(context,
FLAGS.network_topic,
{'method': 'allocate_floating_ip',
'args': {'project_id': context.project_id}})
b 让 volume 准备卷
bd_mapping = self._setup_block_device_mapping(context, instance_id)
def create(self, context, size, snapshot_id, name, description,
volume_type=None, metadata=None, availability_zone=None):
rpc.cast(context,
FLAGS.scheduler_topic,
{"method": "create_volume",
"args": {"topic": FLAGS.volume_topic,
"volume_id": volume['id'],
"snapshot_id": snapshot_id}})
c call nova.virt.libvirt.firewall.IptablesFirewallDriver 建立网络规则
这里是重头戏,单独开个贴记录下....
d call libvirt 创建domian 并launch
domain = self._create_new_domain(xml)
def _create_new_domain(self, xml, persistent=True, launch_flags=0):
if persistent:
# To create a persistent domain, first define it, then launch it.
domain = self._conn.defineXML(xml)
domain.createWithFlags(launch_flags)
else:
# createXML call creates a transient domain
domain = self._conn.createXML(xml, launch_flags)
return domain
e call virt.libvirt.connetion.spwan 等待
def spawn(self, context, instance, network_info,
block_device_info=None):
..........
def _wait_for_boot():
instance_name = instance['name']
try:
state = self.get_info(instance_name)['state']
except exception.NotFound:
msg = _("During reboot, %s disappeared.") % instance_name
LOG.error(msg)
raise utils.LoopingCallDone
if state == power_state.RUNNING:
msg = _("Instance %s spawned successfully.") % instance_name
LOG.info(msg)
raise utils.LoopingCallDone
timer = utils.LoopingCall(_wait_for_boot)
return timer.start(interval=0.5, now=True)
5
一旦instance的状态改变至running,他就会去通过networker获取网络信息, 这里有几种方式,取决于你的networkManager
详细请见上一步c
- 大小: 68.6 KB
分享到:
相关推荐
当我们谈论“nova创建instance的过程”时,我们实际上是在讨论OpenStack如何根据用户请求在云环境中启动一个新的虚拟机。以下是对这个过程的详细解释: 首先,启动`openstack-nova-api`服务是整个流程的起点。这个...
OpenStack 私有云平台架构组件详解 OpenStack 是一个开源的云计算平台,主要使用池化虚拟资源来构建和管理...通过了解 OpenStack 的架构和组件,以及创建实例的流程,我们可以更好地理解和使用 OpenStack 云计算平台。
- **快照支持**:Glance支持对正在运行的Instance执行快照,从而创建新的Image,这对于备份和恢复操作尤为重要。 ##### 1.3 Glance架构分析 - **Glance的组件**: - **glance-api**:作为服务前端,提供RESTful ...
1. **Instance**:Nova中的实例表示虚拟机,相关操作如创建、删除、暂停、恢复等都围绕实例对象进行。 2. **ComputeManager**:在`nova.compute.manager`中,是Nova-compute服务的核心,负责处理实例的生命周期管理...
### OpenStack多节点搭建知识点详解 #### 一、搭建环境 - **系统版本**: CentOS 7 - **硬件要求**: - 控制节点 (Controller): 4GB 内存, 1核CPU...这些步骤能够帮助初学者快速掌握 OpenStack 的部署流程和技术要点。
课时21、实例:Instance启动过程回顾 课时22、网络基础知识盘点 课时23、Neutron原理详解 课时24、实例:Neutron手动安装 课时25、实例:网络命名空间 课时26、实例:物理机连接openvswitch的虚 课时27、实例:租户...
课时21、实例:Instance启动过程回顾 课时22、网络基础知识盘点 课时23、Neutron原理详解 课时24、实例:Neutron手动安装 课时25、实例:网络命名空间 课时26、实例:物理机连接openvswitch的虚 课时27、实例:租户...
在这个步骤中,客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求,请求删除一个已经创建的 Instance。这个请求可以通过 API 调用或命令行工具实现。在日志 /opt/stack/logs/n-api....
- 使用`openstack server show <instance_id>`查看特定虚拟机实例的详细信息。 - 使用`openstack server start/stop <instance_id>`启动或停止虚拟机实例。 - 使用`openstack server delete <instance_id>`删除...
然后,nova-compute会对实例进行快照(snapshot),这实际上是创建了一个Instance当前状态的镜像。这个快照会存储在Glance中,通常以`<instance name>-shelved`的格式命名,以便于识别。快照操作确保了实例的状态...
这个流程图揭示了OpenStack中启动Instance的基本逻辑,每个步骤都是不可或缺的。在后续的章节中,我们可能会继续探讨其他与Nova相关的操作,例如停止、重启或迁移Instance,以及它们背后的实现机制。理解这些流程...
在OpenStack环境中,nova-compute是核心组件之一,它...理解这一流程对于管理和优化OpenStack环境至关重要,因为它涉及到资源分配、调度策略以及实例的高效运行。后续章节可能会更深入地探讨其他实例操作的实现细节。
总之,为instance配置静态IP在OpenStack中是可能的,但需要通过创建port并附加到instance,然后在instance内部进行配置。无论是通过命令行还是Horizon,都需要遵循这个流程。希望未来版本的Horizon能提供更全面的...
在OpenStack云环境中,Nova是核心...通过以上详细分析,我们可以看到Snapshot操作是如何在OpenStack环境中实现Instance的备份,以及其背后涉及的组件和流程。理解这些知识点对于管理和维护OpenStack云环境至关重要。
这一过程涉及 OpenStack 的多个组件和交互步骤,下面我们将详细解析整个流程: 1. **向 nova-api 发送请求**: 当客户(可能是 OpenStack 用户或程序)希望迁移实例时,他们向 nova-api(API 接口服务)发送请求。...
在OpenStack环境中,网络配置是实现虚拟机实例(instance)...在后续的内容中,我们将进一步探讨instance是如何通过Neutron的DHCP服务获取IP地址的,这包括DHCP流程的细节,以及OpenStack中网络配置和服务的工作原理。
4. Scheduler向RabbitMQ发送消息,指示计算节点A的Compute服务(nova-compute)创建Instance。 5. nova-compute从消息队列中接收指令,利用本地Hypervisor驱动创建Instance。 6. 如果在创建过程中需要与数据库交互,...
在了解了`Rebuild Instance`的详细流程后,我们可以看到OpenStack如何通过其组件间的协作实现高效的实例恢复。在下一节中,我们将探讨另一个重要功能——`Shelve`操作,它提供了另一种管理实例的方式,尤其是在资源...
首先,创建flat network的流程如下: 1. 登录到OpenStack管理界面,进入Admin -> Networks。 2. 点击“Create Network”按钮,打开创建网络的界面。 3. 在Provider Network Type下拉菜单中选择“Flat”。这表明我们...
在OpenStack云环境中,Instance Snapshot是用于备份或创建新Image的重要操作。它涉及到数据一致性、服务中断时间以及安全性。本文主要探讨如何在保证数据安全的同时,尽可能地提高Snapshot的速度,以适应生产环境的...