Openstack是一个云平台管理的项目,它不是一个软件。也就是说我们可以使用Openstack来管理我们数据中心里面的各种资源池;它里面包含了很多子项目。
Openstack通过一个抽象层将普通计算机中的各种资源分成单一的组,当我们需要创建虚拟机的时候可以选择为其分配多少内存、几个CPU、几块网卡、多大的存储等;Openstack就是将这些资源划分成组,然后在这些组里为虚拟机分配资源(这些资源也是有限制的,比如网我们有一个20G的内存资源组,它是由4个5G的主机组合而来的;当我们创建虚拟机时,是无法为其分配大于5G的内存的,因为虚拟机是受单个物理机限制的。);
Openstack的各services:
1.Compute(计算):管理虚拟机的整个生命周期,用于对虚拟机进行调度、资源分配、创建、销毁、远程连接等,其项目名称为Nova;
nova-api:接收并响应终端用户对compute节点的调用服务;它会将请求放入Message Queue供其他组件获取;
nova-api-metadata:接收并响应运行起来的虚拟机实例发起的meta相应的调用请求;
nova-compute:借助于Hypervisor的API启动及终止虚拟机实例,更新虚拟机在数据库中的信息等;从队列中接收请求并执行操作;
nova-scheduler:从队列中取出VM的启动请求,并决定由哪个运行compute服务的Hypervisor来启动并运行虚拟机;
nova-conductor:作为nova-compute与database的中间层,避免nova-compue直接与数据库进行交互,从而导致数据库出错;(nova-compute与nova-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:有着关联配置的状态的三层网络,或者说是由Ipv4或Ipv6定义的地址块形成的网络;
Port:将主机连入网络设备的连接接口;
ML2:作为管理网络设备的统一管理接口;
3.Object Storage(对象存储):基于RESTful的API对非结构化数据对象进行存储和检索,其中的数据自带元数据信息,使用分布式存储,一般用于存储磁盘映像文件,适用于存储一次写入,多次读取的文件,其项目名称为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;
Endpoint:Openstack中各种服务的访问入口(URI形式);
Endpoint分为三种:public url可以被全局所有人访问、private url可以被局域网内访问、admin url只可以被管理员访问;
6.Image(映像):为虚拟机存储和检索其要使用的映像文件的位置,其项目名称为Glance;
Glance组件:
glance-api:Glance的API服务接口,负责接收对Image Service API中映像文件的创建、删除、查找、下载及存储请求;监听在9292端口;
glance-registry:用于与Mysql数据库交互(在Glance的数据库中存储着两张表:image表保存了映像文件的格式、大小等信息;image properties表保存了映像的定制化信息;),存储、处理及获取映像文件的元数据,例如映像文件的大小及类型等;监听在9191端口;
image store:是一个存储的接口层,通过这个接口glance可以获取和保存映像,具体的实现需要外部存储的支持;image store支持亚马逊的S3、Swift、sheepdog、GlusterFS等;
database:存储映像文件的元数据;
映像文件存储仓库:支持多中类型的映像文件存储机制,包括使用普通的文件系统、对象存储、RADOS块设备、HTTP以及Amazon的S3等;
7.Dashboard:Openstack的Web管理接口,其项目名称为Horizon;
8.Teiemetry:提供监控和计量服务,其项目名称为Ceilometer;
9.Orchestration:提供基于模板自动化部署虚拟机的组件,其项目名称为Heat;
10.Database Service:提供数据库应用服务,其项目名称为Trove;
……
概念架构:
逻辑架构:
如概念结构所示,OpenStack由几个独立的部分组成,称为OpenStack服务。所有服务都通过公共身份服务进行身份验证。各个服务通过公共API相互交互,除非需要特权管理员命令。
在内部,OpenStack服务由几个进程组成。所有服务都至少有一个API进程,它监听API请求,预处理它们并将它们传递给服务的其他部分。除Identity服务外,实际工作由不同的进程完成。
对于一个服务的进程之间的通信,使用AMQP消息代理。服务的状态存储在数据库中。在部署和配置OpenStack云时,您可以选择多种消息代理和数据库解决方案,例如RabbitMQ,MySQL,MariaDB和SQLite。
用户可以通过Horizon Dashboard实现的基于Web的用户界面,命令行客户端以及通过浏览器插件或curl等工具发出API请求来访问OpenStack 。对于应用程序, 可以使用多个SDK。最终,所有这些访问方法都会向各种OpenStack服务发出REST API调用。
Openstack各服务的请求流程:
网络拓扑类型:
提供商网络选项以最简单的方式部署OpenStack Networking服务,主要是第2层(桥接/交换)服务和网络的VLAN分段。从本质上讲,它将虚拟网络桥接到物理网络,并依赖于物理网络基础设施来实现第3层(路由)服务。
此选类型乏对自助(私有)网络,第3层(路由)服务以及LBaaS和 FWaaS等高级服务的 支持。如果您需要这些功能,请考虑下面的自助服务网络选项。
自助服务网络选项通过第3层(路由)服务增强了提供商网络选项,这些服务使用覆盖分段方法(如VXLAN)实现 自助服务网络。从本质上讲,它使用NAT将虚拟网络路由到物理网络。此外,此选项为LBaaS和FWaaS等高级服务奠定了基础。
Openstack(Stein版)的安装:
配置步骤:
1.为各个节点配置合理的IP地址及主机名;
2.配置时间同步;
3.安装OpenstackClient软件包;
4.配置SQL Database;
5.配置消息队列(RabbitMQ);
启动以后可以通过其监听的15672接口访问RadditMQ的web界面;
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看不见9292和9191端口;
错误为: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.配置计算节点与控制节点时,要注意节点的防火墙,在计算节点要注意放行rabbit的5672端口,否则会报关于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上
根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删