openstack创建instance的流程解析

本文详细解析了OpenStack创建instance的流程,从API请求开始,经由Scheduler选择host,到Compute节点启动instance,网络控制器分配IP和配置网络,直至instance成功运行。涉及调度、计算、网络管理和实例启动等关键步骤。
摘要由CSDN通过智能技术生成

综述

启动一个新的instance涉及到很多openstack nova里面的组件
  • API server:处理客户端的请求,并且转发到cloud control
  • Cloud control:处理compute节点,网络控制节点,API server和scheduler中间连接
  • Scheduler:选择一个host去执行命令
  • compute worker:启动和停止实例,附加和删除卷 等操作
  • network controller:管理网络资源,分配固定IP,配置vlans


  1.API server将消息发送到Cloud Controller
  2. Authertication 保用户有权限,然后Cloud Controller将消息发送给Scheduler
  3. Scheduler caste 一个消息给一个选择好的host要求他启动一个实例
  4.compute worker(选择的那个host)获取到消息
  5.6.7.8 compute worker需要一个固定的ip去启动一个实例,所以向network controller发送消息

下面我将详细说明一下:

API

1.可以在dashboard网页上面进行
2.可以用命令行 euca-add-keypair        euca-run-instances

  用户的请求发送到nova-api,有两种方式
  第一种:通过openstack api (nova/api/servers.py 类 class Controller(object))create方法
    def create(self, req, body):
        """ Creates a new server for a given user """
        if 'server' in body:
            body['server']['key_name'] = self._get_key_name(req, body)

        extra_values = None
        extra_values, instances = self.helper.create_instance(
                req, body, self.compute_api.create)

  第二种:通过ec2 api (nova/api/cloud.py 中类 CloudController )
  调用def run_instances(self, context, **kwargs):
        ...
        (instances, resv_id) = self.compute_api.create(context,
            instance_type=instance_types.get_instance_type_by_name(
                kwargs.get('instance_type', None)),
        ...

最终调用的Compute API create():
  • 查看这种类型的instance是否达到最大值
  • 如果不存在安全组,就创建个
  • 生成MAC地址和hostnames
  • 给scheduler发送一个消息去运行这个实例

CAST

当然maxCount为1(默认值为1)的时候 调用RPC.cast方法向scheduler发送运行实例的消息


在openstack中通过RPC.cast来发送消息,消息的分发通过RabbitMQ。消息发送方(Compute API)往
topic exchange(scheduler topic)发送一个消息,消息消费者(Scheduler worker)从队列中获得消息,
cast调用不需要返回值。
[python] view plain
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值