概述OpenStack
基本技术
消息队列
概念交换机类型缺点 restful api HorizonNovaKeystoneGlanceNeutronCinderSwiftZunKuryr-libnetwork SDN
概述云计算是一种采用按量付费的模式,基于虚拟化技术,将相应计算资源(如网络、存储等)池化后,提供便捷的、高可用的、高扩展性的、按需的服务(如计算、存储、应用程序和其他 IT 资源)。
云计算基本特征:
自主服务:可按需的获取云端的相应资源(主要指公有云);网路访问:可随时随地使用任何联网终端设备接入云端从而使用相应资源。资源池化:快速弹性:可方便、快捷地按需获取和释放计算资源。按量计费:
常见的部署模式
公有云私有云社区云混合云
三种服务模式
IaaS:云服务商将IT系统的基础设施(如计算资源、存储资源、网络资源)池化后作为服务进行售卖;PaaS:云服务商将IT系统的平台软件层(数据库、OS、中间件、运行库)作为服务进行售卖;SaaS:云服务商将IT系统的应用软件层作为服务进行售卖。
云计算和虚拟化
云计算:IT能力服务化,按需使用,按量计费,多租户隔离,是一个系统的轻量级管理控制面。
虚拟化:环境隔离,资源复用,降低隔离损耗,提升运行性能,提供高级虚拟化特性。
虚拟化是实现云计算的技术支撑之一,但并非云计算的核心关注点。
一个开源云操作系统内核,用于构建云平台,主要实现以下五个主要特点:
资源抽象:OpenStack将各类硬件资源,通过虚拟化与软件定义的形式,抽象成虚拟的资源池;资源调度:OpenStack根据管理员/用户的需求,将资源池中的资源分配给不同的用户,承载不同的应用;应用生命周期管理:OpenStack可以提供初步的应用部署/撤销、自动规模调整等功能;系统运维:OpenStack可以提供一定的系统监控能力;人机交互:OpenStack提供人机接口,外界可通过API、CLI或图形界面的方式与OpenStack进行交互。
组件间交互是消息队列,组件内部交互是restful api。
基本技术 消息队列rabbitmq属于AMQP(高级消息队列协议)的一种实现,应用层的一个开放标准。
特点:
较高的灵活性高可扩展性,多个rabbitmq可以组成集群支持常见的编程语言提供可视化界面便于管理支持多种协议,不只是AMQP提供了多种插件
AMQP的三大组件:
Exchange交换机:把消息路由到队列Queue队列:存储消息等待消费,多个消费者可以订阅同一个队列Binding绑定:将交换机和队列进行绑定,告知交换机应该投递到哪个队列 概念
有几个概念关键词
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列Queue:消息队列载体,每个消息都会被投入到一个或多个队列,多个消费者可以订阅同一个队列Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来Routing Key:路由关键字, exchange根据这个关键字进行消息投递producer:消息生产者,就是投递消息的程序consumer:消息消费者,就是接受消息的程序channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。 交换机类型
Direct Exchange(直连交换机):交换机和队列一对一匹配Fanout Exchange(扇型交换机):消息会被发送至所有与该交换机绑定的队列,不会按照指定的路由键进行投递,类似广播Topic Exchange(主题交换机):交换机会将消息的路由键和绑定到自身的队列进行匹配,将消息投递到匹配上的队列中去Headers Exchange:类似主题交换机,但是是使用消息的属性进行分发 缺点
系统可用性降低,rabbitmq挂了以后系统就崩了。
如何解决消息重复投递或者丢失的问题
如何解决消息按顺序发送的问题
提供一个Web前端控制台,从而实现通过web管理云平台,建云主机,分配网络,配安全组等。
Region(区域):地理上的概念可以理解为是两个不同区域的数据中心,是完全隔离的,但是可以共享同一套keystone和horizon了用户可以选择距离自己更近的域使用服务
端口
nova-api:nova-compute:
负责响应虚拟机创建请求、调度、销毁云主机。
nova-api:通过接口对外提供服务,接受请求处理操作调度资源等。接收传来的HTTP请求校验参数,然后调用其他子服务实现请求操作,之后处理结果返回
nova-conductor:负责数据库的访问控制,避免compute直接访问数据库。避免计算节点出现故障导致数据库出现问题,可以扩展配置多个conductor更好的应对更多计算节点对于数据库的访问
nova-compute:通过消息队列处理请求,并且管理实例的生命周期(和hypervisior一起管理)
nova-schedule:负责调度虚拟机在哪个节点运行,通过过滤器选择合适的计算节点,然后计算节点权重,选择最优的节点(默认权值是计算空闲内存量,内存越大权值越大)
创建一个虚拟机大概的流程:
- 发送http请求,nova-api接受请求后,进行参数和身份校验发送消息给nova-schedule调度计算节点发送消息给nova-compute创建实例在整个过程中通过nova-conductor与数据库进行访问交互
这里的消息发送全部都是通过消息队列实现的,进行异步调用,不会阻塞服务;解耦各个子模块功能;提高可扩展性;提高性能,可以处理多个请求,提高吞吐量
Keystone为OpenStack其他服务提供身份验证、服务规则和服务令牌的功能,管理Domains、Projects、Users、Groups、Roles。
Domain:表示 project 和 user 的集合,在公有云或者私有云中常常表示一个客户Group:一个domain 中的部分用户的集合Project:IT基础设施资源的集合,比如虚机,卷,镜像等Role:角色,表示一个 user 对一个 project resource 的权限Token:一个 user 对于某个目标(project 或者 domain)的一个有限时间段内的身份令牌Credentials:是user用来证明自己身份的信息,可以是1. 用户名/密码;2.Token;3. API Key;4. 其他高级方式Authentication:是 Keystone 验证 User 身份的过程。User 访问 OpenStack时向 Keystone 提交用户名和密码形式的 Credential,Keystone 验证通过后会给 User 签发一个 Token 作为后续访问的 CredentialService:包括nova,glance,cinder,neutron等,每个service会提供若干个Endpoint,user通过Endpoint访问资源和执行操作Endpoint:是一个网络上可访问的地址,通常是一个URL。Service通过Endpoint暴露自己的API,Keystone负责管路和维护每个service的Endpoint Glance
监听端口:
glance-api:9292glance-registry:9191
为云主机提供不同系统镜像,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能。
glance-api对外提供restful api接口调用,当有请求来以后,api不会自己主动处理,而是会调用glance-registry处理有关元数据的操作,调用store backend处理有关镜像的操作。
Image默认存储在/var/lib/glance/images。
提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。
根据网络类型的不同有以下几种网络:
Flat network:基于不使用 VLAN 的物理网络实现的虚拟网络。每个物理网络最多只能实现一个虚拟网络。local network(本地网络):一个只允许在本服务器内通信的虚拟网络,不进行跨服务器的通信。主要用于单节点上测试。VLAN network(虚拟局域网) :基于物理 VLAN 网络实现的虚拟网络。共享同一个物理网络的多个 VLAN 网络是相互隔离的,甚至可以使用重叠的 IP 地址空间。每个支持 VLAN network 的物理网络可以被视为一个分离的 VLAN trunk,它使用一组独占的 VLAN ID。有效的 VLAN ID 范围是 1 到 4094。GRE network (通用路由封装网络):一个使用 GRE 封装网络包的虚拟网络。GRE 封装的数据包基于 IP 路由表来进行路由,因此 GRE network 不和具体的物理网络绑定。VXLAN network(虚拟可扩展网络):基于 VXLAN 实现的虚拟网络。同 GRE network 一样, VXLAN network 中 IP 包的路由也基于 IP 路由表,也不和具体的物理网络绑定。 Cinder
为运行实例提供稳定持久化的数据块存储服务,如创建卷、删除卷,在实例上挂载和卸载卷。
cinder-api:接收http请求调用cinder-volume
cinder-volume:管理volume服务,管理卷的生命周期
cinder-schedule:通过算法为卷调度一个合适的节点
这个项目的目的是将容器网络与neutron进行融合,提供接口南向连接neutron,北向连接容器网络。
开始目的是为了提供Docker与Neutron的连接。将Neutron的网络服务带给Docker。随着容器的发展,容器网络的发展也出现了分歧。主要分为两派,一个是Docker原生的CNM(Container Network Model),另一个是兼容性更好的CNI(Container Network Interface)。Kuryr相应的也出现了两个分支,一个是kuryr-libnetwork(CNM),另一个是kuryr-kubernetes(CNI)。
kuryr-libnetwork是运行在Libnetwork框架下的一个plugin,替换了原有的docker engine,成为一个kuryr就是libnetwork的一个remote-driver,现在是docker的推荐remote-driver。
其实实际上kuryr起了一个http服务,23750端口,提供了libnetwork的所有接口,docker找到以后通过这个与kuryr通信。
kuryr借用了neutron的subnetpool,保证了子网间ip的不重复
软件定义网络,是网络虚拟化的一种实现方式。
主要体现在如下三个方面:
转发与控制分离:SDN具有转发与控制分离的特点,采用SDN控制器实现网络拓扑的收集、路由的计算、流表的生成及下发、网络的管理与控制等功能;而网络层设备仅负责流量的转发及策略的执行。通过这种方式可使得网络系统的转发面和控制面独立发展,转发面向通用化、简单化发展,成本可逐步降低;控制面可向集中化、统一化发展,具有更强的性能和容量。控制逻辑集中:转发与控制分离之后,使得控制面向集中化发展。控制面的集中化,使得SDN控制器拥有网络的全局静态拓扑,全网的动态转发表信息,全网络的资源利用率,故障状态等。因此,SDN控制器可实现基于网络级别的统一管理、控制和优化,更可依托全局的拓扑的动态转发信息帮助实现快速的故障定位和排除,提高运营效率。网络能力开放化:SDN还有一个重要特征是支持网络能力开放化。通过集中的SDN控制器实现网络资源的统一管理、整合以及虚拟化后,采用规范化的北向接口为上层应用提供按需分配的网络资源及服务,进而实现网络能力开放。这样的方式打破了现有网络对业务封闭的问题,是一种突破性的创新。



