小生博客:http://xsboke.blog.51cto.com
-------谢谢您的参考,如有疑问,欢迎交流
目录:
一、keystone详解 --------------- (openstack认证服务)
二、glance详解 ---------------(openstack镜像服务)
三、nova详解 ---------------(openstack计算服务)
四、neutron详解 ---------------(openstack网络服务)
五、cinder详解 ---------------(openstack存储服务)
一、 Keystone概述
1. Keystone提供认证、权限、服务列表三大功能:
1)认证:身份验证(identify)、令牌(token)
2) 权限:admin(管理员)、user(用户)
3)服务列表:体现在用户登录openstack后,能够使用的计算、存储、网络等服务列表
2. Keystione的关键术语:
1)一个user(用户)可以关联一个或多个tenant(租户/项目)
2) 一个项目(tenant/project)由一个或多个虚拟机组成
3)一个项目(tenant/project)可以关联一个或多个user(用户),每个user可以拥有不同的权限
4)Role(角色):定义用户的权限,openstack有几个内置的角色,admin,member等
5)Token(令牌):定义了令牌的有效时间和令牌中用户的权限,项目等基本信息
6)Service:对应业务模型服务,如计算(compute),存储(volume),镜像(Glance)等
7)Endpoint:服务的访问入口每个服务都会有自己的访问入口,也称之为访问端点。
Endpoint使用对象分为三类:
admin url –>给admin用户使用,Post:35357
internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000
public url –>其它用户可以访问的地址,Post:5000
3. keystone验证流程:以创建虚拟机的流程为例
用户向keystone发送用户名和密码,通过验证后,keystone会返回一个临时token和一个service catalog的列表。
用户用这个临时的token向catalog列表中keystone的endpoint请求用户对应的tenant信息,keystone验证token通过后会返回用户对应的tenant列表。
用户从列表中选取tenant,再次向keystone请求,keystone验证通过后,返回与该tenant相关的catalog信息和token。
用户用该token以及tenant/user信息向catalog中的nova服务器端点请求开启虚拟机服务。nova向keystone请求验证:<1>.token是否合法<2>.这个租户和用户是否有权限来向nova请求服务?
keystone返回给nova:<1>.租户-用户具备访问nova权限。<2>. token合法<3>. token属于该租户-用户。
nova根据自己的规则判断用户是否具备开启虚拟机的权限,如果具备,启动虚拟机,并向用户报告状态。
二、 glance概述
openstack中的镜像管理模块,存储了镜像的元数据
功能:虚拟机的查找、注册和检索等操作
Glance在openstack中的位置:
1. Glance的概念
image identifiers/image URI:镜像标识
2. Image 状态
l queued:镜像ID已经被保留,镜像的metadata已经被写到数据库中,但镜像还没有上传
l saving:镜像正在被上传
l active:镜像可以使用了
l killed:镜像损坏或者不可用
l deleted:镜像被删除
3. disk format:镜像磁盘格式(取决于虚拟化类型)
raw:分配多少占用多少空间,性能好
vhd:vmware,xen,microsoft,virtualbox支持的格式
vmdk:common format 开源社区通用的,规范化的磁盘格式
vdi:virtualbox,qemu emulator这两类hypervisor支持的格式
iso: optical disc光盘镜像,主要用来做归档之用
qcow2:主要用于qemu类型的虚拟机,特点是磁盘大小动态扩展,占多少用多少,但是其性能比raw差
aki、ari、ami:亚马逊
4. container format:容器格式
1)容器的作用:
整合创建虚拟机的相关选项,如:购买华为云时选择云主机的配置
2)容器的格式:
Bare:当不确定磁盘格式时,使用。
Ovf:模版
aki、ami、ari:亚马逊
3) image-create命令至少要接收三个参数:
--name:指定创建的镜像名
--container_format:用于表明镜像文件是否包含了虚拟机的元数据信息,然而,目前compute服务并未使用此信息,因此,在不确定的情况下可以将其指定为bare,而常用的格式主要有bare(没有container或元数据信息)、ovf、aki、ari或ami几种。
--disk_format:用于指明磁盘镜像文件的格式,包括raw,qcow2,vhd,vmdk,iso,vdi,aki,ari,ami等。
5. Glance的基本组件
Glance API:对外提供镜像接口服务,包括镜像的上传和下载,更改信息以及虚拟机、云硬盘快照管理等接口服务。
Glance Registry(注册服务):存储镜像元数据信息与数据库交互实现镜像基础信息存储
store adapter(存储适配器):镜像本身的存储,提供多种存储适配,支持亚马逊云存储S3(Simple Storage Service简单存储服务),openstack自由的swift(对象存储)以及常用的文件存储系统,当然也可以自行开发拓展到其他存储上。
glanceDB:glance存在数据库中的镜像元数据
三、 nova概述
nova在openstack中用于提供计算服务,由多个组件组成
nova的核心组件:
nova-api:对外提供入口
scheduler:调度服务
compute:计算服务
compute driver:用于调度hypervisor的驱动
nova在openstack中的位置
1. nova的架构(组件)
2. 通过一个云主机的创建流程了解openstack及其组件nova的工作流程
大概流程来说:
第一步:用户通过horizon(web)登录openstack,经过keystone认证并获取token
第二步:用户请求连接nova进行相关操作,nova找到keystone验证用户和token
第三部:用户的请求在nova中的MQ被提取,然后放入novacompute
第四步:novacompute连接glance,然后glance找到keystone验证用户和token,获取镜像信息
第五步:novacompute连接neutron,然后neutrom找到keystone验证用户和token,获取网络信息
第六步:novacompute连接cinder,然后cinder找到keystone验证用户和token,获取存储
第七步:novacompute交由底层的hypervisor创建虚拟机
虚拟机启动过程如下:
界面或命令行通过RESTful API向keystone获取认证信息。
keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
通过认证后nova-api和数据库通讯。
初始化新建虚拟机的数据库记录。
nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(HostID)。
nova-scheduler进程侦听消息队列,获取nova-api的请求。
nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
nova-conductor从消息队队列中拿到nova-compute请求消息。
nova-conductor根据消息查询虚拟机对应的信息。
nova-conductor从数据库中获得虚拟机对应信息。
nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
nova-compute从对应的消息队列中获取虚拟机信息消息。
nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
glance-api向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机镜像信息(URL)。
nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
neutron-server向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机网络信息。
nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
cinder-api向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机持久化存储信息。
nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
四、 neutron概述
neutron是在openstack m版才开始使用的,主要用于网络管理。
Neutron就是openstack的networking server 代码名称
Neutron为使用者提供了整合多个不同的网络技术来最大化发挥网络功能的机制,并提供了通过三层转发及NAT配置和管理网络功能的API以实现负载均衡,边缘防火墙及ipsec ***等
1. neutron的功能
提供网络模型:flat、flatdhcp、vlan
IP地址管理:novanetwork需要管理虚拟机使用的IP地址,这些地址包含两类,一类是fixed ip,在虚拟机的整个生命周期中该IP地址都不会发生变化;另一类是floating ip,是动态的分配给虚拟机的,随时都可以收回
Dhcp功能:在flatdhcp和vlan模式下,虚拟机是通过DHCP来获取其fixed ip的;novanetwork会启动dnsmasq作为虚拟机的DHCP服务器,该虚拟机分配ip
安全防护:出于安全的考虑,nova中的虚拟机可以防止IP/MAC洪泛,不能随便修改虚拟机的MAC地址,修改后虚拟机就不能上网了,这项功能主要是通过ebtables/iptables实现的。
2. Openstack早期版本的网络方案
Flat:扁平
所有虚拟机在同一网段,
没有网路隔离功能,不需要dhcp,
需要通过文件注入的方式设置网络,
通过网络控制器(nova-network节点)对虚拟机实例进行NAT转换,实现与外部的通信
FLAT模式需要在安装openstack时需要手工配置好网桥(br100),所有的系统实例都是和同一个网桥连接,网桥与连接到网桥的实例组成一个虚拟网络。
Flatdhcp模式
与扁平模式类似,也只有一个子网
不需要文件注入
通过dhcp server的方式监听网桥上的dhcpdiscover(dnsmasq)的包的方式为虚拟机分配IP地址,虚拟机启动时通过DHCP获取其fixed ip
Vlan模式
每个项目(project)分配一个vlan id,每个项目也可以有自己的独立的ip地址段,属于不同project的虚拟机连接到不同的网桥上,因此不同的project之间是隔离的,不会相互影响
访问一个项目的所有虚拟机需要创建一个***虚拟机,以此虚拟机作为跳板去访问该project的其他虚拟机
每个project启动一个dnsmasq来配置虚拟机的fixedip
3. Neutron服务简介
neutron 是一个分层架构,所有的请求都先到 neutron server 上, neutron server 有多个 API ,用于提供各种功能,用户调用 API 后,内部通过 RPC 机制调用 agent 层的一些服务,这些 agent 有二层、三层的, agent 相当于一个中间代理层, agent 再会调用设备层相应的驱动来完成用户 API 所请求的功能。
所有获取网络的请求——neutron server(多个API组成)——通过调用api接口来访问neutron提供的功能——然后基于RPC调用agent——通过agent提供的相关驱动调用服务——通过服务调用设备层的设备完成请求
4. Neutron的基本概念
Networking API:NetworkingAPI通过软件方式定义了虚拟网络(network),子网(subnet),port(端口)等抽象层,用来描述网络资源
网络(network):用于划分虚拟网络,neutron中“网络”是一个可以被用户创建的对象,相当于交换机
子网(subnet):子网就是一个地址池,不同的子网间通信需要路由器的支持,子网隶属于网络端口(port):相当于交换机的逻辑端口路由器(router):和物理环境下的路由器类似,Neutron中的路由器也是一个路由选择和转发部件。只不过在Neutron中,它是可以创建和销毁的软部件。
Dhcp:为租户(也叫项目,project)网络提供DHCP服务,即IP地址动态分配,另外还会提供metadata请求服务
Dhcp aget:负责处理dhcp请求,为网络分配IP
DHCP agent scheduler:DHCP agent与network的调度,即某个网络的DHCP请求要发向那个DHCP agent,如采用轮询调度算法
5. Neutron部署模式/模型
1) Single FLAT Network:单一扁平网络
所有虚拟机在同意网段
可以使用dhcp分配ip地址
不支持浮动IP(floating ip,不使用后释放)
2)Mutiple FLAT network:多个扁平网络模式
可以创建多个子网,每个项目可以连接一个或多个子网
不支持floatingip
3) provider router with privatenetwork:租户私有网络单个路由器
允许每个租户拥有多个自己的私有网络,私有网络通过路由器router连接至外部网络
支持浮动ip(floating ip)
4)Per-tenant Routers with privatenetwork:多路由器私网模式
子网重叠(overlapping):支持不同网络的子网重叠
每个租户可以自己定义自己的虚拟路由器和私有网络,为虚拟机绑定floating IP,目前此种部署模式是最常用且先进的。
部署novanetwork时至少需要两块网卡,一块作为public network,主要承载公网流量和openstack各个组建之间的流量,要能够访问公网,ip地址可以为内网地址也可以为公网地址;另一块作为internal network,承载虚拟机之间相互通信的流量,不需要为其分配ip地址,只需要保证它们物理上可以互联即可
5. nova network的主要配置选项有
Multihost:多主机模式,可以降低neutron的负载
在multihost模式下,首先需要将multi_host设置为True,然后在每个计算节点上都安装好nova-network nova-api-metadata nova-compute
五、 cinder块存储
只负责提供虚拟机存储
在openstack中,硬盘以vda、vdb、vdc这种方式显示
存储具体实现机制如图:
nova存储实现机制包括以下几个关键环节:
nova-api调用nova-compute主机接口run_instance。
nova-compute调用存储接口volume-api的create方法,创建存储。
volume-api存储接口将存储信息通过调度方式发送至调度引擎scheduler。
调度引擎scheduler根据一定的算法,选择具体一个存储节点,发指令至该节点cinder-volume
cinder-volume接收到创建云硬盘(create_volume)指令值,创建逻辑卷LV,并发布逻辑单元(LUN)
nova-compute接收到云硬盘创建成功的反馈后,调用其虚拟化实现,如Libvirt Driver的SCSI实现,实现ISCSI initiator连接至对应的存储逻辑单元LUN,将该块设备分配给虚拟机。