OpenStack

 

  Openstack是一个云平台管理的项目,它不是一个软件。也就是说我们可以使用Openstack来管理我们数据中心里面的各种资源池;它里面包含了很多子项目。

 

  Openstack通过一个抽象层将普通计算机中的各种资源分成单一的组当我们需要创建虚拟机的时候可以选择为其分配多少内存几个CPU、几块网卡多大的存储等;Openstack就是将这些资源划分成组然后在这些组里为虚拟机分配资源(这些资源也是有限制的,比如网我们有一个20G的内存资源组它是由45G的主机组合而来的;当我们创建虚拟机时,是无法为其分配大于5G的内存的,因为虚拟机是受单个物理机限制的。);

 

  Openstack的各services

    1.Compute(计算):管理虚拟机的整个生命周期用于对虚拟机进行调度资源分配创建销毁、远程连接等,其项目名称为Nova

      nova-api:接收并响应终端用户对compute节点的调用服务;它会将请求放入Message Queue供其他组件获取

      nova-api-metadata:接收并响应运行起来的虚拟机实例发起的meta相应的调用请求

      nova-compute:借助于HypervisorAPI启动及终止虚拟机实例更新虚拟机在数据库中的信息等;从队列中接收请求并执行操作;

      nova-scheduler:从队列中取出VM的启动请求并决定由哪个运行compute服务的Hypervisor来启动并运行虚拟机

      nova-conductor:作为nova-computedatabase的中间层,避免nova-compue直接与数据库进行交互,从而导致数据库出错;(nova-computenova-conductor不是直接交互,而是nova-compute先将消息发送到queue中,然后再由nova-conductor订阅处理)

      nova-consoleauth:用于控制台的授权验证

      nova-novncproxy:为经由vnc接口要连入各虚拟机实例的请求提供代理服务从而使得仅在Dashboard接口上直接向各VM所在的compute节点的VNC服务发起请求

      Compute服务中有一个核心组件Queue(队列),几乎各个API都要经过这个Queue才能与其他API通信;其各API直接通过订阅其他与自己相关的API的消息队列来完成信息交互;其中发布消息的我们可以称之为生产者,接收消息的可以称之为消费者;其中生产者可以有多种,也就意味着有多种队列,消费者也可以有多种,而一个消费者可以订阅多种生产者队列,一个生产者队列也可以被多个消费者订阅;

    2.Networking(网络):管理虚拟机的网络配置用于为虚拟机按需分配网络,支持众多流行的网络管理框架,其项目名称为Neutron

      Network:隔离的二层网络类似于VLAN;

      Subnet:有着关联配置的状态的三层网络或者说是由Ipv4Ipv6定义的地址块形成的网络

      Port:将主机连入网络设备的连接接口

 

         ML2:作为管理网络设备的统一管理接口

    3.Object Storage(对象存储):基于RESTfulAPI对非结构化数据对象进行存储和检索,其中的数据自带元数据信息,使用分布式存储,一般用于存储磁盘映像文件,适用于存储一次写入,多次读取的文件,其项目名称为Swift;

    4.Block Storage(块存储):用于为虚拟机提供数据的存储功能,其项目名称为Cinder

      cinder-api:接受API请求,并将它们路由到cinder-volumefor操作。

      cinder-volume:直接面对存储服务,通过消息队列直接与cinder-scheduler交互

      cinder-scheduler daemon:用于调度选择可以创建卷的最佳存储节点

      cinder-backup daemon:为卷提供备份功能;

      messaging queue:用于块存储进程之间传递信息。

    5.Identity(身份认证):为Openstack中的服务提供认证授权功能以及端点编录功能(Openstack中的各种服务要到Keystone中查询其他服务的访问端点),其项目名称为Keystone

      认证方式

        token:使用一串设定的字符串作为令牌进行认证(建议使用openssl rand -hex 10生成随机字符串);可以基于K/V方式存储;

          这个机制一般是第一次进行安装登录Keystone时才使用的当设置完用户密码以后会被禁用

        账号/密码使用用户名和密码进行认证

      核心术语

        User:一个用户可以关联至多个project;

        Project:标识一个项目以前叫Tenant(租户);

        Role:角色,标识用户的身份,不同角色拥有不同权限;

        Service:服务,即Openstack中的各种service

        EndpointOpenstack中各种服务的访问入口(URI形式);

        Endpoint分为三种:public url可以被全局所有人访问、private url可以被局域网内访问、admin url只可以被管理员访问

    6.Image(映像):为虚拟机存储和检索其要使用的映像文件的位置,其项目名称为Glance

      Glance组件

        glance-api:GlanceAPI服务接口负责接收对Image Service API中映像文件的创建删除查找下载及存储请求;监听在9292端口

        glance-registry:用于与Mysql数据库交互(在Glance的数据库中存储着两张表:image表保存了映像文件的格式、大小等信息;image properties表保存了映像的定制化信息;),存储处理及获取映像文件的元数据例如映像文件的大小及类型等;监听在9191端口

        image store:是一个存储的接口层通过这个接口glance可以获取和保存映像,具体的实现需要外部存储的支持;image store支持亚马逊的S3、Swift、sheepdog、GlusterFS

        database:存储映像文件的元数据

        映像文件存储仓库支持多中类型的映像文件存储机制包括使用普通的文件系统对象存储、RADOS块设备HTTP以及AmazonS3

 

 

 

    7.Dashboard:OpenstackWeb管理接口其项目名称为Horizon;

    8.Teiemetry:提供监控和计量服务,其项目名称为Ceilometer;

    9.Orchestration:提供基于模板自动化部署虚拟机的组件,其项目名称为Heat

    10.Database Service:提供数据库应用服务其项目名称为Trove;

    ……

 

  概念架构

 

 

  逻辑架构

 

    如概念结构所示,OpenStack由几个独立的部分组成,称为OpenStack服务。所有服务都通过公共身份服务进行身份验证。各个服务通过公共API相互交互,除非需要特权管理员命令。

    在内部,OpenStack服务由几个进程组成。所有服务都至少有一个API进程,它监听API请求,预处理它们并将它们传递给服务的其他部分。除Identity服务外,实际工作由不同的进程完成。

    对于一个服务的进程之间的通信,使用AMQP消息代理。服务的状态存储在数据库中。在部署和配置OpenStack云时,您可以选择多种消息代理和数据库解决方案,例如RabbitMQMySQLMariaDBSQLite

    用户可以通过Horizo​​n Dashboard实现的基于Web的用户界面,命令行客户端以及通过浏览器插件或curl等工具发出API请求来访问OpenStack 。对于应用程序, 可以使用多个SDK。最终,所有这些访问方法都会向各种OpenStack服务发出REST API调用。

  Openstack各服务的请求流程

 

  网络拓扑类型

 

    提供商网络选项以最简单的方式部署OpenStack Networking服务,主要是第2层(桥接/交换)服务和网络的VLAN分段。从本质上讲,它将虚拟网络桥接到物理网络,并依赖于物理网络基础设施来实现第3层(路由)服务。

    此选类型乏对自助(私有)网络,第3层(路由)服务以及LBaaSFWaaS等高级服务的 支持。如果您需要这些功能,请考虑下面的自助服务网络选项。

 

    自助服务网络选项通过第3层(路由)服务增强了提供商网络选项,这些服务使用覆盖分段方法(如VXLAN)实现 自助服务网络。从本质上讲,它使用NAT将虚拟网络路由到物理网络。此外,此选项为LBaaSFWaaS等高级服务奠定了基础。

  OpenstackStein版)的安装

    配置步骤

      1.为各个节点配置合理的IP地址及主机名

      2.配置时间同步

      3.安装OpenstackClient软件包

      4.配置SQL Database

      5.配置消息队列RabbitMQ);

        启动以后可以通过其监听的15672接口访问RadditMQweb界面

        iptables -A INPUT -p tcp --dport 5672 -j ACCEPT

      6.配置Memcached,提供缓存加速;

      7.配置Openstack的各个Service

        Keystone

          同步数据库时要使用keystone用户的身份,要不然就要修改/var/log/keystone/keystone.log这个文件的属组为keystone且具有读写权限

        Glance

          /etc/glance/glance-api.conf/etc/glance/glance-registry.conf文件中的#auth_uri = <None>参数描述为:Reason: The auth_uri option is deprecated in favor of www_authenticate_uri and will be removed in the S  release。但是如果使用auth_uri替换官网中的auth_url则会报错。表面上的错误是glance已经启动(状态为running),但是使用netstat -nultp看不见92929191端口

          错误为:MissingRequiredOptions: Auth plugin requires parameters which were not given: auth_url

            WARNING keystonemiddleware.auth_token [-] AuthToken middleware is set with keystone_authtoken.service_token_roles_required set to False. This is backwards compatible but deprecated behaviour. Please set this to True.

        Plancement

          WSGI:https://blog.csdn.net/jinixin/article/details/84677104

          Note:这一步在之前的版本中没有

        Nova

          如果你使用的是VMware中的虚拟机作为计算机点的话则其计算节点中nova的配置文件/etc/nova/nova.conf中的virt_type要配置为qemu官网中为kvm,但是如果使用kvm就会卡在加载映像文件那,无法启动系统;

          Note:

            1.配置计算节点与控制节点时要注意节点的防火墙在计算节点要注意放行rabbit5672端口否则会报关于rabbit连接超时的错误

            2.OpenStack的各种服务自己会生成相关的iptables规则最好不要乱改,尤其是计算节点;我做实验时在将控制节点与计算节点的iptables规则清除后,会有各种错误,其中就包含rabbit超时,mysql数据库(可能是性能问题)错误等;

            3.最好为控制节点与计算节点分配尽可能多的资源否则会发生创建虚拟机失败的情况或者是执行命令极慢的情况

                                   报错: 

                                      1.ResourceProviderRetrievalFailed: Failed to get resource provider with UUID

                                      解决办法:在/etc/httpd/conf.d/00-placement-api.conf中按照以下格式添加一段 Directory

vim /etc/httpd/conf.d/00-placement-api.conf

<VirtualHost *:8778>
...................
<Directory /usr/bin>
    <IfVersion >= 2.4>
        Require all granted
    </IfVersion>
    <IfVersion < 2.4>
        Order allow,deny
        Allow from all
    </IfVersion>
</Directory>
........................
</VirtualHost>

                   注:如果不将上面的内容设置好,执行nova-status upgrade check会报错,所以建议在安装openstack-placement-api-1.1.0-1.el7.noarch是就进行修改。

                                        2.not supported by libvirt.LibvirtDriver                                       

                                          解决办法:修改下nova.conf 文件下libvirtd参数。改计算节点就行,一般都是控制计算一起改。编辑:disk_cachemodes="network=writeback"

                                          原文链接地址:http://www.bbs168x.cn/thread-939-1-1.html

                            Neutron

        Horizon

        Cinder

         具体配置见官网https://docs.openstack.org/install-guide/

                 官网描述:https://docs.openstack.org/install-guide/overview.html

                         Openstack外部网络:

                           Openstack通过Neutron管理云平台中的网络,但是无法管理外部网络。为了连接外部网络,Neutron提供了一个映射方式,将外部的物理网络映射到Neutron中,然后通过Neutron设置连接外部网络的方式。

                           映射方式:通过设置label来映射物理网卡,进而将物理网络引入Neutron。

                           常用见的物理网络有flat与vlan,常见的租户网络有vlan、vxlan与gre。

                           连接外部网络配置:(桥设备使用的是OVS)

                              

控制或网络节点:
cat /etc/neutron/l3_agent.ini
external_network_bridge = br-ex        #设置要连接的外部网桥
#interface_driver = linuxbridge
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True

cat /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = vxlan,vlan,flat
tenant_network_types = vxlan        #设置租户网络类型
#mechanism_drivers = linuxbridge,l2population
mechanism_drivers = openvswitch,l2population    #使用OVS管理设备
extension_drivers = port_security

[ml2_type_flat]
flat_networks = myflat          #自定义的label,可以定义多个,使用逗号隔开,供后面调用。
#每个flat要对应一个物理网卡或者虚拟网桥(将物理网卡桥接到虚拟网桥上)。

[ml2_type_vxlan]
vni_ranges = 1:2000            #设置普通租户使用的VNI范围

[securitygroup]
enable_ipset = true



cat /etc/neutron/plugins/ml2/openvswitch_agent.ini
[ovs]
bridge_mappings = myflat:br-ex     #对外部网络进行映射,将物理机上的br-ex映射到Neutron网络中,取名为myflat。br-ex上桥接这物理网卡,比如ens33,eth0等设备。
#在启动服务之前要设置好。 tunnel_bridge = br-tun local_ip = 192.168.30.100 #租户网络的网卡地址 [agent] tunnel_types = vxlan l2_population = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = true 计算节点: cat /etc/neutron/plugins/ml2/openvswitch_agent.ini [ovs] bridge_mappings = #因为是通过网络节点访问外部网络,所以不需要映射 tunnel_bridge = br-tun local_ip = 192.168.30.101 [agent] tunnel_types = vxlan l2_population = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = true



网桥桥接配置:
ovs-vsctl add-br br-ex #创建网桥(貌似OVS默认给提供了,OVS会自动创建br-int与br-tun,其中br-int与br-ex使用path连接,可以通过ovs-vsctl show查看)
ovs-vsctl add-port br-ex ens39 #将物理网卡桥接到虚拟网桥br-ex上

  

     根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删

原文地址:https://www.cnblogs.com/guowei-Linux/p/11484925.html