Openstack
openstack相关知识点
云计算(cloud computing)
基于互联网的相关服务的增加、使用和交付模式,
通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。
云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。
因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这么强大的计算能力可以模拟核爆炸、预测气候变化和市场发展趋势。
用户通过电脑、笔记本、手机等方式接入数据中心,按自己的需求进行运算
云服务模式
IaaS 基础设施即服务
消费者通过Internet可以从完善的计算机基础设施获得服务
例如:腾讯云、阿里云等
PaaS 平台即服务 (= IaaS + 开发环境)
把服务器平台作为一种服务提供的商业模式,通过网络进行程序提供的服务
SaaS 软件即服务
它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上
客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务
云环境
私有云
为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。该公司拥有基础设施,并可以控制在此基础设施上部署应用程序的方式
开源组件:openstack、cloudstack等
公有云
指第三方提供商为用户提供的能够使用的云,公有云一般可通过 Internet 使用,可能是免费或成本低廉的,公有云的核心属性是共享资源服务
混合云
融合了公有云和私有云,是近年来云计算的主要模式和发展方向
我们已经知道私企业主要是面向企业用户,出于安全考虑,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源
在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹配,以获得最佳的效果,这种个性化的解决方案,达到了既省钱又安全的目的
云存储
通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的系统
云游戏
以云计算为基础的游戏方式,在云游戏的运行模式下,所有游戏都在服务器端运行,并将渲染完毕后的游戏画面压缩后通过网络传送给用户
云物联
物联网中的感知识别设备(如传感器、RFID等)生成的大量信息,用云计算架构进行有效地整合与利用,解决数据存储、检索、使用、不被滥用等关键问题
云安全
融合了并行处理、网格计算、未知病毒行为判断等新兴技术和概念
通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中木马、恶意程序的最新信息,传送到Server端进行自动分析和处理
再把病毒和木马的解决方案分发到每一个客户端
openstack由来
一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目
openstack项目
1. 控制台
# 服务名:Dashboard # 项目名:Horizon # 功能:web方式管理云平台,建云主机,分配网络,配安全组,加云盘
2. 计算
# 服务名:计算 # 项目名:Nova # 功能:负责响应虚拟机创建请求、调度、销毁云主机 # 组成 nova-api 负责和其它openstack组件通信 nova-scheduler 负责调度出一台nova-compute nova-compute 调用主机上的驱动(例如:KVM、RHEV、Sen),创建一台虚拟机 nova-conductor # 一个简单处理流程 1) Nova-api接收到创建虚拟机的请求 2) Nova-api将创建虚拟机的详细信息保存在数据库中 3) 将创建虚拟机的消息发送到消息队列中 4) Nova-scheduler收到创建虚拟机消息 5) Nova-scheduler去数据库获取创建虚拟机的详细信息和主机节点信息,然后通过调度算法决定在那台物理机上创建虚拟机 6) 将创建虚拟机的消息发送到指定消息队列 7) 物理节点上的nova-computer接收创建虚拟机的消息 8) 由于物理节点上的nova-computer不知道自己要创建的虚拟机详细信息,于是发送消息到RabbitMQ中 9) nova-conductor接收到消息队列中来自nova-computer希望获取虚拟机的详细信息请求 10) nova-conductor 从数据库中获取虚拟机的详细信息,由于每个物理节点都有nova-computer,如果给它查询数据库的权限是非常危险的 11) nova-conductor 将从数据库获取虚拟机的详细信息发送到RabbitMQ中 12) nova-computer从消息队列中获取到了虚拟机的详细信息,开始调用Hypervisor,新建虚拟机
3. 网络
# 服务名:网络 # 项目名:Neutron # 功能:实现网络虚拟化,提供一整套API,用户可以基于该API实现自己定义专属网络,不同厂商可以基于此API提供自己的产品实现 # 组件 neutron-server 一个专门用来接收Neutron REST API调用的服务器,然后负责将不同的rest api分发到不同的neutron-plugin上 neutron-plugin 不同网络功能实现的入口,各个厂商可以开发自己的plugin。Neutron-plugin接收neutron-server分发过来的REST API,向neutron database完成一些信息的注册 然后将具体要执行的业务操作和参数通知给自身对应的neutron agent neutron-plugin分为core-plugin和service-plugin两类 Core-plugin Neutron中即为ML2(Modular Layer 2),负责管理L2的网络连接 ML2中主要包括network、subnet、port三类核心资源,对三类资源进行操作的REST API被neutron-server看作Core API,由Neutron原生支持 Service-plugin 除core-plugin以外其它的plugin,包括l3 router、firewall、loadbalancer、VPN、metering等等,主要实现L3-L7的网络服务 neutron-agent neutron-plugin在设备上的代理,接收相应的neutron-plugin通知的业务操作和参数,并转换为具体的设备级操作,以指导设备的动作 当设备本地发生问题时,neutron-agent会将情况通知给neutron-plugin # 一个简单的请求流程 1) 请求首先来到Neutron-server,选择一个Neutron-plugin发送消息到RabbitMQ中 2) 指定的Neutron-plugin接收消息队列中的消息,消息先保存到数据库中,然后再将具体创建网络的工作发送到RabbitMQ中 3) Neutron-agent接收具体的工作事项,从数据库中获取创建网络的详细信息 注意 一般而言,neutron-server和各neutron-plugin部署在控制节点或者网络节点上,而neutron agent则部署在网络节点上和计算节点上 我们先来分析控制端neutron-server和neutron-plugin的工作,然后再分析设备端neutron-agent的工作
4. 对象存储
# 服务名:对象存储 # 项目名:Swift # 功能:REST风格的接口和扁平的数据组织结构。 RESTFUL HTTP API来保存和访问任意非结构化数据,ring环的方式实现数据自动复制和高度可以扩展架构,保证数据的高度容错和可靠性 存储结构: 键值对形式存储,一个key对应一个文件object(1.object_id 2.元数据 3.数据源) key RESTFUL HTTP API形式 http://192.168.1.1 : object # 注意 使用对象存储必须通过rest api的方式,且由于不是文件存储,不能对原文件进行修改,它只能对Key值对应的文件进行覆盖
5. 块存储
# 服务名:块存储 # 项目名:Cinder # 功能:提供持久化块存储,即为云主机提供附加云盘 # 组成 cinder-api cinder 服务的 endpoint,提供 rest 接口,负责处理 client 请求,并将 RPC 请求发送至 cinder-scheduler 组件 cinder-scheduler 负责 cinder 请求调度,其核心部分就是 scheduler_driver 作为 scheduler manager 的 driver,负责 cinder-volume 具体的调度处理,发送 cinder RPC 请求到选择的 cinder-volume cinder-volume 负责具体的 volume 请求处理,由不同后端存储提供 volume 存储空间 目前各大存储厂商已经积极地将存储产品的 driver 贡献到 cinder 社区 # 一个简单的处理流程 1) 请求首先来到cinder-api,cinder-api将创建创建块存储的消息发送到RabbitMQ中 2) cinder-scheduler接收消息队列中的消息并将创建块存储的信息存到数据库中,然后再将消息发送到RabbitMQ中 3) 指定的cinder-volume接收消息队列中的消息,接收从数据库中获取创建块存储的详细信息,根据创建信息执行驱动程序存储磁盘分块 4) 将创建结果返回给请求者
6. 认证服务
# 服务名:认证服务 # 项目名:Keystone # 功能:为访问openstack各组件提供认证和授权功能,认证通过后,提供一个服务列表(存放你有权访问的服务),可以通过该列表访问各个组件 术语 # User 指使用Openstack service的用户,可以是人、服务、系统,但凡使用了Openstack service的对象都可以称为User # Group 用户组 # Domain # Project(Tenant) 可以理解为一个人、或服务所拥有的 资源集合 。 在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。 比如通过Nova创建虚拟机时要指定到某个Project中,在Cinder创建卷也要指定到某个Project中。 User访问Project的资源前,必须要与该Project关联,并且指定User在Project下的Role # Role 用于划分权限。可以通过给User指定Role,使User获得Role对应的操作权限。 Keystone返回给User的Token包含了Role列表,被访问的Services会判断访问它的User和User提供的Token中所包含的Role。 系统默认使用管理Role admin和成员Role _member_ # Policy OpenStack对User的验证除了OpenStack的身份验证以外,还需要鉴别User对某个Service是否有访问权限。 Policy机制就是用来控制User对Tenant中资源(包括Services)的操作权限。 对于Keystone service来说,Policy就是一个JSON文件,默认是/etc/keystone/policy.json。 通过配置这个文件,Keystone Service实现了对User基于Role的权限管理 # Token 是一个字符串表示,作为访问资源的令牌。 Token包含了在 指定范围和有效时间内 可以被访问的资源。 EG. 在Nova中一个tenant可以是一些虚拟机,在Swift和Glance中一个tenant可以是一些镜像存储,在Network中一个tenant可以是一些网络资源。 Token一般被User持有 # Credentials 用于确认用户身份的凭证 # Authentication 确定用户身份的过程 # Service Openstack service,即Openstack中运行的组件服务 # Endpoint 一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL。 比如,当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。 我们可以通过Endpoint的region属性去定义多个region Endpoint 该使用对象分为三类 admin url –> 给admin用户使用,Post:35357 internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000 public url –> 其它用户可以访问的地址,Post:5000 创建完service后创建API EndPoint. 在openstack中,每一个service都有三种end points. Admin, public, internal Admin是用作管理用途的,如它能够修改user/tenant(project) public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云 internal是openstack内部调用的。三种endpoints 在网络上开放的权限一般也不同 Admin通常只能对内网开放,public通常可以对外网开放internal通常只能对安装有openstack对服务的机器开放 # 功能 验证身份 分发 rest api # 在各个组件中的作用 1) horizon 拿用户登录的 credential 给 keystone 2) keystone 验证完用户身份返回一个token 3) 例如:用户想创建一个虚拟机,horizon 向nona 发送请求和token 4) Nova 接收到horizon的请求,并不会立刻执行操作,而是拿着token去找keystone验证token真实性 5) Nova 验证token成功,将请求Glance要镜像并附带token 6) Glance收到Nova请求同样也去请求keystone验证token的合法性 7) Glance处理完成请求并将镜像发送到Nova 8) Nova请求Neutron创建网络 9) Neutron同样拿着token去找keystone验证是否合法 10) Neutron创建完成网络,并返回结果给Nova 11) 最终Nova将创建完成虚拟机的结果返回给Horizon
7. 镜像服务
# 服务名:镜像服务 # 项目名:Glance # 功能:为云主机安装操作系统提供不同的镜像选择 # 请求流程 # v1版本 1) 客户端Nova请求Glance指定镜像,通过RESTFUL API发送请求 2) Glance-API获取Nova的请求,请求发送给Glance-registry查找数据库,获取元数据,查看有没有符合Nova请求的镜像 3) Glance-register将查询结果返回给Glance-API发送请求 4) 如果有符合要求的镜像,Glance-API将会从Swift、Rbd等拉取镜像文件 5) Glance-API在将镜像返回给Nova # v2版本 1) 客户端Nova请求Glance指定镜像,通过RESTFUL API发送请求 2) Glance-API获取Nova的请求,直接查询数据库 3) 拉取符合请求的镜像文件 4) Glance-API将镜像返回给Nova
8. 计费服务
# 服务名:计费服务 # 项目名:Ceilometer # 功能:收集云平台资源使用数据,用来计费或者性能监控
9. 编排服务
# 服务名:编排服务 # 项目名:Heat # 功能:自动化部署应用,自动化管理应用的整个生命周期.主要用于Paas
openstack新建主机流程
1. 界面或命令行通过RESTful API向keystone获取认证信息。
2. keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3. 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
5. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
6. 通过认证后nova-api和数据库通讯。
7. 初始化新建虚拟机的数据库记录。
8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
9. nova-scheduler进程侦听消息队列,获取nova-api的请求。
10. nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
11. 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
15. nova-conductor从消息队队列中拿到nova-compute请求消息。
16. nova-conductor根据消息查询虚拟机对应的信息。
17. nova-conductor从数据库中获得虚拟机对应信息。
18. nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19. nova-compute从对应的消息队列中获取虚拟机信息消息。
20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
21. glance-api向keystone认证token是否有效,并返回验证结果。
22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。
23. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
24. neutron-server向keystone认证token是否有效,并返回验证结果。
25. token验证通过,nova-compute获得虚拟机网络信息。
26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
27. cinder-api向keystone认证token是否有效,并返回验证结果。
28. token验证通过,nova-compute获得虚拟机持久化存储信息。
29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
openstack网络模式
单节点上虚拟机和虚拟机之间通信
直接同过OpenVswitch转发数据,即可通信
虚拟机跨物理节点通信
利用交换机的包转发机制,在大二层网络中转发数据包
虚拟机跟外网通信
同样利用交换机转发,将数据包转发到网络节点的OpenVswitch上
网络节点的OpenVswitch也就是L2-Agent转发到L3-Agent上
L3-Agent又关联物理机上的一块网卡,网卡是负责和外网通信的
Local网络模式
# 所有的虚拟机都在一个物理节点上,所有生产环境都不会使用
Flat网络模式
Flat网络模式 # 所有的虚拟都在一个局域网中所有生产环境都不会使用 Flat + DHCP网络模式 # 所有的虚拟都在一个局域网中所有生产环境都不会使用
VLAN网络模式
# OpenVswitch作用是虚拟vlanid和实际vlanid之间的转换 # 缺点 4096 vlan上限问题 mac地址和arp表过大 广播风暴 基于ip地址的子划分限制网络规模 # 特点 必须gen物理网络绑定 局域网是大二层架构 可以不需要网络节点 小规模部署,效率高
GRE和Vxlan
# 两者都是隧道网络 # GRE网络 利用三层网络实现虚拟二层数据包的转发,即物理上的三层通信,虚拟上的二层通信 # 数据传输过程 在数据包封装时,在mac报头外包装一层GRE报头,然后在GRE报头外包装IP包头,IP报头负责路由功能, 到了对端后解开GRE报头,获取到GRE id,该id类似于vlan id,然后利用此id在对端局域网vlan内转发数据包 从而实现跨网络的虚拟二层转发 # 类似于VPN,基于IP转发数据包的 # OpenVswitch作用是将虚拟vlanid和GRE tunnel id之间的转换 # 报文格式 源数据 + mac报头 + gre报头 + IP报头(delivery协议报头) # 优点 gre id:2的24次方 只识别终端设备的mac 三层网络 解决ip地址划分规模问题 # 缺点 两两计算节点建立隧道 # Vxlan网络 利用三层网络实现虚拟二层数据包的转发,即物理上的三层通信,虚拟上的二层通信 # 报文格式 源数据 + mac报头 + vxlan报头(vni id + 组播地址) + UDP报头 + IP报头
参考博客 http://blog.51cto.com/egon09/1845226