精华内容
下载资源
问答
  • mitaka-openstack虚拟化云桌面的实现 1. VDI阐述 2.VDI实现方式 3.部署SPIVCE
  • MitakaOpenstack虚拟机启动流程

    千次阅读 2016-10-13 10:02:09
    但是在看源码包括实践的过程发现了一件很神奇的时候,网上的教程大多是IceHose版本的,其启动虚拟机走的是正常的workflow中的handle函数,但是也不知道是我们装的Mitaka版本OpenStack有问题还是怎么样

    最近工作的主要内容是在dashboard中启动虚拟机的时候加一个cache静态划分的功能,是在隔离区还是在共享区,这就需要对整个虚拟机的启动流程代码非常熟悉,并且还要适当的改前端。但是在看源码包括实践的过程发现了一件很神奇的时候,网上的教程大多是IceHose版本的,其启动虚拟机走的是正常的workflow中的handle函数,但是也不知道是我们装的Mitaka版本OpenStack有问题还是怎么样,起虚拟机偏偏不走那里,第一天遇到这个问题的时候我就给hcch师兄说我见鬼了。。 但好在,用了三天时间调出来了,同时也记录一下Mitaka版本的虚拟机启动的流程。

    在查资料的时候找到了这么一个图,侵删。。

    这里写图片描述


    1. Dashboard中


    1. /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py

    是关于创建虚拟机的workflow,但是不走LaunchInstance中的handle进行处理

    class LaunchInstance(workflows.Workflow):
        slug = "launch_instance"
        name = _("Launch Instance")
        finalize_button_name = _("Launch")
        success_message = _('Launched %(count)s named "%(name)s".')
        failure_message = _('Unable to launch %(count)s named "%(name)s".')
        success_url = "horizon:project:instances:index"
        multipart = True
        default_steps = (SelectProjectUser,    
                         SetInstanceDetails,
                         SetAccessControls,
                         SetNetwork,
                         SetNetworkPorts,
                         PostCreationStep,
                         SetAdvanced)

    这里面定义了7个Steps,每个Steps中都有对应的表单显示。其中每个标签卡显示的具体内容和相应的html和js相对应。

    具体的js和html的文件放在以下目录

    /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance


    2. /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js

    当在dashboard中把创建虚拟机的表单填写好后,所有的数据都通过这个js文件中的 createInstance() 函数进行请求的进一步发送

    function createInstance() {
          var finalSpec = angular.copy(model.newInstanceSpec);
    
          cleanNullProperties(finalSpec);
    
          setFinalSpecBootsource(finalSpec);
          setFinalSpecFlavor(finalSpec);
          setFinalSpecNetworks(finalSpec);
          setFinalSpecPorts(finalSpec);
          setFinalSpecKeyPairs(finalSpec);
          setFinalSpecSecurityGroups(finalSpec);
          setFinalSpecMetadata(finalSpec);
    
          return novaAPI.createServer(finalSpec).then(successMessage);     
        }


    3. /usr/share/openstack-dashboard/openstack_dashboard/static/app/core/openstack-service-api/nova.service.js

    第二步中的请求发送到这个js文件中的 createServer(newServer) 函数中,其中newServer参数中放了创建虚拟机的参数

        function createServer(newServer) {
          return apiService.post('/api/nova/servers/', newServer)    # 向api/rest/nova.py 发请求
            .error(function () {
              toastService.add('error', gettext('Unable to create the server.'));
            });
        }


    4. /usr/share/openstack-dashboard/openstack_dashboard/api/rest/nova.py

    请求发送到了 Servers 类下的 Post 函数中,其中所有的参数在request中

    @rest_utils.ajax(data_required=True)
        def post(self, request):
            try:
                args = (
                    request,
                    request.DATA['name'],
                    request.DATA['source_id'],
                    request.DATA['flavor_id'],
                    request.DATA['key_name'],
                    request.DATA['user_data'],
                    request.DATA['security_groups'],
                )
            except KeyError as e:
                raise rest_utils.AjaxError(400, 'missing required parameter '
                                                "'%s'" % e.args[0])
            kw = {}
            for name in self._optional_create:
                if name in request.DATA:
                    kw[name] = request.DATA[name]
    
            new = api.nova.server_create(*args, **kw)
            return rest_utils.CreatedResponse(
                '/api/nova/servers/%s' % utils_http.urlquote(new.id),
                new.to_dict()
            )


    5. /usr/share/openstack-dashboard/openstack_dashboard/api/nova.py

    通过 server_create 函数调用novaclient

    def server_create(request, name, image, flavor, key_name, user_data,
                      security_groups, block_device_mapping=None,
                      block_device_mapping_v2=None, nics=None,
                      availability_zone=None, instance_count=1, admin_pass=None,
                      disk_config=None, config_drive=None, meta=None):
        return Server(novaclient(request).servers.create(
            name, image, flavor, userdata=user_data,
            security_groups=security_groups,
            key_name=key_name, block_device_mapping=block_device_mapping,
            block_device_mapping_v2=block_device_mapping_v2,
            nics=nics, availability_zone=availability_zone,
            min_count=instance_count, admin_pass=admin_pass,
            disk_config=disk_config, config_drive=config_drive,
            meta=meta), request)


    2. novaclient中


    1. /usr/lib/python2.7/site-packages/novaclient/v2/servers.py

    ServerManager下的create函数接受来自dashboard的请求

    def create(self, name, image, flavor, meta=None, files=None,
                   reservation_id=None, min_count=None,
                   max_count=None, security_groups=None, userdata=None,
                   key_name=None, availability_zone=None,
                   block_device_mapping=None, block_device_mapping_v2=None,
                   nics=None, scheduler_hints=None,
                   config_drive=None, disk_config=None, admin_pass=None,
                   access_ip_v4=None, access_ip_v6=None, **kwargs):
    
            # 中间省略掉。。
    
            return self._boot(resource_url, response_key, *boot_args,
                              **boot_kwargs)

    接下来在这个文件中调用 _boot 函数

        def _boot(self, resource_url, response_key, name, image, flavor,
                  meta=None, files=None, userdata=None,
                  reservation_id=None, return_raw=False, min_count=None,
                  max_count=None, security_groups=None, key_name=None,
                  availability_zone=None, block_device_mapping=None,
                  block_device_mapping_v2=None, nics=None, scheduler_hints=None,
                  config_drive=None, admin_pass=None, disk_config=None,
                  access_ip_v4=None, access_ip_v6=None, description=None,
                  **kwargs):
            """
            Create (boot) a new server.
            """
    
            # 中间是各种参数初始化,略过。。
    
            return self._create(resource_url, body, response_key,
                                return_raw=return_raw, **kwargs)


    2. /usr/lib/python2.7/site-packages/novaclient/base.py

    从这以下到novaclient结束,都不会设计代码的修改,因此只写到这里,具体调用的文件会列出来,但不再贴代码了

        def _create(self, url, body, response_key, return_raw=False, **kwargs):
            self.run_hooks('modify_body_for_create', body, **kwargs)
            resp, body = self.api.client.post(url, body=body)     
            # 在这里继续往下走,调用下一步的函数
    
            if return_raw:
                return self.convert_into_with_meta(body[response_key], resp)


    3. /usr/lib/python2.7/site-packages/novaclient/client.py

    好吧,本来是不想继续往下写关于novaclient的了,但是在nova那边发现我从novaclient传到nova的参数居然丢了!丢了! 肯定就是在下面我没接触到的步骤丢了,只能继续往下看代码了。

    顺序是这样的 HTTPClient.post -> HTTPClient._cs_request -> HTTPClient._time_request -> HTTPClient.request

        def post(self, url, **kwargs):
            return self._cs_request(url, 'POST', **kwargs)
        def _cs_request(self, url, method, **kwargs):
            # 前面的省略
            try:
                kwargs.setdefault('headers', {})['X-Auth-Token'] = self.auth_token
                if self.projectid:
                    kwargs['headers']['X-Auth-Project-Id'] = self.projectid
    
                resp, body = self._time_request(url, method, **kwargs)   # 在这里继续发请求
                return resp, body
            except exceptions.Unauthorized as e:
                # 略过,。。
        def _time_request(self, url, method, **kwargs):
            with utils.record_time(self.times, self.timings, method, url):
                resp, body = self.request(url, method, **kwargs)
            return resp, body

    好吧,很无奈,最后发现,参数传到nova当中,其参数并不在body里,而是在req的body里面,当时怎么那么傻没打出来看看。。。


    3. Nova中


    1. /usr/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py

        def create(self, req, body):
            """Creates a new server for a given user."""
    
            #其他的地方都省略
    
                #创建虚拟机
                (instances, resv_id) = self.compute_api.create(context,
                                inst_type,
                                image_uuid,
                                display_name=name,
                                display_description=description,
                                availability_zone=availability_zone,
                                forced_host=host, forced_node=node,
                                metadata=server_dict.get('metadata', {}),
                                admin_password=password,
                                requested_networks=requested_networks,
                                check_server_group_quota=True,
                                **create_kwargs)
    


    2. /usr/lib/python2.7/site-packages/nova/compute/api.py

        @hooks.add_hook("create_instance")
        def create(self, context, instance_type, 
                   image_href, kernel_id=None, ramdisk_id=None,
                   min_count=None, max_count=None,
                   display_name=None, display_description=None,
                   key_name=None, key_data=None, security_group=None,
                   availability_zone=None, forced_host=None, forced_node=None,
                   user_data=None, metadata=None, injected_files=None,
                   admin_password=None, block_device_mapping=None,
                   access_ip_v4=None, access_ip_v6=None, requested_networks=None,
                   config_drive=None, auto_disk_config=None, scheduler_hints=None,
                   legacy_bdm=True, shutdown_terminate=False,
                   check_server_group_quota=False):
    
            # 中间略过。。。
    
            # 跳到这个文件的_create_instance函数
            return self._create_instance(
                           context, instance_type, 
                           image_href, kernel_id, ramdisk_id,
                           min_count, max_count,
                           display_name, display_description,
                           key_name, key_data, security_group,
                           availability_zone, user_data, metadata,
                           injected_files, admin_password,
                           access_ip_v4, access_ip_v6,
                           requested_networks, config_drive,
                           block_device_mapping, auto_disk_config,
                           filter_properties=filter_properties,
                           legacy_bdm=legacy_bdm,
                           shutdown_terminate=shutdown_terminate,
                           check_server_group_quota=check_server_group_quota)
        def _create_instance(self, context, instance_type, 
                   image_href, kernel_id, ramdisk_id,
                   min_count, max_count,
                   display_name, display_description,
                   key_name, key_data, security_groups,
                   availability_zone, user_data, metadata, injected_files,
                   admin_password, access_ip_v4, access_ip_v6,
                   requested_networks, config_drive,
                   block_device_mapping, auto_disk_config, filter_properties,
                   reservation_id=None, legacy_bdm=True, shutdown_terminate=False,
                   check_server_group_quota=False):
            """Verify all the input parameters regardless of the provisioning
            strategy being performed and schedule the instance(s) for
            creation.
            """
    
            # 中间略去。。
    
            # 跳转到 nova/conductor/api.py
            self.compute_task_api.build_instances(context,
                    instances=instances, image=boot_meta,
                    filter_properties=filter_properties,
                    admin_password=admin_password,
                    injected_files=injected_files,
                    requested_networks=requested_networks,
                    security_groups=security_groups,
                    block_device_mapping=block_device_mapping,
                    legacy_bdm=False)
    
            return (instances, reservation_id)


    3. /usr/lib/python2.7/site-packages/nova/conductor/api.py

    ComputeTaskAPI.build_instances

    def build_instances(self, context, instances, image, filter_properties,
                admin_password, injected_files, requested_networks,
                security_groups, block_device_mapping, legacy_bdm=True):
            self.conductor_compute_rpcapi.build_instances(context,
                    instances=instances, image=image,
                    filter_properties=filter_properties,
                    admin_password=admin_password, injected_files=injected_files,
                    requested_networks=requested_networks,
                    security_groups=security_groups,
                    block_device_mapping=block_device_mapping,
                    legacy_bdm=legacy_bdm)


    4. /usr/lib/python2.7/site-packages/nova/conductor/rpcapi.py

    ComputeTaskAPI.build_instances

    在这里就要解释一下了,Nova中各个服务之间的通信使用了基于AMQP实现的RPC机制,其中 nova-compute、nova-conductor 和 nova-scheduler 在启动时都会注册一个RPC Server。

    def build_instances(self, context, instances, image, filter_properties,
                admin_password, injected_files, requested_networks,
                security_groups, block_device_mapping, legacy_bdm=True):
    
            # 中间略过。。
    
            # 获得目标机的RPC Client
            cctxt = self.client.prepare(version=version)
    
            # 将跳转至,/usr/lib/python2.7/site-packages/oslo_messaging/rpc/client.py
            # RPC cast 主要用于异步形式,比如创建虚拟机,在创建过程中可能需要很长时间,
            # 如果使用RPC call显然对性能有很大的影响。cast()的第二个参数是RPC调用的函数名,
            # 后面的参数将作为参数被传入该函数
            cctxt.cast(context, 'build_instances', **kw)

    类ComputeAPI只是暴露给其他服务的RPC调用接口,Compute服务的RPC Server接受到RPC请求后,真正完成任务的是nova.compute.manager 模块。从ComputeAPI 到ComputeManager的过程即是RPC调用过程。


    5. /usr/lib/python2.7/site-packages/oslo_messaging/rpc/client.py

    RPCClient.cast() —> _CallContext.cast()

        def cast(self, ctxt, method, **kwargs):
    
            self.prepare().cast(ctxt, method, **kwargs)
        def cast(self, ctxt, method, **kwargs):
            """Invoke a method and return immediately. See RPCClient.cast()."""
            msg = self._make_message(ctxt, method, kwargs)
            ctxt = self.serializer.serialize_context(ctxt)
    
            if self.version_cap:
                self._check_version_cap(msg.get('version'))
            try:
                self.transport._send(self.target, ctxt, msg, retry=self.retry)
            except driver_base.TransportDriverError as ex:
                raise ClientSendError(self.target, ex)


    6. 中间各种过程不贴代码

    _CallContext.cast() —> site-packages/oslo_messaging/transport.py Transport._send()

    走到这个transport._send()的之后实在找不到走到哪里了,知道的小伙伴帮忙说一下吧


    7. /usr/lib/python2.7/site-packages/nova/conductor/manager.py

    ComputeTaskManager.build_instances

    之所以来到了这里,在nova第4步的注释中已有解释,这里要补充的一件事情就是我遇到的坑。。

    在4中,我在kw参数中加了cache_type这个参数,其实它是和这里的 build_instances 函数相对应的,我在kw里面加了那个参数但是在这个函数的参数列表中忘记加了(其实是当时根本就不知道那边最后会走到哪个函数。。。),导致起虚拟机的时候一直处于scheduling当中,如果也是需要在源码基础上修改的话,一定要记住加!!

        def build_instances(self, context, instances, image, filter_properties,
                admin_password, injected_files, requested_networks,
                security_groups, block_device_mapping=None, legacy_bdm=True):
    
            # 中间的省略。。
            # 此处的日志是在 /var/log/nova/nova-conductor.log
    
                # 此处调用的是 nova/compute/rpcapi.py  --->  build_and_run_instance()
                self.compute_rpcapi.build_and_run_instance(context,
                        instance=instance, host=host['host'], image=image,
                        request_spec=request_spec,
                        filter_properties=local_filter_props,
                        admin_password=admin_password,
                        injected_files=injected_files,
                        requested_networks=requested_networks,
                        security_groups=security_groups,
                        block_device_mapping=bdms, node=host['nodename'],
                        limits=host['limits'])


    8. /usr/lib/python2.7/site-packages/nova/computer/rpcapi.py

    ComputeAPI.build_and_run_instance()

        def build_and_run_instance(self, ctxt, instance, host, image, request_spec,
                filter_properties, admin_password=None, injected_files=None,
                requested_networks=None, security_groups=None,
                block_device_mapping=None, node=None, limits=None):
    
            version = '4.0'
            cctxt = self.client.prepare(server=host, version=version)
    
            # 此处又重复了第5、6步的内容,下面这点不再重复的写。
            # 注意,这里对应的函数是 build_and_run_instance
            # 其位置在 nova/compute/manager.py   ComputeManager.build_and_run_instance()
    
            cctxt.cast(ctxt, 'build_and_run_instance', instance=instance,
                    image=image, request_spec=request_spec,
                    filter_properties=filter_properties,
                    admin_password=admin_password,
                    injected_files=injected_files,
                    requested_networks=requested_networks,
                    security_groups=security_groups,
                    block_device_mapping=block_device_mapping, node=node,
                    limits=limits)


    9. /usr/lib/python2.7/site-packages/nova/compute/manager.py

    ComputeManager.build_and_run_instance() —> ComputeManager._locked_do_build_and_run_instance() —> ComputeManager._do_build_and_run_instance() —> ComputeManager._build_and_run_instance()

    build_and_run_instance

        def build_and_run_instance(self, context, instance, image, request_spec,
                         filter_properties, admin_password=None,
                         injected_files=None, requested_networks=None,
                         security_groups=None, block_device_mapping=None,
                         node=None, limits=None):
    
            @utils.synchronized(instance.uuid)
            def _locked_do_build_and_run_instance(*args, **kwargs):
                # NOTE(danms): We grab the semaphore with the instance uuid
                # locked because we could wait in line to build this instance
                # for a while and we want to make sure that nothing else tries
                # to do anything with this instance while we wait.
                with self._build_semaphore:
                    self._do_build_and_run_instance(*args, **kwargs)
    
            # NOTE(danms): We spawn here to return the RPC worker thread back to
            # the pool. Since what follows could take a really long time, we don't
            # want to tie up RPC workers.
            # 这个spawn_n 就调用 _locked_do_build_and_run_instance 这个函数
            utils.spawn_n(_locked_do_build_and_run_instance,
                          context, instance, image, request_spec,
                          filter_properties, admin_password, injected_files,
                          requested_networks, security_groups,
                          block_device_mapping, node, limits)


    _do_build_and_run_instance

        def _do_build_and_run_instance(self, context, instance, image,
                request_spec, filter_properties, admin_password, injected_files,
                requested_networks, security_groups, block_device_mapping,
                node=None, limits=None):
    
            # 中间的省略。。
    
            try:
                with timeutils.StopWatch() as timer:
                    self._build_and_run_instance(context, instance, image,
                            decoded_files, admin_password, requested_networks,
                            security_groups, block_device_mapping, node, limits,
                            filter_properties)


    _build_and_run_instance

        def _build_and_run_instance(self, context, instance, image, injected_files,
                admin_password, requested_networks, security_groups,
                block_device_mapping, node, limits, filter_properties):
    
            image_name = image.get('name')
            self._notify_about_instance_usage(context, instance, 'create.start',
                    extra_usage_info={'image_name': image_name})
            try:
    
                # 中间省略。。
    
                            # 从这里调用 /usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py 里面的 spawn()
                            self.driver.spawn(context, instance, cache_type, image_meta,
                                              injected_files, admin_password,
                                              network_info=network_info,
                                              block_device_info=block_device_info)


    10. /usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py

    在这里进行创建虚拟机的动作

        def spawn(self, context, instance, image_meta, injected_files,
                  admin_password, network_info=None, block_device_info=None):
            disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
                                                instance,
                                                image_meta,
                                                block_device_info)
            self._create_image(context, instance,
                               disk_info['mapping'],
                               network_info=network_info,
                               block_device_info=block_device_info,
                               files=injected_files,
                               admin_pass=admin_password)
            xml = self._get_guest_xml(context, instance, network_info,
                                      disk_info, image_meta,
                                      block_device_info=block_device_info,
                                      write_to_disk=True)
            self._create_domain_and_network(context, xml, instance, network_info,
                                            disk_info,
                                            block_device_info=block_device_info)
            LOG.debug("Instance is running", instance=instance)
    
            def _wait_for_boot():
                """Called at an interval until the VM is running."""
                state = self.get_info(instance).state
    
                if state == power_state.RUNNING:
                    LOG.info(_LI("Instance spawned successfully."),
                             instance=instance)
                    raise loopingcall.LoopingCallDone()
    
            timer = loopingcall.FixedIntervalLoopingCall(_wait_for_boot)
            timer.start(interval=0.5).wait()

    未完待续。。。

    展开全文
  • 该文档来自OpenStack Days China 2016。华云数据计算网络产品线技术总监刘晓欣发表的题为“从Juno到Mitaka,OpenStack升级那些事” 的主题演讲,欢迎下载!
  • # yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch 4.配置组件 编辑/etc/neutron/neutron.conf文件,并完成以下动作: 在[数据库]节中,删除配置数据库访问: 在[默认的]...

    作者:【吴业亮】

    博客:http://blog.csdn.net/wylfengyujiancheng

    一、硬件配置及服务拓扑
    1. controller节点:一块网卡
    2. 网络节点:四块网卡。
    3. 计算节点:三块网卡
    这里写图片描述
    这里写图片描述

    controller节点
    1. 运行 neutron数据库
    2. 运行消息队列服务
    3. 运行认证。
    4. 运行OpenStack计算nova相关网络,需配置nova.conf文件。
    5. 运行插件ML2 。
    网络节点
    1. Neutron认证相关信息需配置neutron.conf文件。
    2. Open vSwitch服务,Open vSwitch代理,L3代理,DHCP代理,元数据代理,一些依赖项。
    计算节点
    1. 运行OpenStack身份与合适的配置服务 需配置neutron.conf文件。
    2. 运行OpenStack计算nova相关网络,需配置nova.conf文件。
    3. Open vSwitch服务,Open vSwitch代理,一些依赖项。
    二、各个节点服务关系及说明
    这里写图片描述
    网络节点网络包含以下组件:
    1. open vswitch-agent
    2. l3-agent
    3. dhcp-aent
    4. Metadata-agent
    这里写图片描述
    这里写图片描述
    计算节点网络包含以下组件:
    1. Open vSwitch-agent。
    2. 网桥。
    这里写图片描述
    这里写图片描述
    三、场景举例
    Note请注意
    南北网络:虚拟机内部数据到外部网络
    东西网络:虚拟机之间通信
    案例1:南北网络、实例对应一个固定的IP地址
    这里写图片描述
    案例2:南北网络,实例对应一个浮动IP地址
    这里写图片描述
    案例3:东西网络,实例在不同的网络上
    这里写图片描述
    案例4:东西网络、实例在同一网络
    这里写图片描述
    四、安装配置
    (一)controller节点
    1、安装组件

    # yum install openstack-neutron openstack-neutron-ml2 python-neutronclient which 

    2、配置服务器组件
    编辑 /etc/neutron/neutron.conf文件,并完成以下动作:
    在[数据库]节中,配置数据库访问:

    [database]
    connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
    

    替换 NEUTRON_DBPASS为你的密码
    在[默认的]部分

    [DEFAULT]
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True
    

    在[默认的]和[oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问:

    [DEFAULT]
    rpc_backend = rabbit
    [oslo_messaging_rabbit]
    rabbit_host = controller
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASS
    

    替换 RABBIT_PASS为你的密码
    在[默认的]和[keystone_authtoken]部分,配置身份服务访问:

    [DEFAULT]
    auth_strategy = keystone
    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    

    替换NEUTRON_PASS为你的密码
    Note请注意
    注释掉或删除任何其他选项 [keystone_authtoken]部分。
    在[默认的]和[nova]部分,配置网络通知计算网络拓扑变化:

    [DEFAULT]
    notify_nova_on_port_status_changes = True
    notify_nova_on_port_data_changes = True
    [nova]
    auth_url = http://controller:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = nova
    password = NOVA_PASS
    

    替换 NOVA_PASS 为你的密码
    在[oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp
    

    3、编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件
    在[ml2]部分,使平、VLAN和VXLAN网络:

    [ml2]
    type_drivers = flat,vlan,vxlan
    

    在[ml2]部分,使VXLAN自助服务网络:

    [ml2]
    tenant_network_types = vxlan
    

    在[ml2]部分

    [ml2]
    mechanism_drivers = openvswitch,l2population
    

    在[ml2]部分,启用端口安全

    [ml2]
    extension_drivers = port_security
    

    在[ml2_type_flat]部分,虚拟网络配置提供者平面网络:

    [ml2_type_flat]
    flat_networks = provider
    

    在[ml2_type_vxlan]部分,配置VXLAN网络标识符范围自助服务网络:

    [ml2_type_vxlan]
    vni_ranges = 1:1000
    

    在[securitygroup]部分,使ipset提高效率的安全组规则:

    [securitygroup]
    enable_ipset = True
    

    编辑/etc/nova/nova.conf文件和执行以下操作:
    在[nova]节中,配置访问参数,使元数据代理

    [neutron]
    url = http://controller:9696
    auth_url = http://controller:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    service_metadata_proxy = True
    

    4、创建链接

    ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

    5、同步数据库

    su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf   --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

    6、重启nova服务

    systemctl restart openstack-nova-api.service

    7、启动neutron服务

    # systemctl enable neutron-server.service
    # systemctl start neutron-server.service
    

    (二)网络节点
    1. 编辑 /etc/sysctl.conf

    net.ipv4.conf.all.rp_filter=0
    net.ipv4.conf.default.rp_filter=0
    

    2.执行下列命令,立即生效

    # sysctl -p

    3.安装软件包

    # yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch

    4.配置组件
    编辑/etc/neutron/neutron.conf文件,并完成以下动作:
    在[数据库]节中,删除配置数据库访问:
    在[默认的]部分,使模块化层2)中打开(名为ML2插件,路由器的服务,和重叠的IP地址:

    [DEFAULT]
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True
    

    在[默认的]和[oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问:

    [DEFAULT]
    rpc_backend = rabbit
    [oslo_messaging_rabbit]
    rabbit_host = controller
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASS
    

    替换 RABBIT_PASS 为你的密码
    在[默认的]和[keystone_authtoken]部分,配置身份服务访问:

    [DEFAULT]
    auth_strategy = keystone
    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    

    替换 NEUTRON_PASS为你的密码
    Note请注意
    注释掉或删除任何其他选项 [keystone_authtoken]部分。
    在[oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp
    

    5、编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件
    在[ml2]部分,使平、VLAN和VXLAN网络:

    [ml2]
    type_drivers = flat,vlan,vxlan
    

    在[ml2]部分,使VXLAN自助服务网络:

    [ml2]
    tenant_network_types = vxlan
    mechanism_drivers = openvswitch,l2population
    extension_drivers = port_security
    

    在[ml2_type_flat]部分,虚拟网络配置提供者平面网络:

    [ml2_type_flat]
    flat_networks = provider
    

    在[ml2_type_vxlan]部分,配置VXLAN网络标识符范围自助服务网络:

    [ml2_type_vxlan]
    vni_ranges = 1:1000
    

    在[securitygroup]部分,使ipset提高效率的安全组规则:

    [securitygroup]
    enable_ipset = True
    

    6、编辑 /etc/neutron/plugins/ml2/openvswitch_agent.ini文件:

    [ovs]
    local_ip=TUNNEL_INTERFACE_IP_ADDRESS
    bridge_mappings=vlan:br-vlan,external:br-ex
    [agent]
    tunnel_types=gre,vxlan
    l2_population=True
    prevent_arp_spoofing=True
    [securitygroup]
    firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
    enable_security_group=True
    

    取代 TUNNEL_INTERFACE_IP_ADDRESS与接口的IP地址处理GRE / VXLAN项目网络。
    1. 配置L3代理。编辑 /etc/neutron/l3_agent.ini文件:

    [DEFAULT]
    interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
    external_network_bridge=
    

    Note请注意
    的 external_network_bridge选择故意不包含值。
    2. 配置DHCP代理。编辑 /etc/neutron/dhcp_agent.ini文件:

    [DEFAULT]
    interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
    dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata=True
    
    1. 配置元数据代理。编辑 /etc/neutron/metadata_agent.ini文件:
    [DEFAULT]
    nova_metadata_ip=controller
    metadata_proxy_shared_secret=METADATA_SECRET
    

    6、创建链接

    # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

    7、启动服务
    创建网桥

    # ovs-vsctl add-br br-ex

    将网卡加入到网桥中

    # ovs-vsctl add-port br-ex INTERFACE_NAME
    # systemctl restart openstack-nova-api.service
    # systemctl start neutron-openvswitch-agent.service neutron-l3-agent.
    service neutron-dhcp-agent.service neutron-metadata-agent.service
    # systemctl enable neutron-openvswitch-agent.service neutron-l3-agent.
    service neutron-dhcp-agent.service neutron-metadata-agent.service
    

    (三)计算节点
    1. 编辑 /etc/sysctl.conf

    net.ipv4.conf.all.rp_filter=0
    net.ipv4.conf.default.rp_filter=0
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1

    2.执行下列命令,立即生效

    # sysctl -p

    3.安装软件包

    # yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch

    4.编辑 /etc/neutron/neutron.conf文件,并完成以下动作:
    • 在 [数据库]节中,注释掉 连接选项,因为计算节点不直接访问数据库。
    • 在 [默认的]和 [oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问:

    [DEFAULT]
    rpc_backend = rabbit
    [oslo_messaging_rabbit]
    rabbit_host = controller
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASS

    替换 RABBIT_PASS为你的密码
    • 在 [默认的]和 [keystone_authtoken]部分,配置身份服务访问:

    [DEFAULT]
    auth_strategy = keystone
    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS

    替换 NEUTRON_PASS为你的密码
    Note请注意
    注释掉或删除任何其他选项 [keystone_authtoken]部分。
    • 在 [oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp

    5.编辑 /etc/neutron/plugins/ml2/openvswitch_agent.ini

    [ovs]
    local_ip = TUNNEL_INTERFACE_IP_ADDRESS
    bridge_mappings = vlan:br-vlan
    [agent]
    tunnel_types = gre,vxlan
    l2_population = True
    prevent_arp_spoofing = True
    [securitygroup]
    firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
    enable_security_group = True

    6.编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件
    在[ml2]部分,使平、VLAN和VXLAN网络:

    [ml2]
    type_drivers = flat,vlan,vxlan

    在[ml2]部分,使VXLAN自助服务网络:

    [ml2]
    tenant_network_types = vxlan

    在[ml2]部分,使Linux桥和2层人口机制:

    [ml2]
    mechanism_drivers = openvswitch,l2population

    在[ml2]部分,启用端口安全扩展司机:

    [ml2]
    extension_drivers = port_security

    在[ml2_type_flat]部分,虚拟网络配置提供者平面网络:

    [ml2_type_flat]
    flat_networks = provider

    在[ml2_type_vxlan]部分,配置VXLAN网络标识符范围自助服务网络:

    [ml2_type_vxlan]
    vni_ranges = 1:1000

    在[securitygroup]部分,使ipset提高效率的安全组规则:

    [securitygroup]
    enable_ipset = True

    配置nova配置文件
    •7编辑 /etc/nova/nova.conf文件,并完成以下动作:
    o 在 [neutron]节中,配置访问参数:

    [neutron]
    url = http://controller:9696
    auth_url = http://controller:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = NEUTRON_PASS

    替换 NEUTRON_PASS为你的密码
    8.启动服务

    # systemctl enable neutron-openvswitch-agent.service
    # systemctl start neutron-openvswitch-agent.service
    # systemctl restart openstack-nova-compute.service
    展开全文
  • 【neutron】mitaka版本openstack网络之linux bridge

    万次阅读 热门讨论 2016-04-26 21:13:30
    # yum install openstack-neutron openstack-neutron-ml2 \ openstack-neutron-linuxbridge ebtables 2、配置服务器组件 编辑 /etc/neutron/neutron.conf文件,并完成以下动作: 在[数据库]节中,配置数据库...

    作者:【吴业亮】云计算开发工程师
    博客:http://blog.csdn.net/wylfengyujiancheng
    一、硬件配置及服务拓扑
    1. controller节点:一块网卡
    2. 网络节点:四块网卡。
    3. 计算节点:三块网卡
    这里写图片描述
    这里写图片描述
    controller节点
    1. 运行neutron数据库和neutron-server
    2. 运行消息队列服务
    3. 运行OpenStack身份与合适的配置服务
    4. 运行OpenStack计算nova相关网络,需配置nova.conf文件。
    5. 运行插件ML2
    网络节点
    1. Neutron认证相关信息需配置neutron.conf文件。
    2. Linux桥代理,L3代理,DHCP代理,元数据代理,和一些依赖项。
    计算节点
    1. 运行OpenStack身份与合适的配置服务 需配置neutron.conf文件。
    2. 运行OpenStack计算nova相关网络,需配置nova.conf文件。
    3. Linux桥代理和一些依赖项。
    二、各个节点服务关系及说明
    这里写图片描述
    这里写图片描述
    网络节点网络包含以下组件:
    1. Linuxbridge-agent
    2. DHCP agent
    3. L3 agent
    4. Metadata agent
    这里写图片描述
    这里写图片描述
    计算节点网络包含以下组件:
    1. Linux-bridge-agent
    这里写图片描述
    这里写图片描述
    三、场景举例
    Note请注意
    南北网络:虚拟机内部数据到外部网络
    东西网络:虚拟机之间通信
    案例1:南北网络、实例对应一个固定的IP地址
    这里写图片描述
    案例2:南北网络,实例对应一个浮动IP地址
    这里写图片描述
    案例3:东西网络,实例在不同的网络上
    这里写图片描述
    案例4:东西网络、实例在同一网络
    这里写图片描述
    四、安装配置
    (一)controller节点
    1、安装组件

    # yum install openstack-neutron openstack-neutron-ml2 \
      openstack-neutron-linuxbridge ebtables

    2、配置服务器组件
    编辑 /etc/neutron/neutron.conf文件,并完成以下动作:
    在[数据库]节中,配置数据库访问:

    [database]
    connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

    替换 NEUTRON_DBPASS为你自己的密码
    在[默认的]部分

    [DEFAULT]
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True

    在[默认的]和[oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问:

    [DEFAULT]
    rpc_backend = rabbit
    [oslo_messaging_rabbit]
    rabbit_host = controller
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASS

    替换RABBIT_PASS为你自己的密码
    在[默认的]和[keystone_authtoken]部分,配置身份服务访问:

    [DEFAULT]
    auth_strategy = keystone
    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS

    替换NEUTRON_PASS为你自己的密码
    Note请注意
    注释掉或删除任何其他选项 [keystone_authtoken]部分。
    在[默认的]和[nova]部分,配置网络通知计算网络拓扑变化:

    [DEFAULT]
    notify_nova_on_port_status_changes = True
    notify_nova_on_port_data_changes = True
    [nova]
    auth_url = http://controller:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = nova
    password = NOVA_PASS

    替换NOVA_PASS为你自己的密码。
    在[oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp

    3、编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件
    在[ml2]部分,使平、VLAN和VXLAN网络:

    [ml2]
    type_drivers = flat,vlan,vxlan

    在[ml2]部分,使VXLAN自助服务网络:

    [ml2]
    tenant_network_types = vxlan

    在[ml2]部分

    [ml2]
    mechanism_drivers = linuxbridge,l2population

    在[ml2]部分,启用端口安全

    [ml2]
    extension_drivers = port_security

    在[ml2_type_flat]部分,虚拟网络配置提供者平面网络:

    [ml2_type_flat]
    flat_networks = provider

    在[ml2_type_vxlan]部分,配置VXLAN网络标识符范围自助服务网络:

    [ml2_type_vxlan]
    vni_ranges = 1:1000

    在[securitygroup]部分,使ipset提高效率的安全组规则:

    [securitygroup]
    enable_ipset = True

    编辑/etc/nova/nova.conf文件和执行以下操作:
    在[nova]节中,配置访问参数,使元数据代理,并配置秘密:

    [neutron]
    url = http://controller:9696
    auth_url = http://controller:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    service_metadata_proxy = True

    4、创建链接

    ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

    5、同步数据库

    su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf   --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

    6、重启nova服务

    systemctl restart openstack-nova-api.service

    7、启动neutron服务

    # systemctl enable neutron-server.service
    # systemctl start neutron-server.service

    (二)网络节点
    1.安装软件包

    # yum install openstack-neutron openstack-neutron-ml2 \
      openstack-neutron-linuxbridge ebtables

    2.配置组件
    编辑/etc/neutron/neutron.conf文件,并完成以下动作:
    在[数据库]节中,删除配置数据库访问:
    在[默认的]部分,使模块化层2)中打开(名为ML2插件,路由器的服务,和重叠的IP地址:

    [DEFAULT]
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True

    在[默认的]和[oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问:

    [DEFAULT]
    rpc_backend = rabbit
    [oslo_messaging_rabbit]
    rabbit_host = controller
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASS

    替换RABBIT_PASS为你自己的密码。
    在[默认的]和[keystone_authtoken]部分,配置身份服务访问:

    [DEFAULT]
    auth_strategy = keystone
    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS

    替换NEUTRON_PASS为你自己的密码
    Note请注意
    注释掉或删除任何其他选项 [keystone_authtoken]部分。
    在[oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp

    3、编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件
    在[ml2]部分,使平、VLAN和VXLAN网络:

    [ml2]
    type_drivers = flat,vlan,vxlan

    在[ml2]部分,使VXLAN自助服务网络:

    [ml2]
    tenant_network_types = vxlan

    在[ml2]部分,使Linux桥和2层人口机制:

    [ml2]
    mechanism_drivers = linuxbridge,l2population

    在[ml2]部分,启用端口安全扩展司机:

    [ml2]
    extension_drivers = port_security

    在[ml2_type_flat]部分,虚拟网络配置提供者平面网络:

    [ml2_type_flat]
    flat_networks = provider

    在[ml2_type_vxlan]部分,配置VXLAN网络标识符范围自助服务网络:

    [ml2_type_vxlan]
    vni_ranges = 1:1000

    在[securitygroup]部分,使ipset提高效率的安全组规则:

    [securitygroup]
    enable_ipset = True

    6、编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.inii文件:

    [linux_bridge]
    physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
    [vxlan]
    enable_vxlan = True
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    l2_population = True
    [securitygroup]
    enable_security_group = True
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

    替换 OVERLAY_INTERFACE_IP_ADDRESS与为网卡I

    1. 配置L3代理。编辑 /etc/neutron/l3_agent.ini文件:
    [DEFAULT]
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    external_network_bridge =

    Note请注意
    的 external_network_bridge选择故意不包含值。
    2. 配置DHCP代理。编辑 /etc/neutron/dhcp_agent.ini文件:

    [DEFAULT]
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata = True
    1. 配置元数据代理。编辑 /etc/neutron/metadata_agent.ini文件:
    [DEFAULT]
    nova_metadata_ip=controller
    metadata_proxy_shared_secret=METADATA_SECRET

    替换METADATA_SECRET为合适的值。
    4、创建链接

    # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

    5、启动服务

    # systemctl restart openstack-nova-api.service
    # systemctl enable   neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

    neutron-metadata-agent.service

    # systemctl start  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
      neutron-metadata-agent.service

    (三)计算节点
    1.安装软件包

    # yum install openstack-neutron-linuxbridge ebtables

    2.编辑 /etc/neutron/neutron.conf文件,并完成以下动作:
    在 [数据库]节中,注释掉 连接选项,因为计算节点不直接访问数据库。
    在 [默认的]和 [oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问:

    [DEFAULT]
    rpc_backend = rabbit
    [oslo_messaging_rabbit]
    rabbit_host = controller
    rabbit_userid = openstack
    rabbit_password = RABBIT_PASS

    替换 RABBIT_PASS你的密码
    在 [默认的]和 [keystone_authtoken]部分,配置身份服务访问:

    [DEFAULT]
    auth_strategy = keystone
    [keystone_authtoken]
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS

    替换NEUTRON_PASS为你的密码
    Note请注意
    注释掉或删除任何其他选项 [keystone_authtoken]部分。
    在 [oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp

    3.编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [linux_bridge]
    physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
    [vxlan]
    enable_vxlan = True
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    l2_population = True
    [securitygroup]
    enable_security_group = True
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

    4、配置nova配置文件¶
    编辑 /etc/nova/nova.conf文件,并完成以下动作:
    在 [neutron]节中,配置访问参数:

    [neutron]
    url = http://controller:9696
    auth_url = http://controller:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = NEUTRON_PASS

    替换 NEUTRON_PASS为自己的密码
    5.启动服务

    # systemctl enable neutron-linuxbridge-agent.service
    # systemctl start neutron-linuxbridge-agent.service
    # systemctl restart openstack-nova-compute.service
    展开全文
  • 自动安装分布式mitaka版本openstack

    千次阅读 2016-04-25 13:26:24
    mitaka已经发布四天,目前代码bug还不少,本次本地源为4月12号的代码,由于个人能力有限,一些问题暂时没解决,欢迎共同交流。  安装过程视频:http://pan.baidu.com/s/1miPE9Xu  代码路径: 链接:...

    作者:【吴业亮】云计算开发工程师 
    博客:http://blog.csdn.net/wylfengyujiancheng 
    mitaka已经发布四天,目前代码bug还不少,本次本地源为4月12号的代码,由于个人能力有限,一些问题暂时没解决,欢迎共同交流。 
    安装过程视频:http://pan.baidu.com/s/1miPE9Xu 
    代码路径: 链接:http://pan.baidu.com/s/1qY9rxda 密码:c4ad

    本文介绍如何通过脚本自动安装matika环境。操作系统请下载分享的iso,不要到网上随意下载,原因本地源是基于这个iso做的。安装过程各个节点无需上网。如安装单节点allinone模式,只安装controller即可。如有多个节点,重复执行computer或block代码即可。 
    这里写图片描述 
    二、建议硬件配置: 
    controller 
    vcpu: 2+ 
    内存:4G+ 
    硬盘:10G

    computer 
    vcpu: 2+ 
    内存:4G+ 
    硬盘:10G+

    block 
    vcpu: 1+ 
    内存:2G+ 
    硬盘:10G+ (多块)

    否则在安装过程中会报一些服务起不来错误 
    三、安装各个节点的操作系统 
    1、使用CentOS-7-x86_64-DVD-1511.iso(本地源为CentOS7.2的) 
    2、安装类型为basic web server 
    这里写图片描述 
    四、使用本地源方法 
    1、用ftp工具(如:filezilla)通过root用户将软件包mitaka-centos-rdo.tar.gz上传到服务器/mnt下 
    2、解压压缩包

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#cd  /mnt</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># tar –zxvf mitaka-centos-rdo.tar.gz</span>
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

    3、配置本地源配置文件 
    删除网络源

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># cd /etc/yum.repos.d/ && mkdir bak_repo_bak && mv *.repo  bak_repo_bak </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    4、新建/etc/yum.repos.d/repo.repo并写入(必须命名为repo.repo,脚本判断本地源的依据)

    <code class="hljs makefile has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># cat <<END >/etc/yum.repos.d/repo.repo</span>
    [repo]
    <span class="hljs-constant" style="box-sizing: border-box;">name</span>=repo
    <span class="hljs-constant" style="box-sizing: border-box;">baseurl</span>=file:///mnt/mitaka-centos-rdo
    <span class="hljs-constant" style="box-sizing: border-box;">gpgcheck</span>=0
    <span class="hljs-constant" style="box-sizing: border-box;">enabled</span>=1
    <span class="hljs-constant" style="box-sizing: border-box;">proxy</span>=_none_
    END
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

    5、执行下列命令测试,有正常回显,如报错返回检查配置文件及文件路径是否正确。

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># yum repolist</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    五、配置安装信息 
    1、用ftp工具(如:filezilla)通过root用户将mitaka_install-V1.6.zip 上传到服务器/root下

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># cd /root/</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># unzip mitaka_install-V1.6.zip</span>
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

    2、配置安装信息/root/mitaka_install-V1.6/lib/lib/installrc。 
    这里写图片描述 
    解释: 
    Controller节点信息 
    HOST_NAME对应controller的主机名 
    MANAGER_IP第一块网卡IP,作为管理网 
    ALL_PASSWORD各个组件、数据库及dashboard用户密码 
    NET_DEVICE_NAME第二块网卡名称,虚拟机网卡绑定到该网卡上

    CONTROLLER_COMPUTER=True 
    controller节点上是否安装nova-computer服务,如果需要做到控制和计算隔离,请改为False。

    NEUTRON_PUBLIC_NET为浮动IP网络的网段 ,即外出网络网段 
    PUBLIC_NET_GW为浮动IP网络的网关 
    PUBLIC_NET_START为浮动IP网络地址池的起始IP 
    PUBLIC_NET_END为浮动IP网络地址池的结束IP

    SECOND_NET为系统第二块网卡的IP,用于绑定网桥,走虚拟机流量 
    NEUTRON_DNS为浮动IP网络的DNS 
    NEUTRON_PRIVATE_NET为demo租户的网络 
    PRIVATE_NET_GW为demo租户的网络网关 
    PRIVATE_NET_DNS为demo租户的网络DNS

    BLOCK_CINDER_DISK新增一个空白的分区或磁盘用于配置cinder云硬盘(block节点) 
    可选: 
    CINDER_DISK新增一个空白的分区或磁盘用于配置cinder云硬盘(controller节点)

    注意:请检查各个节点的各个网卡名称是否与实际名称一致,如不一致可用nmtui命令修改 
    举例: 
    这里写图片描述 
    不一致,将wired connection 1 改为eth1 
    这里写图片描述 
    3、配置hosts文件,此处配个节点的信息。

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># cat /root/ mitaka_install-V1.6lib/hosts</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    这里写图片描述 
    六、执行安装

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># cd ~/mitaka_install-V1.6</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># bash main.sh</span>
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

    输入数字进入需要安装的节点,1表示安装controller,2表示安装computer节点,3表示安装block节点 
    这里写图片描述 
    1、安装controller节点 
    选择1,进入安装controller节点模式 
    输入数字1 ,Configure System Environment. 
    当出现下列回显表示安装配置成功 
    这里写图片描述

    注意:安装Configure System Environment后会自动重启一次 
    重启后用root重新登录

    <code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># cd ~/ mitaka_install-V1.6</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># bash main.sh</span>
    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

    输入数字2 Install Mariadb and Rabbitmq-server 
    成功回显 
    这里写图片描述 
    输入数字 3 Install Keystone. 
    成功回显 
    这里写图片描述 
    输入数字4 Install Glance.. 
    成功回显 
    这里写图片描述 
    输入数字5 Install Nova 
    成功回显 
    这里写图片描述 
    输入数字6 Install Cinder 
    成功回显 
    这里写图片描述 
    输入数字7 进入Install Neutron, 
    成功回显 
    这里写图片描述 
    输入数字8 Install Dashboard 
    成功回显 
    这里写图片描述 
    输入0退出脚本 
    这里写图片描述 
    2、安装computer节点服务 
    进入computer节点安装模式输入1,配置系统 
    成功回显: 
    这里写图片描述 
    输入2安装nova和neutron-agent服务,需要手动输入computer节点的第二块网卡名称用于走虚拟机流量 
    这里写图片描述 
    成功回显: 
    这里写图片描述

    注意:如有多个computer节点请重复此章节操作即可 
    3、安装block节点服务 
    输入1进入配置系统 
    成功回显: 
    这里写图片描述 
    输入2进入安装cinder服务 
    成功回显: 
    这里写图片描述

    注意:如有多个block节点请重复此章节操作即可 
    七、登录openstack及创建虚拟机 
    1、Dashboard安装成功后在浏览器中输出http://eth0-IP/dashboard 
    这里写图片描述 
    登录用户名及密码 
    管理员用户:admin 
    普通用户:demo 
    密码:参见/root/ mitaka_install-V1.6/lib/lib/installrc 
    2、创建虚拟机 
    点击computer – instance-launch instance创建虚拟机 
    这里写图片描述 
    3、分配浮动IP 
    点击associate floating ip 给虚拟机分配IP 
    这里写图片描述

    附录 
    1、脚本必须用root执行,否则自动退出 
    2、脚本日志在/var/log/openstack-centos-mitaka,如果报错,打开日志最下面找到ERROR的一行,检查环境问题。 
    3、执行脚本时绿色回显表示执行命令成功。 
    4、脚本报错后执行再次执行,自动识别已经安装的步骤。 
    5、该脚本支持物理机也支持虚拟机。 
    7、已知bug,如果虚拟机创建在computer节点上,虚拟机网络不通,vnc打不开,需要重新下controller节点的nova和neutron服务或者直接重启controller节点。 
    8、代码路径: 
    链接:http://pan.baidu.com/s/1qY9rxda 密码:c4ad 
    9、在安装过程中如果有问题欢迎交流,因为本人平时也有工作,有时不能及时回复大家的消息,请理解! 
    邮箱:wuyeliangdt@126.com 
    微信:A873230308 

    展开全文
  • 美国时间4月7日,OpenStack社区发布了OpenStack的第13个版本——Mitaka,新版本聚焦于可管理性、可扩展性和终端用户体验。目前OpenStack在云构建领域已经成为了使用最为广泛的开源软件,成为了企业和服务提供商的云...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,387
精华内容 954
关键字:

mitakaopenstack